terraform planの結果をGitHubのPRにコメントしてくれる便利なツールを見つけました
その名もtfcmt!!
GitHub Actionsに導入するのも簡単なので、皆さんもぜひ本記事を参考にしてみてください
tfcmtとは?
tfcmtを使うとterraform planやapplyの結果をGitHubのPullRequestにコメントしてくれます。
ソースコード
公式ドキュメント
Zennの記事
tfactionなるものもあるのでご興味がある方はぜひ!
tfcmtを使わないと…..
tfcmtを使用しなくてもActionsのログからplanやapplyの結果を見れますが、面倒。。。
また、今まではgithub-scriptでJavaScriptを使ってplanの結果をPRにコメントしてました
ただ、この方法だとRefreshing state などのログもコメントに含まれ見にくい。
何が作成?変更?削除?されるのかもわかりづらい。
tfcmtを使うと、
- いくつリソースが作成、変更、削除されるかがパッとわかる
- リソース削除されるときに警告される
- planの詳細も関係あるリソースのみ表示される
ので、とても見やすいコメントをしてくれます!
レビューする側からすると負荷がとても減りますよね
GitHubActionsに組み込む
ここからはtfmctをGitHubActionsに組み込んでいきます!
↓のようにワークフローを定義しました(ポイントはハイライト部)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
name: TerraformPlan on: pull_request: branches: - main env: TF_VERSION: 1.8.5 AWS_DEFAULT_REGION: ap-northeast-1 permissions: id-token: write contents: read pull-requests: write jobs: plan: runs-on: ubuntu-latest steps: - name: Check out repository code uses: actions/checkout@v3 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-region: ${{ env.AWS_DEFAULT_REGION }} role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - name: Setup Terraform uses: hashicorp/setup-terraform@v2 with: terraform_version: ${{ env.TF_VERSION }} - name: Setup tfcmt uses: shmokmt/actions-setup-tfcmt@v2 with: version: v4.6.0 - name: Terraform init id: init run: terraform init - name: Terraform fmt id: fmt run: terraform fmt -check - name: Terraform validate id: validate run: terraform validate - name: Terraform plan id: plan env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: tfcmt plan -patch -- terraform plan -input=false |
ハイライト部をそれぞれ見ていきます
まずは、tfcmtのセットアップをします
1 2 3 4 |
- name: Setup tfcmt uses: shmokmt/actions-setup-tfcmt@v2 with: version: v4.6.0 |
wgetしてtargzを解凍して…としてもいいのですが、actions-setup-tfcmtを利用します。
インストールするtfcmtのバージョンを4.6.0と指定しています
そして、terraform planを実行するパート。
1 2 3 4 5 |
- name: Terraform plan id: plan env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: tfcmt plan -patch -- terraform plan -input=false |
tfcmt planコマンドを実行すると、planとその結果をコメントしてくれます。
使用するにはGitHubのトークンを渡す必要があるので環境変数に定義しておきます。
※GITHUB_TOKENは自動で生成され、シークレットに格納されるので指定するだけでOK!
patchオプション:すでにコメントがありCIが再実行された場合それが更新されます
–(ダブルダッシュ)の後に terraform planを指定します。
ここでは、-input=falseといったterraform planのオプションを指定できます
動作確認
動作確認のため、↓のようにS3を作成するコードを用意しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
terraform { required_version = "~> 1.8.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 4.16" } } # tfstateの保存先 backend "s3" { bucket = "terraform-test-state-hisui" region = "ap-northeast-1" key = "test/terraform.tfstate" encrypt = true } } provider "aws" { region = "ap-northeast-1" } # S3バケットの定義 resource "aws_s3_bucket" "example" { bucket = "example-bucket-hisui" force_destroy = true } # バージョニング設定 resource "aws_s3_bucket_versioning" "example" { bucket = aws_s3_bucket.example.id versioning_configuration { status = "Enabled" } } |
これをもとにPRを作成すると….
Planの結果をコメントしてくれました!
今回の場合だと何が作成されるかがぱっと見でわかるのでありがたい!!
CI link を押すとGitHub Actionsのログに飛べるのも便利
Planの結果に応じてPRにラベルもつけてくれます
- 緑:リソースの変更なし
- 青:リソースの作成または更新
- 赤:リソースの削除
今回はS3を作成するので青色のラベルがついてます
ラベルはPR一覧にも表示されます
コードを変更してpushすると再度CIがはしりコメントが更新されます
参考記事
コメント