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

公開:2021/01/22
更新:2021/01/22
1 min読了の目安(約500字TECH技術記事

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 {
			...
		}
	}
}