かまたま日記3

プログラミングメイン、たまに日常

Terraformのlockfileを更新するGitHub Actionを作った

Terraform 0.14からDependency Lock File が導入されました。 そのためTerraformのproviderを更新する際にこちらのlock file (.terraform.lock.hcl) も更新する必要があります。

SEQSENSEでは Renovate を使ってライブラリアップデートを行っていますが*1、Terraformのproviderのバージョンアップは対応しているものの、lock fileの更新は2021/6/6時点でまだ未対応です。

github.com

そのため、RenovateのPRが作成された後にlock fileを更新してpushするGitHub Actionを作成しました。

github.com

以下の設定をすると、RenovateのPRが作成された際に、.terraform.lock.hcl を検知して更新したものをpushしてくれます。

name: terraform-lock-fix
on:
  push:
    branches:
      - renovate/*

jobs:
  terraform-lock-fix:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 2
      - name: fix
        uses: seqsense/terraform-lock-fix-action@v0
        with:
          git_user: @@MAINTAINER_NAME@@
          git_email: @@MAINTAINER_EMAIL_ADDRESS@@
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_style: squash
          push: force

余談

Terraformのproviderのバージョン指定は範囲指定など柔軟にできるようになってますが (参考)、Renovateを使う場合、次のバージョンの検知はRenovateが勝手にやってくれるので、Renovate外での不要な更新を避けるために固定バージョンでやるのが良いと思います。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "3.44.0"
      //      version = "~> 3.0"
    }
  }
}