Terraformのアップデートにちょっと便利なRenovate
TerraformのアップデートにRenovate を使うのもよかったよという話です。
目的
Terraformを運用する際、意外に手間がかかるのがTerraformやプロバイダのバージョンアップです。この1年でTerraformのバージョンは30、terraform-provider-awsのバージョンは54上がっていました。
一つ一つは大したことない作業でも、数が増えると辛いです。
この悩みを解消すべく現れたのがminamijoyo/tfupdateです。tfupdateはコマンドライン、またはCIで実行でき、Terraformやプロバイダのバージョン制約を一度に更新できます。
また、一般的にライブラリのバージョンアップでよく使われるのはDependabotです。DependabotはRuby, Node.js, Java, Golangなどに加え、DockerやTerraformにも対応しています。定期的に更新したライブラリを調べ、バージョンアップ可能であればプルリクエストを作成してくれます。
そして今回紹介するのがRenovateです。Renovateはいわゆる「痒い所に手が届くDependabot」です。以前は有料でしたが、DependabotのGitHub統合のタイミングに合わせて無料になったようです。
Terraformのやプロバイダのアップデートでも「痒い所に手が届く」はずです。
インストール
ひとまずインストールしてみましょう。
Renovateのドキュメント にもある通り、GitHub Appでインストールできます。
https://github.com/apps/renovate を開きます。
右上の「Install」を押すとインストールできます。
次の画面では、どのOrganizationにインストールするかを選択します。
次の画面では、どのリポジトリにインストールするかを選択します。
今回はTerraformを管理しているリポジトリを一つ選択しました。
インストール後、WhiteSource Renovate Dashboardを使用するため、ログインを要求されます。
GitHub認証でログインします。
ログインすると、Renovate Dashboardが表示されますが、すぐには使わないためひとまず放置します。
先ほど選択したTerraformを管理しているリポジトリを開きます。
「Dependency Dashboard」というタイトルのIssueが作成されました。
現在、Renovateによって以下の2つのアップデートのPull Requestが作成されたことがわかります。
- Update Terraform aws to v3.68.0
- Update dependency hashicorp/terraform to v1.1.0
また、チェックボックスを選択することによりretry/rebaseができます。
「Update Terraform aws to v3.68.0」のPull Requestを開きました。
Release Notesなども表示されており、いわゆるDependabotでの更新と同じような機能がありますね。
インストールはこれで以上です。結構簡単だったのではないでしょうか。
Renovateの便利なポイント
Renovateが他のTerraformアップデート方法と比べて便利な点を3つ挙げます。
1. GitHub Actions / CircleCIの知識なしに使用できる
tfupdateは便利なツールであり、CircleCIのテンプレートも準備されていますが、ある程度のCIサービスの知識は必要となります。
Renovateであれば先ほどのインストール手順に従えば簡単に使用を開始することができます。
2. .terraform-versionも更新してくれる
tfenvを使用している場合、.terraform-versionでインストールするTerraformのバージョンを管理しているのではないでしょうか。Renovateであれば、.terraform-versionもあわせて更新してくれます。地味に便利!
3. .terraform.lock.hcl も全アーキテクチャ分更新してくれる
プロバイダやモジュールのバージョン管理に使用する.terraform.lock.hclですが、これを適切に管理するのは非常に難しいです。詳しくは .terraform.lock.hcl完全に理解したを参照いただくとわかりますが、h1はOS/アーキテクチャごとに異なり、正しく追加されていないとCIでエラーになったり思わぬところでgit diffが出たりと結構厄介です。
Renovateであれば、プロバイダのアップデート時に前アーキテクチャ分のh1を追加してくれます。Dependabotでは今のところ linux_amd64
のみ追加する仕様となっています。
まとめ
Renovateが「痒い所に手が届く」ところが理解していただけたかなと思います。
tfmigrate/Dependabotも良いツールですので、必要に応じて使い分けていただければと思います。
Discussion