はじめに
Terraform職人の@minamijoyoです。先日、tfupdateが.terraform.lock.hclの更新に対応しました。v0.7.0から tfupdate lock というコマンドが追加されています。
例えば、あるディレクトリ配下のすべてのAWSプロバイダを指定バージョンに更新しつつ、複数プラットフォーム混在で使う.terraform.lock.hclもまとめて一括更新するには、以下のようなコマンドで簡単にできるようになりました。
$ tfupdate provider aws -v 5.7.0 -r ./ $ tfupdate lock --platform=linux_amd64 \ --platform=darwin_amd64 \ --platform=darwin_arm64 \ -r ./
内部的にterraformコマンドには依存せず、バージョン指定の検出からプロバイダのダウンロード、ハッシュ値の計算なども自前で実装したことで、terraform initを省略したり、計算結果をキャッシュすることが可能になりました。これにより、複数のディレクトリに散らばった.terraform.lock.hclを一括更新するようなユースケースにおいて、大幅にパフォーマンスが改善します。もちろん環境に依存しますが、数万行あるcrowdworks.jpのTerraform設定のリポジトリでは、バージョンアップ時のロックファイルの更新処理が300倍高速化しました。
この記事では、.terraform.lock.hclとは何かについておさらいした後、これまでの技術的な課題とその解決策について説明します。また、実装する上で調べた.terraform.lock.hclに記録されているハッシュ値の計算方法についても解説するので、この記事を読めばあなたも「.terraform.lock.hcl完全に理解した」と言えるでしょう。
本稿執筆時点でのTerraformのバージョンはv1.5.2で、tfupdateはv0.7.2です。最新の情報はGitHubのリポジトリを参照してください。
続きを読む