如何移除Terraform输出regions_data中的重复项?
移除Terraform输出中的重复项
首先要明确:Terraform的map类型不允许存在重复键,你给出的var.regions定义里重复的reg1键会被最后一次出现的覆盖,实际生效的var.regions是:
regions = { reg1 = { postcode = "1" }, reg2 = { postcode = "2" } }
如果你的实际场景是通过其他方式生成了包含重复值的集合(比如从列表或其他结构转换后出现重复的region/postcode字符串),可以通过以下两种方案去重:
方案1:使用distinct函数过滤重复项
将生成的字符串转为列表后用distinct移除重复元素,返回无重复的列表:
output "regions_data" { value = distinct([ for region, data in var.regions : "${region}/${data.postcode}" ]) }
方案2:利用集合的自动去重特性
Terraform的set类型本身不允许重复元素,直接将生成的字符串转为set即可自动丢弃重复项:
output "regions_data" { value = toset([ for region, data in var.regions : "${region}/${data.postcode}" ]) }
如果你的var.regions实际是列表类型(而非map,因为map不支持重复键),比如:
regions = [ { region = "reg1", postcode = "1" }, { region = "reg1", postcode = "1" }, { region = "reg2", postcode = "2" } ]
只需调整遍历逻辑,上述两种方案依然适用:
output "regions_data" { value = distinct([ for item in var.regions : "${item.region}/${item.postcode}" ]) }
内容的提问来源于stack exchange,提问作者Baequiraheal
相关产品推荐
相关产品推荐

