備忘録。環境などの条件によって Terraform の resource 生成を切り替えたい。たまに使う。
例) cloudfront functions の resource 生成 & ビヘイビアへの関連付け
resource 自体の生成は count
で切り替える。variables にフラグを用意して呼び出し元で切り替えを宣言できるようにする。なるほど。
resource "aws_cloudfront_function" "example" { count = var.enable_function ? 1 : 0 name = "example" runtime = "cloudfront-js-1.0" comment = "example function" publish = true code = file("${path.module}/example.js") }
resource 内の要素の生成は dynamic
と for_each
で切り替える。
resource "aws_cloudfront_distribution" "distribution" { origin { ... } default_cache_behavior { ... dynamic "function_association" { for_each = var.enable_function ? ["1"] : [] content { event_type = "viewer-request" function_arn = aws_cloudfront_function.example[0].arn } } } }
さらにこう書くと resource の存否で分岐できる。(学び)
resource "aws_cloudfront_distribution" "distribution" { origin { ... } default_cache_behavior { ... dynamic "function_association" { for_each = aws_cloudfront_function.example content { event_type = "viewer-request" function_arn = function_association.value.arn } } } }
現場からは以上です。