Terraform创建Azure CDN端点多投递规则时遇for_each不支持错误
解决Terraform Azure CDN端点投递规则的for_each报错问题
错误原因
Terraform中,azurerm_cdn_endpoint资源的delivery_rule属于嵌套块,语法上不支持直接在块内部声明for_each参数,这是嵌套块的固有限制导致的报错。
解决方案
改用Terraform的dynamic块来批量生成多个delivery_rule,dynamic块就是专门用来在资源内部动态创建多个嵌套块实例的语法。
修改后的代码示例:
resource "azurerm_cdn_endpoint" "default" { # 保留你原有的其他必填参数,比如name、profile_name、origin_host_header等 dynamic "delivery_rule" { for_each = { for deliveryrule in var.delivery_rules : deliveryrule.name => deliveryrule } content { name = delivery_rule.value.name order = delivery_rule.value.order request_scheme_condition { operator = delivery_rule.value.operator match_values = delivery_rule.value.match_values } url_redirect_action { redirect_type = delivery_rule.value.redirect_type protocol = delivery_rule.value.protocol } } } }
关键注意点
- 将原
delivery_rule块替换为dynamic "delivery_rule",块名要和原嵌套块保持一致 for_each逻辑移到dynamic块的参数中,迭代逻辑和你原本的写法一致- 动态块内部通过
delivery_rule.value(而非原代码的each.value)访问当前迭代的规则数据 - 确保
var.delivery_rules变量是包含对应属性的列表结构,属性字段要和代码中的取值匹配
内容的提问来源于stack exchange,提问作者hari989
相关产品推荐
相关产品推荐

