ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

PipeCD で Terraform Apply する前に plan-preview で実行計画を確認する

Terraform アドベントカレンダー3日目の記事です

前回

blog.chaspy.me

というわけで plan-preview を試してみる。

公式ドキュメントは以下。

pipecd.dev

plan-preview は pipectl という CLI のサブコマンドとして提供される。

そしてこれには github-actions が提供されている。

github.com

サンプルのものをそのまま使えば良い。以下は実際に自分のリポジトリで動かしたもの。

on:
  pull_request:
    branches:
      - main
    types: [opened, synchronize, reopened]
  issue_comment:
    types: [created]

jobs:
  plan-preview:
    runs-on: ubuntu-latest
    if: "github.event_name == 'pull_request'"
    steps:
      - uses: pipe-cd/actions-plan-preview@v1.1.5
        with:
          address: ${{ secrets.PIPECD_API_ADDRESS }}
          api-key: ${{ secrets.PIPECD_PLAN_PREVIEW_API_KEY }}
          token: ${{ secrets.GITHUB_TOKEN }}

  plan-preview-on-comment:
    runs-on: ubuntu-latest
    if: "github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/pipecd plan-preview')"
    steps:
      - uses: pipe-cd/actions-plan-preview@v1.1.5
        with:
          address: ${{ secrets.PIPECD_API_ADDRESS }}
          api-key: ${{ secrets.PIPECD_PLAN_PREVIEW_API_KEY }}
          token: ${{ secrets.GITHUB_TOKEN }}

PIPECD_API_ADDRESSPIPECD_PLAN_PREVIEW_API_KEY を repository secret に入れる。

f:id:take_she12:20211207220358p:plain

PIPECD_API_ADDRESShostname:443 みたいなのをいれる。 PIPECD_PLAN_PREVIEW_API_KEY は control plane の settings から発行する。

こういう gcs object を追加するとする。

+ resource "google_storage_bucket_object" "object2" {
+   name    = "examples/waitapproval/test.txt"
+   bucket  = "pipecd-terraform-chaspy-dev"
+   content = var.content
+ }

こういう通知が来る。

f:id:take_she12:20211207221046p:plain

details を開くと普通に plan の結果が出ている。

f:id:take_she12:20211207221213p:plain

便利。

まとめ

  • pipecd の plan-preview 機能は actions が提供されており、サンプル通りに記載するだけで動く
  • plan-preview は terraform 以外にも apply 予定の"plan"を CI で閲覧することができる

他のツールとの比較

CI での plan 結果の通知は自前で実装することもできるが、Terraform に特化したツールといえば tfnotify と tfcmt がある。

github.com

github.com

tfnotify はメンテされていないので、tfcmt と比較する。tfcmt は Terraform での通知に特化しているので多くの優位点がある。その内容は tfcmt の README にある通りだが、

  • 結果がより見やすい
  • 削除時に警告される
  • PR にラベルが付与される
  • terraform 以外での変更が行われた部分をわけて表示する
  • github-comment と連携し、過去の comment を hide する

今回は terraform を試したが、kubernetes, lambda, cloudrun, ecs に関しては優位性があるかもしれない。他のツールでも同じような機能を提供しているものはあるかもしれないが、pipecd を使っていれば同様の設定1つだけで実装できるのは pipecd の有意な点だろう。

plan-preview は"plan" preview であることから、plan の結果しか通知できない。merge 後に結果どうなったかの通知もあるとよさそうである。このあたりも tfcmt に優位性がある。

ArgoCD の場合、sync 後の通知には argocd-commenter がある。

github.com