👨‍🔧

.terraform-versionファイルでsetup-terraformアクションのバージョンを指定する方法

2023/12/06に公開

この記事はterraformのカレンダー | Advent Calendar 2023 - Qiitaの6日目の記事です。

解決したい課題

terraformのバージョン管理にtfenvを使っているが、バージョンアップの時に .terraform-version ファイルに加えてGitHub Actionsのワークフローファイル内の記述も更新する必要がある。
手間を減らし更新忘れを防ぐため、バージョンの記述を一元化したい。

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: 1.6.5

解決策

Get terraform version · Actions · GitHub Marketplaceを使います。

記述例
      - name: Get Terraform version
        id: terraform-version
        uses: bigwheel/get-terraform-version-action@v1.2.0
        with:
          path: ${{ inputs.working-directory }}

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: ${{ steps.terraform-version.outputs.terraform-version }}

このActionを使用するのではなく、Add support for `.terraform-version` file · Issue #298 · hashicorp/setup-terraformで紹介されているように単に cat path/to/.terraform-version とする方法もあります。
その方法と比べてこのActionが優れているのは、tfenvの挙動とできる限り似せた挙動を取っていることです。
これにより .terraform-version 内のバージョン指定が正規表現でも対応できたり、 .terraform-version ファイルの位置が変わっても、ワークフローのyamlを書き換える必要なく、terraform コマンドの実行ディレクトリから順に親ディレクトリをたどって探してくれる、といった tfenv 互換の挙動を取ってくれます。

Discussion