You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置Azure Event Grid高级过滤器时dynamic block与lookup报错问题

解决Terraform Azure Event Grid高级过滤器的lookup错误

问题根源

你遇到的lookup() requires a map as the first argument错误,是因为var.advanced_filter被定义为列表类型(默认值是[{...}]数组结构),但lookup函数要求第一个参数必须是map类型。

修正方案

1. 调整变量类型

把variable "advanced_filter"的类型从any改为map(any),让它成为一个map结构而非列表,符合lookup函数的参数要求:

variable.tf

variable "advanced_filter" {
  type        = map(any)
  description = "添加Azure Event Grid订阅的高级过滤器"
  default = {
    bool_equals = {
      key   = "True"
      value = "test"
    }
  }
}

2. 修正dynamic块逻辑

调整外层advanced_filter和内层bool_equals的动态块判断逻辑,适配map类型的变量:

main.tf

dynamic "advanced_filter" {
  # 仅当过滤器配置非空时创建高级过滤器块
  for_each = length(keys(var.advanced_filter)) > 0 ? [1] : []
  content {
    dynamic "bool_equals" {
      # 检查bool_equals配置是否存在且有效
      for_each = lookup(var.advanced_filter, "bool_equals", null) != null ? [1] : []
      content {
        key   = var.advanced_filter.bool_equals.key
        value = var.advanced_filter.bool_equals.value
      }
    }
  }
}

扩展说明

如果需要支持多种类型的高级过滤器(比如string_equals、number_greater_than等),可以在advanced_filter的content块中添加对应类型的dynamic块,逻辑和bool_equals一致:

dynamic "string_equals" {
  for_each = lookup(var.advanced_filter, "string_equals", null) != null ? [1] : []
  content {
    key   = var.advanced_filter.string_equals.key
    value = var.advanced_filter.string_equals.value
  }
}

内容的提问来源于stack exchange,提问作者hari989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:42:17