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

如何在Terraform中合并两个对象数组的对应元素?

解决Terraform中对象数组的合并问题

你遇到的问题核心是merge()函数的作用对象是单个map或对象,而非数组(tuple),直接传入数组自然会报错;而tomap()无法将对象数组转为map,因为数组元素是独立对象,没有符合map要求的键值结构。

要实现按索引一一合并两个数组中的对象,正确的做法是用zip()函数将两个数组的元素按索引配对,再通过for循环逐个合并每对对象:

locals {
  fqdns_map = [
    {
      "fqdn" = "db.example.com"
    },
    {
      "fqdn" = "lb.example.com"
    },
    {
      "fqdn" = "web.example.com"
    },
  ]

  ipv4s_map = [
    {
      "ipv4_address" = "1.1.1.1"
    },
    {
      "ipv4_address" = "2.2.2.2"
    },
    {
      "ipv4_address" = "3.3.3.3"
    },
  ]

  merged_map = [
    for pair in zip(local.fqdns_map, local.ipv4s_map) : merge(pair[0], pair[1])
  ]
}

代码说明:

  • zip(local.fqdns_map, local.ipv4s_map)会将两个数组中索引相同的元素组合成元组,比如第一个元组为({fqdn = "db.example.com"}, {ipv4_address = "1.1.1.1"})
  • 遍历每个元组,用merge(pair[0], pair[1])将元组内的两个对象合并为一个新对象
  • 最终生成的merged_map就是你需要的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:52:32