如何修复Terraform报错:var.zaccounts为单元素字符串列表
问题原因与解决方法
Terraform 的 for_each 参数不支持直接传入列表(list)类型,不管列表长度是1还是更多,这是语法规则限制,和你理解的“遍历长度为1的列表”不是一回事。
解决步骤
直接把列表转成集合(set)类型即可,修改资源块的 for_each 配置:
resource "datadog_dashboard" "hq" { for_each = toset(var.zaccounts) # ... 你的其他配置代码 }
为什么这么做?
Terraform 要求 for_each 的值必须是映射(map)或集合(set),因为这两种类型的元素都有唯一、稳定的标识符,能确保资源实例的ID不会因为元素顺序变化而改变。列表是有序结构,索引会随着元素增减移位,不符合 Terraform 对资源实例标识符稳定性的要求,因此不被支持。
如果需要自定义资源实例的键名,也可以把列表转成映射:
resource "datadog_dashboard" "hq" { for_each = tomap({ for idx, account in var.zaccounts : account => account }) # ... 你的其他配置代码 }
内容的提问来源于stack exchange,提问作者Dean Hiller
相关产品推荐
相关产品推荐

