条件によってブロックを出し分ける
Terraformのdynamicブロックを使うと条件によってブロックを出し分けできる。
例えば環境がproductionの場合はaws_instanceにmetadata_optionsを設定する場合を考える。
var.envがproductionのときは以下のようにmetadata_optionsを設定し、それ以外の値のときは設定しないようにしたい。
resource "aws_instance" "example" {
...
# var.envがproductionのときのみ以下のmetadata_optionsを設定したい
metadata_options {
http_endpoint = "enabled"
http_tokens = "required"
}
}
上記のようにmetadata_optionsを設定するかしないかの条件分岐をdynamicブロックで実現できる。
resource "aws_instance" "example" {
...
dynamic "metadata_options" {
for_each = var.env == "production" ? [true] : []
content {
http_endpoint = "enabled"
http_tokens = "required"
}
}
}
dynamicブロックで条件によって分岐するパターン
dynamicブロックで条件によって分岐するパターンは以下の通り。
ブロック名 {
ブロックの中身
}
というブロックを条件によって出し分けるには以下のパターンを記述する。
dynamic "ブロック名" {
for_each = 条件式 ? [true] : []
content {
ブロックの中身
}
}
dynamicブロックはfor_eachに与えたリストの要素数分だけブロックを出力する。
そのため条件を満たす場合は長さ1のリストをfor_eachに与え、条件を満たさない場合は空のリストをfor_eachに与える。
長さ0のリストをfor_eachに与えるとブロックは出力されない。
[true]は長さ1のリストであれば何でも良いので、[1]や[""]などでも良い。
\手を動かしながらTerraformを学びたい人にオススメ!/
