エンジニャーリング

技術ときどきネコ

terraform へ渡すパラメータを環境変数渡しにした時にハマったこと

ローカル環境などで terraform を実行する場合、パラメータを.tfvarsファイルにセットして渡しているのですが、gitでは管理したくないので CodeBuild で terraform を使う時に引数渡しをどうするか悩みどころ。

terraform plan -var 'env=dev'

のように、-var オプションを使って渡せば良いのだが、list渡しをどうすればいいのか分からなかった。
調べてみたところ、このように意外と簡単に設定できることがわかった。

terraform plan -var 'security_group_ids=[ "sg-012345678", "sg-876543210" ]'

ふむふむ、なるほど、と、環境変数を使う形に変えてみた。

export SECURITY_GROUP_IDS='[ "sg-012345678", "sg-876543210" ]'
terraform plan -var 'security_group_ids=$SECURITY_GROUP_IDS'

これを実行すると terraform でパラメータが変だというエラーで怒られる。
きちんとexportできていないのか心配になって、echo で出力させてみたところ、設定はできている模様。
パラメータとして渡っているはずなのになぜエラーなのか・・・
設定のやり方を少しずつ変えて色々なパターンを試してみるも、対策は全滅。

迷走を極める中、ヒントを発見。
qiita.com

この記事によれば、シングルクォートはただの文字列として扱われるとのこと!
もしかして?と思いダブルクォートに変えてみました。

terraform plan -var "security_group_ids=$SECURITY_GROUP_IDS"

通った!!!

'" は、似て非なるもの・・・改めて学びました。