kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Terraform の count で制御したリソースを one 関数で output する

Terraform で count Meta-Argumentif のように使ってリソースを作るかどうかを制御できるという 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 の例が載っている📕