⛑️

terraformのtemplateでつまって解決した話

2024/05/29に公開

他の記事でもよく見かけるが、M3 Macでもtemplateの事象に引っかかったので、行った対処を記述していきます。

事象

terraform でtemplate を利用している箇所があり、 terraform init がうまくいかなった。
terraform は brew install tfenv でcli インストールを行っており、バージョンは v1.6.5 を使用している。

$ terraform version
Terraform v1.6.5
on darwin_arm64

対処

大きな対処としては2つ実施した。

  • .terraform.lock.hcl からtemplateのブロックを削除
  • template plugin をソースコードからビルド

template のソースは以下のリポジトリをcloneした。

https://github.com/hashicorp/terraform-provider-template

1つ目の .terraform.lock.hcl からtemplateのブロックを削除したのは特別大変な話ではないので、該当ファイルを見つけて対処してください。
2つ目のtemplate をソースコードからビルドの手順のほうが参考になると思うので、以下の手順を参考にしてください。

template のビルド

まず、適当なディレクトリにcloneしてbuildします。

cd somewhere/
git clone git@github.com:hashicorp/terraform-provider-template.git
cd terraform-provider-template
make build

ここでgo がないとエラーになったので、 brew install でgo をインストールします。

brew install go
go version                          
# go version go1.22.3 darwin/arm64

Repository 内のREADME を読んだ感じでは、 1.11+ になっているので、ひとまずこのまま進めました。
buildするとプラグインは GOPATH 配下に置かれます。なので、 GOPATH が設定されているかを確認します。

echo $GOPATH

何も出力されません。だいぶ昔にGoを追っていた知識で GOROOT とか GOPATH を環境変数に設定するんだっけ?と記憶していたのですが、浦島太郎状態になっていました。今は go envGOPATH などの変数が閲覧できるようになっているみたいですね。便利。

go env GOROOT
go env GOPATH

なので、こbuild したあとに GOPATH 配下を参照します。

make build

ls $(go env GOPATH)/bin/
terraform-provider-template

この terraform-provider-template をplugin のパスにコピーします。

cp $(go env GOPATH)/bin/terraform-provider-template ~/.terraform.d/plugins/registry.terraform.io/hashicorp/template/2.2.0/darwin_arm64

そのあとに terraform init した結果、うまく動作しました。

まとめ

ひとまず対処できました。
とはいえ、 terraform-provider-template のRepository をみたらわかる通り、public archive になっているし、適切な書き方は他にありそうなので、暫定的な対応としてなにかの参考になればと思います。

Discussion