LoginSignup
4
0

GitHub Actions を使って `pulumi preview` を実行し、Pull request に表示する方法 (TypeScript 編)

Last updated at Posted at 2021-12-05

はじめに

Pulumi には 反映済みの リソースとの差分を表示する pulimi preview コマンドがあります。

Pull request を作成した際に、 pulimi preview 結果を Pull request に表示する方法の 1 つ に GitHub Actions を利用する方法があるため今回その方法を記載します。

GitHub Actions の定義ファイルを作成する

.github/workflows/pulumi_preview.yml を作成します。
YML のファイル名には制限はないため利用している Project に応じて適切な名前を利用してください。

先に作成済みの YML ファイルを記載し、細かな説明を行います。

.github/workflows/pulumi_preview.yml
name: pulumi preview

on:
  pull_request:

permissions:
  contents: read
  pull-requests: write

jobs:
  pulumi_preview:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 16.x
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-region: ${{ secrets.AWS_REGION }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      - uses: pulumi/actions@v3
        with:
          command: preview
          stack-name: production
          cloud-url: s3://your-state-bucket
          comment-on-pr: true
          github-token: ${{ secrets.GITHUB_TOKEN }}
        env:
          PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}

Project の checkout と必要な言語

今回のサンプルは TypeScript を例に記載します。
TypeScript 以外を利用している場合 actions/setup-node@v2 を利用している言語 (および バージョン) に切り替えてください。

サンプル

steps:
  - uses: actions/checkout@v2
  - uses: actions/setup-node@v2
    with:
      node-version: 16.x

AWS Credential を設定する

今回 state の保存先に AWS S3 を利用するため AWS Credential の定義を行います。
以下は、 AccessKey と SecretAccessKey を用いていますが、 必要に応じて OIDC を用いるなど読み替えてください

- name: Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v1
  with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws-region: ${{ secrets.AWS_REGION }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

Pulumi preview の設定を行う

記載した オプション (with) 部分を簡単に説明します。

  • command
    • pulumi <up|down|preview> などを指定します
  • stack-name
    • 表示の通り stack 名を指定します
    • 今回は production という stack を利用するとします
  • cloud-url
    • state の保存先を指定します
    • このサンプルは AWS S3 (bucket 名は your-state-bucket) を利用します
      • AWS S3 以外 にも Google Cloud Storage なども利用できます、詳細については以下 URL を確認してみてください
      • State and Backends | Pulumi
  • comment-on-pr
    • preview の結果などを Pull request にコメントとして記録するかを選択できます
    • GitHub Actions の実行条件が push の時は false を指定 (または、定義しない)
      • コメント追加処理を行うため Pull request を探しますが見つからないためエラーとなります
  • github-token
    • comment-on-prtrue にする際は必須
    • コメントを追加する処理を行うために必要です
      • また、 GitHub Actions の permissions に pull-requests: write の定義するのを忘れないようにしましょう
- uses: pulumi/actions@v3
  with:
    command: preview
    stack-name: production
    cloud-url: s3://your-state-bucket
    comment-on-pr: true
    github-token: ${{ secrets.GITHUB_TOKEN }}
  env:
    PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}

終わりに

公式ドキュメントも整備されており、(若干かゆいところに手が届かない部分もありますが) 上記定義だけで簡単に Pull request にコメントを追加するだけならば簡単に実現できました。

今回は GitHub Actions を利用する例を記載しましたが、GitHub と Pulumi service を利用している場合は "Pulumi GitHub App" を使うことで、作成した Pull request に pulumi preview 結果を簡単に出力することができます。

"Pulumi GitHub App" を利用できる場合は "Pulumi GitHub App" の利用をお勧めします。
Pulumi GitHub App については以下 URL を参照してください

Reference

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0