Terraformのアップデートにちょっと便利なRenovate

2022/03/12に公開

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 のみ追加する仕様となっています。
https://github.com/dependabot/dependabot-core/issues/4042

まとめ

Renovateが「痒い所に手が届く」ところが理解していただけたかなと思います。
tfmigrate/Dependabotも良いツールですので、必要に応じて使い分けていただければと思います。

Discussion