[小ネタ] 複数のプラットフォームで terraform initする際の注意点

複数のプラットフォームでterraform initする場合は.terraform.hcl.lockを事前作成しよう!!
2022.05.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!コンサル部のinomaso(@inomasosan)です。

チームでTerraformを運用していた際に、terraform init.terraform.hcl.lockに関するエラーに遭遇したため、対応方法をまとめていきます。

検証環境

今回実行した環境は以下の通りです。

項目 バージョン
Terraform 1.1.7
AWS Provider 4.12.1

エラー内容

ローカル端末でterraform initした際に、以下のようなエラーが発生しました。

│ Error: Failed to install provider
│
│ Error while installing hashicorp/aws v4.12.1: the current package for
│ registry.terraform.io/hashicorp/aws 4.12.1 doesn't match any of the checksums previously recorded
│ in the dependency lock file

原因

結論から言うと.terraform.hcl.lockに含まれるproviderのチェックサムが、複数のプラットフォームに対応していないことが原因でした。
今回の場合ですと、Windowsでterraform initした後に、Macでterraform initしたところエラーが発生しました。
OSやCPUアーキテクチャが異なる環境でterraform initを実行したい場合は、.terraform.hcl.lockを事前に作成する必要があります。

対応

terraform providers lockで、使用予定のプラットフォームのチェックサムが事前入力された.terraform.hcl.lockを作成することができます。
以下のコマンドにてWindows、Mac、LinuxでAMD64やx86_64、Armに対応したlockファイルを可能です。

terraform providers lock \
  -platform=windows_amd64 \
  -platform=darwin_amd64 \
  -platform=linux_amd64  \
  -platform=darwin_arm64 \
  -platform=linux_arm64

windows_arm64は対応しているの?

AWS Provider4.12.1だと未サポートでした。

│ Terraform failed to fetch the requested providers for windows_arm64 in order to calculate their
│ checksums: some providers could not be installed:
│ - registry.terraform.io/hashicorp/aws: provider registry.terraform.io/hashicorp/aws 4.12.1 is not
│ available for windows_arm64

WindowsのArmでTerraformの運用が必要な場合には、注意が必要そうです。

参考

まとめ

複数のプラットフォームでterraform initを実行する場合は.terraform.hcl.lockの事前作成が必要だよというブログでした。

この記事が、どなたかのお役に立てば幸いです。それでは!