📌
tfupdate と tfupdate-action を組み合わせて GitHub Actions で terraform 自動アップデート
やりたいことはタイトルですべて書いたので、この記事は簡潔に書きます。
tfupdate についての説明も省きます。
tfupdate の GitHub Actions への組み込みについては色々な方法がありそうで、検索しても色々な情報がヒットしますが、ここでは 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