📌

tfupdate と tfupdate-action を組み合わせて GitHub Actions で terraform 自動アップデート

2022/12/08に公開

やりたいことはタイトルですべて書いたので、この記事は簡潔に書きます。

tfupdate についての説明も省きます。
https://qiita.com/minamijoyo/items/1350fb28ae82a3dbb354

tfupdate の GitHub Actions への組み込みについては色々な方法がありそうで、検索しても色々な情報がヒットしますが、ここでは tfupdate-action を用いて組み込みます。
https://github.com/HENNGE/tfupdate-action

手順については上記 GitHub の Readme に記載されていますが、以下のような Actions 用の yaml を作成することで、定期的に  tfupdate のチェックを行ってくれるようになります。
(Readme から引用)

name: Terraform Update

on:
  schedule:
    - cron: "0 11 * * 1-5"

env:
  # To use hub command in Github Action: https://github.com/github/hub#github-actions
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  # If you use personal token, replace email/user accordingly
  USER_EMAIL: action@github.com
  USER_NAME: GitHub Action

jobs:
  run_tfupdate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Update terraform
        uses: HENNGE/tfupdate-action@v1.0.5
        with:
          resource: "terraform"
          file_path: "./tf/config.tf"

      - name: Update terraform provider
        uses: HENNGE/tfupdate-action@v1.0.5
        with:
          resource: "provider"
          provider_name: "aws"
          file_path: "./tf/config.tf"

      - name: Update terraform module
        uses: HENNGE/tfupdate-action@v1.0.5
        with:
          resource: "module"
          module_name: "terraform-aws-modules/vpc/aws"
          source_type: "tfregistryModule"
          file_path: "./tf/main.tf"

個別に設定が必要そうな要素について以下箇条書きで書いていきます

  • resource で、バージョン更新対象とするもののタイプを指定します。 terraform, provider, module。それぞれの指定により、設定すべきパラメータが変わります。
  • file_path に、 tfupdate 実行対象のファイル・ディレクトリを指定します。上記 Readme の内容に従うと ./tf/main.tf に対してだけバージョンアップ処理を行います。
  • base_branch で、PullRequest 作成時の Base ブランチを指定します。デフォルトでは master になっているため、 main など別ディレクトリに指定したい場合は明示的に指定します。
  • reviewer で、レビュアーに指定したいユーザーを指定します。複数指定する場合はカンマ区切りで指定。Team へのメンションの仕方もあるかもしれませんが私が試した感じだとうまくいきませんでした(リポジトリにCodeOwner を定義し、そちらの情報を使うことで回避してます)
  • actions/checkout については現在(2022/12/08) の最新版は @v3 と思われるので、こちらに置き換えても良いかもしれません

ただしく設定されると、schedule で指定した実行タイミングで定期的に動作します。
バージョンアップを検知すると以下のような形で自動的に PullRequest を作成してくれます。

Discussion