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
相关产品推荐
相关产品推荐

