You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将flatten()结果转为string集合适配Terraform的for_each

解决Terraform中flatten结果转set(string)的问题

你的核心问题是flatten()返回的tuple类型不满足aws_s3_object的for_each参数要求,只需要把结果转换为set(string)即可,以下是两种具体实现方式:

方法1:用toset转换flatten结果

假设你当前的locals代码为:

locals {
  database_names = flatten([
    for endpoint in var.source_endpoints : endpoint.databases
  ])
}

在外层套一层toset(),直接将tuple转成set(string):

locals {
  database_names = toset(flatten([
    for endpoint in var.source_endpoints : endpoint.databases
  ]))
}

方法2:直接用双层for生成set

跳过flatten(),通过嵌套for循环直接生成列表后转成set,写法更简洁:

locals {
  database_names = toset([
    for endpoint in var.source_endpoints :
    for db in endpoint.databases : db
  ])
}

额外说明

如果数据库名存在重复场景,toset()会自动去重。若需要保留所有条目(或提前发现重复问题),可以转成map类型,将每个数据库名同时作为key和value:

locals {
  database_names = {
    for db in flatten([
      for endpoint in var.source_endpoints : endpoint.databases
    ]) : db => db
  }
}

这种map类型同样符合for_each的参数要求,且出现重复时Terraform会直接报错提醒,避免潜在问题。

内容的提问来源于stack exchange,提问作者Ross Bush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:50:12