Terraform で count Meta-Argument を if
のように使ってリソースを作るかどうかを制御できるという Tips がある.リソース間で参照するときは,同じく count
で制御しつつ,例えば aws_iam_user.kakakakakku[0].name
のようにインデックスを指定できるけど,Terraform の Output Values から参照する場合は output
で制御できず,リソースを作らない場合に Error: Invalid index
というエラーが出てしまう場合がある💨
one 関数と組み合わせる
対策の一つとして,Terraform の one Function(one 関数)と Splat Expressions(スプラット演算子)を組み合わせて解決できる.以下にサンプルコードを載せておく❗️実装には特に意図はなくあくまでサンプルとして.
variable "flag" { type = bool default = true } resource "aws_iam_user" "kakakakakku" { count = var.flag ? 1 : 0 name = "sandbox-user-kakakakakku" } output "username" { value = one(aws_iam_user.kakakakakku[*].name) }
参考
ちなみに「詳解 Terraform 第3版」の5章で「5.2 条件分岐」のところに少し構成は違うけど one 関数とスプラット演算子を組み合わせた output の例が載っている📕