はじめに
今までと異なる CPU アーキテクチャのマシンで terraform を触る機会があり、 terraform init を実行した際に .terraform.lock.hcl に差分が生じ、その理由について調べたのでまとめました
対象バージョンや環境
- Terraform バージョン
- 0.14 以上
- 実行環境
- 普段
darwin_amd64からterraformを実行していたが、新たにdarwin_arm64環境で実行
- 普段
差分の理由と対応方法
対応方法
以下のように h1 のみ差分が生じた場合は .terraform.lock.hcl をコミットしましょう
※ 今後も継続して今までと異なる環境で terraform実行が予定されている場合
provider "registry.terraform.io/xxx/xxx" {
version = "x.xx.x"
constraints = "~> x.xx.x"
hashes = [
+ "h1:xxxxxx",
"h1:yyyyyy",
差分の理由
Terraform の v0.4 から .terraform.lock.hcl を生成するようになりました
.terraform.lock.hcl については以下記事にまとめられていたのでそちらを参照ください
z1 は 該当の terraform provider パッケージの zip ハッシュ h1 は 該当の terraform provider の内容物の ハッシュ値を指します
また、z1 h1 の様々な理由から、ハッシュ値の取得元も異なるようで実行環境が増えるとハッシュ値が追加されます
様々な理由については、以下 Isuue のコメントを参照していただくとスムーズです
実行環境の追加
私は terraform init 実行時に差分が生じ今回の事象に気づきましたが、実行環境の追加が予め予定されている場合、以下コマンドで実行予定のプラットフォームを追加することができます
下記は、 darwin_arm64 環境での実行を予定している場合の例
terraform providers lock -platform=darwin_arm64
terraform providers lock コマンドについて詳しく知りたい方は以下 URL から確認できます
Reference