terraform init を実行し `.terraform.lock.hcl` に差分が生じた際に疑うこと


はじめに

今までと異なる CPU アーキテクチャのマシンで terraform を触る機会があり、 terraform init を実行した際に .terraform.lock.hcl に差分が生じ、その理由について調べたのでまとめました

対象バージョンや環境

  • Terraform バージョン
    • 0.14 以上
  • 実行環境
    • 普段 darwin_amd64 から terraform を実行していたが、新たに darwin_arm64 環境で実行

差分の理由と対応方法

対応方法

以下のように h1 のみ差分が生じた場合は .terraform.lock.hcl をコミットしましょう
※ 今後も継続して今までと異なる環境で terraform実行が予定されている場合

.terraform.lock.hcl
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