【问题标题】:Creating a dynamic topic block within aws_s3_bucket_notification resource (Terraform)在 aws_s3_bucket_notification 资源 (Terraform) 中创建动态主题块
【发布时间】:2021-05-11 06:33:19
【问题描述】:

我正在创建一个 Terraform 模块,它允许用户指定 s3 存储桶的地图以及他们希望添加到这些存储桶的事件通知的属性。

他们将传递给模块的变量如下所示:

    input = {
    bucket_1 = {
        name            = "name-of-bucket-1"
        filters = [
            {
                name            = "filter1"
                filter_prefix   = "/test"
                filter_suffix   = ".txt"
            },
            {
                name            = "filter2"
                filter_prefix   = ""
                filter_suffix   = ".gz"
            }
        ]
    },
    bucket_2 = {
        name            = "name-of-bucket-2"
        log_source_type = "aws:cloudtrail:sandbox"
        filters = [
            {
                name            = "filter1"
                filter_prefix   = ""
                filter_suffix   = ".gz"
            }
        ]
    }
}

资源块将按如下方式创建:

resource "aws_s3_bucket_notification" "notification" { 
  for_each    = var.input
  bucket      = each.value.name

  dynamic "topic" {
    for_each = each.value.filters
    content {
      topic_arn = aws_sns_topic.sns_topic_s3[each.key].arn
      events = ["s3:ObjectCreated:*"]
      filter_prefix = each.value.filters.filter_prefix
      filter_suffix = each.value.filters.filter_suffix
    }
  }
}

不幸的是,在尝试运行计划时,我收到以下错误:

错误:不支持的属性

在模块/aws-splunk-forwarder-s3/main.tf 第 26 行,资源“aws_s3_bucket_notification”>“splunk_forwarder_s3”中: 26: filter_suffix = each.value.filters.filter_suffix |---------------- | each.value.filters 是包含 2 个元素的元组

这个值没有任何属性。

有谁知道我如何实现这一目标? 谢谢, 亚当

【问题讨论】:

    标签: terraform


    【解决方案1】:

    别管每个人……我设法解决了。 发布我的答案以防其他人陷入同样的​​困境。

    resource "aws_s3_bucket_notification" "notification" { 
      for_each    = var.splunk_s3_input
      bucket      = each.value.name
    
      dynamic "topic" {
        for_each = [for s in each.value.filters: {
          suffix = s.filter_suffix
          prefix = s.filter_prefix
        }]
        content {
          topic_arn = aws_sns_topic. sns_topic_s3[each.key].arn
          events = ["s3:ObjectCreated:*"]
          filter_prefix = topic.value.suffix
          filter_suffix = topic.value.prefix
        }
      }
    }
    

    我的问题是在尝试引用动态块循环的值时使用“each.value”而不是“topic.value”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2021-07-25
      • 2022-09-22
      • 2021-07-10
      • 2021-09-24
      相关资源
      最近更新 更多