🥟

tfcmtを使ったらQuality of PRが上がった話

に公開

はじめに

Terraformでインフラを構築している場合、applyする前のコードレビューってどうしてますか?
従来私の現場では、プルリクを作成しコメントに手元のplan結果を貼り付けていました。

しかし、これが地味にめんどくさい...

ってことで、Github ActionsでPR作成したタイミングで、tfcmtでplan結果をコメント出力させる、CIを構築してみました。

tfcmtとは?

作成、変更、削除予定のAWSリソースを分かりやすく出力してくれるツール。
planの結果はterraformを触ったことのない方だと、少々見にくい印象ですが、tfcmtはこんな感じで整形してコメントに出力してくれます。

詳細は、公式ドキュメントをご参照ください。
https://suzuki-shunsuke.github.io/tfcmt/

サンプルコード

name: Terraform CI
on:
  pull_request:
    branches:
      - develop

permissions: 
  id-token: write
  contents: read
  pull-requests: write

jobs:
  terraform:
    name: Terraform Plan
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
         role-to-assume: ${IAM Role ARN}
         aws-region: ap-northeast-1

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1

      - name: Setup tfcmt
        uses: shmokmt/actions-setup-tfcmt@v2
        with:
          version: v4.6.0

      - name: Terraform fmt
        id: fmt
        run: terraform fmt -recursive

      - name: Terraform init
        id: init
        run: terraform init

      - name: Validate Terraform
        id: validate
        run: terraform validate

      - name: Terraform Plan
        id: plan
        run: tfcmt plan -patch -- terraform plan -input=false
  
  • on: pull_requestでPR作成をCIのトリガーにする。
  • pull-requests: writeはコメント投稿に必要な権限なので、渡してあげる。
  • patchオプションでplan結果の更新があれば併せてコメントも更新。

CIが通ると以下のようなコメントがPRに追加されます。

まとめ

tfcmtのおかげでPRレビューもより捗るようになりました。
内容に合わせてadd-or-updata, deleteのラベルを付与してくれるのも有り難い!

Discussion