AWSinfrastructureTypeScriptCircleCIPulumi

Circleci で Pulumi Service を利用せず pulumi preview を実行する (AWS - TypeScript/JavaScript編)

はじめに

CircleCI で Pulumi Service を利用せずに pulumi preview するまでの手順と設定をまとめました。 pulumi 公式のドキュメントにも CircleCI で preview を実行する方法は用意されていますが、 Pulumi Service の利用が前提になっています。 CircleCI で pulumi preview を実行する際に Pulumi Service を利用できる場合は公式ドキュメントを参照することをおすすめします。

また、既に pulumi のプロジェクトを作成済みであることを前提に記述します。 ブロジェクト作成方法は以下等を参照してください。

依存パッケージ等バージョン

利用したバージョンは以下のとおりです。

  • pulumi v3.1 以上
  • node v14

CircleCI の設定ファイルを作成する

タイトルの通り. CircleCI の設定ファイルを用意しましょう。 先に完成後のファイルを載せ、ポイントは後で記載します。

version: 2.1
orbs:
    pulumi: pulumi/pulumi@2.0.0
jobs:
  pulumi_preview:
    docker:
      - image: 'circleci/node:14'
    steps:
      - checkout
      - run:
          name: Define PULUMI_CONFIG_PASSPHRASE as an environment variable
          command: echo "export PULUMI_CONFIG_PASSPHRASE=$TEST_PULUMI_CONFIG_PASSPHRASE" >> $BASH_ENV
      - pulumi/login:
          version: 3.1.0
          cloud-url: file://~
      - run:
          name: Yarn install
          command: yarn install
      - pulumi/stack_init:
          stack: 'mziyut-test-pr_${CIRCLE_BUILD_NUM}'
      - run:
          name: Set AWS region to ap-northeast-1
          command: pulumi config set aws:region ap-northeast-1
      - pulumi/preview:
          stack: 'mziyut-test-pr_${CIRCLE_BUILD_NUM}'
      - pulumi/stack_rm:
          stack: 'mziyut-test-pr_${CIRCLE_BUILD_NUM}'

workflows:
  version: 2
  test:
    jobs:
      - pulumi_preview:
          filters:
            branches:
              ignore:
                - main
                - master

ポイント 1: Orb の設定をしよう

Orb に対する詳しい説明は以下を参照してください。

簡単に説明すると、後述する pulumi/loginを実行出来るよう、設定等を読み込むための設定です。 定義しない場合、 pulumi/login 等実行することができません。

orbs:
  pulumi: pulumi/pulumi@2.0.0

ポイント 2: PULUMI_CONFIG_PASSPHRASE を定義しよう

pulumi/stack_init を実行する際に、パスフレーズが定義されていない場合パスフレーズを要求され先に進みません。 また、よほどのことがない限り、本番とテスト環境でパスフレーズを同一にする必要はないため Variables に別名で定義しておき、Job 内で PULUMI_CONFIG_PASSPHRASE に定義し直しています。

- run:
    name: Define PULUMI_CONFIG_PASSPHRASE as an environment variable
    command: echo "export PULUMI_CONFIG_PASSPHRASE=$TEST_PULUMI_CONFIG_PASSPHRASE" >> $BASH_ENV

ポイント 3: pulumi/login 実行時の cloud-url の設定について

今回は Pulumi Service を利用しない(=Local にある state ファイルを参照する)ため、 cloud-urlfile://~ と定義します。 ちなみに、 pulumi login --local と実行したときに設定される cloud-url と同値です。

- pulumi/login:
    version: 3.1.0
    cloud-url: file://~

また、この時点で pulumi コマンドが存在しない(未インストールの場合)同時にインストールも実行されます。

ポイント 4: リージョンを設定しよう

pulumi preview を実行する場合、リージョンの設定が必要です。 今回は東京リージョンを定義しておきます。

- run:
    name: Set AWS region to ap-northeast-1
    command: pulumi config set aws:region ap-northeast-1

最後に

今回はテスト用に stack を定義しましたが、production 環境に適用している stack を用い preview することもできます。 CircleCI の設定ファイル内、stack 定義部分を書き換えてみてください。