Terraform 地形条件动态块体

Terraform 地形条件动态块体,terraform,Terraform,我有一个动态块,如下所示: dynamic "origin" { for_each = var.ordered_cache_behaviors content { domain_name = "${origin.value.s3_target}.s3.amazonaws.com" origin_id = "S3-${origin.value.s3_target

我有一个动态块,如下所示:

 dynamic "origin" {
        for_each = var.ordered_cache_behaviors

        content {
            domain_name = "${origin.value.s3_target}.s3.amazonaws.com"
            origin_id   = "S3-${origin.value.s3_target}"    
        }
    }
我的列表定义如下:

  "ordered_cache_behaviors": [
    {
      "path_pattern": "/my-app*",
      "s3_target": "${local.default_s3_target}",
      "ingress": "external"
    }
  ]
在我的动态块中,我只想在该条件为真时渲染块
origin.value.s3_target!==变量默认值\u s3\u目标值

如何以及在何处将条件添加到动态块?请注意,块的渲染由当前迭代对象的值控制,而不是在完全排除for循环的某个变量上

我想迭代所有内容并有条件地排除某些项。因此,用Javascript编写它时,它将如下所示:

for (origin in ordered_cache_behaviors) {
  if (origin.s3_target !== default_s3_target) {
     renderContent();
  } else {
     console.log('Content was skipped!');
  }
}

dynamic
block
for\u每个
参数都希望接收一个集合,该集合对于要生成的每个块都有一个元素,因此,思考问题的最佳方式是考虑生成过滤版本的
var.ordered_cached_behaviors
,该版本仅包含要用于创建块的元素

过滤集合元素的常用方法是包含的。例如:

  dynamic "origin" {
    for_each = [
      for b in var.ordered_cache_behaviors : b
      if b.s3_target == var.default_s3_target
    ]

    content {
      domain_name = "${origin.value.s3_target}.s3.amazonaws.com"
      origin_id   = "S3-${origin.value.s3_target}"    
    }
  }

对于表达式,该
的结果将是一个新列表,其中仅包含具有预期的
s3\u目标
属性值的源元素子集。如果其中没有一个具有该值,则结果列表的长度将为零,因此Terraform将根本不生成
原点
块。

动态
for_每个
参数期望接收一个集合,该集合中每个要生成的块都有一个元素,因此,思考问题的最佳方式是考虑生成过滤版本的
var.ordered_cached_behaviors
,该版本仅包含要用于创建块的元素

过滤集合元素的常用方法是包含的。例如:

  dynamic "origin" {
    for_each = [
      for b in var.ordered_cache_behaviors : b
      if b.s3_target == var.default_s3_target
    ]

    content {
      domain_name = "${origin.value.s3_target}.s3.amazonaws.com"
      origin_id   = "S3-${origin.value.s3_target}"    
    }
  }

对于
表达式,该
的结果将是一个新列表,其中仅包含具有预期的
s3\u目标
属性值的源元素子集。如果其中没有一个具有该值,那么结果列表的长度将为零,因此Terraform将不会生成任何
原点
块。

非常好的解决方案,正是我想要的,谢谢!非常好的解决方案,正是我想要的,谢谢!