Terraformリソースのフィールドの有無を条件分岐する

2021/01/22に公開

aws_wafv2_web_aclのような大量のフィールドをセットすることになるタイプのTerraformリソースを複数環境で共通化しようとすると、一部のフィールドの有無を条件に応じて切り替えたくなる事があるかと思います。

リソース自体の有無の切り替えはcount = var.condition ? 1 : 0で対応するのが普通ですが、
リソースの一部フィールドとなるとこのやり方では対応できません。

ではどうすればいいのかというと、 dynamic ブロックと三項演算子を使います。
以下のように、for_eachに適当な単一要素の配列[1]か空配列[]かのどちらかが渡されるようにします。空配列が渡される場合は一度もループが回らないので、この aaa フィールドはセットされません。

resource "hoge" "fuga" {
	dynamic "aaa" {
		for_each = var.condition ? [1] : []
		content {
			...
		}
	}
}

Discussion