前回
#PipeCD を使って #Terraform を運用する記事です。ご投稿ありがとうございました。
— nghialv 🐳 (@nghialv2607) November 9, 2021
PipeCDではTerraformのmono repoを運用するのは便利だと思います。沢山のterraform appでも楽です。
Plan-previewという機能のあるので、是非使ってみてください。https://t.co/XcSHgNf0UM https://t.co/JacrWO3u2c
というわけで plan-preview を試してみる。
公式ドキュメントは以下。
plan-preview は pipectl という CLI のサブコマンドとして提供される。
そしてこれには github-actions が提供されている。
サンプルのものをそのまま使えば良い。以下は実際に自分のリポジトリで動かしたもの。
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_ADDRESS
と PIPECD_PLAN_PREVIEW_API_KEY
を repository secret に入れる。
PIPECD_API_ADDRESS
は hostname: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 + }
こういう通知が来る。
details を開くと普通に plan の結果が出ている。
便利。
まとめ
- pipecd の plan-preview 機能は actions が提供されており、サンプル通りに記載するだけで動く
- plan-preview は terraform 以外にも apply 予定の"plan"を CI で閲覧することができる
他のツールとの比較
CI での plan 結果の通知は自前で実装することもできるが、Terraform に特化したツールといえば tfnotify と tfcmt がある。
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 がある。
2021-01-31 追記: 過去のコメント hide が実装されたようです
actions-plan-preview v1.4.0 has been released!
— PipeCD (@pipecd_dev) January 31, 2022
To ensure the readability of PR comments, "actions-plan-preview" will automatically hide all its previous comments before adding a new one.https://t.co/DoB62AEid9#PipeCD pic.twitter.com/IzSl9ebAki