条件によってブロックを出し分ける
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を学びたい人にオススメ!/