Terraform中each.value无法使用求助:for_each循环配置报错
问题分析与解决
错误原因
你遇到的错误本质是:Terraform的嵌套块(比如这里的log块)不支持直接使用for_each。for_each仅能用于资源、模块、provisioner等顶层元素,直接在嵌套块上声明for_each会导致each.value/each.key处于无效上下文,触发报错。
正确实现方式
改用dynamic块来循环生成多个log配置,这是Terraform处理嵌套块批量生成的标准写法:
dynamic "log" { for_each = toset(var.log_categories) content { category = log.value retention_policy { days = 30 enabled = false } } }
关键说明
dynamic "log"表示要动态生成名为log的嵌套块- 循环变量不再用
each,而是用你定义的块名(这里是log),通过log.value获取当前循环的元素值 - 把原本的
log块内容放到content块内部,保持配置逻辑不变
额外检查点
- 确认你的Terraform版本支持
dynamic块(Terraform 0.12及以上版本都支持) - 确保
var.log_categories里的所有类别都是目标资源(看起来是Azure Firewall监控日志)支持的合法类别,避免后续出现类别无效的错误
内容的提问来源于stack exchange,提问作者Strangewizard223
相关产品推荐
相关产品推荐

