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

Terraform如何通过公共键将映射与列表合并为单一映射输出

解决Terraform映射转换问题

首先需要明确:Terraform的map不允许存在重复键,你示例中写的"arn1" = "basp"和"arn1" = "baas"这种重复键的结构是无效的,无法在Terraform中实现。以下提供两种符合Terraform语法的可行方案:

方案1:ARN对应路径列表的映射

如果目标是将同一个ARN关联的所有路径整理为列表,可使用以下表达式:

locals {
  idpath = map {
    bas = ["basp", "baas"]
    das = ["dasp"]
    fas = ["fasp", "fggf", "ffdsaf", "sdfs"]
  }
  idarn = map {
    bas =  "arn1"
    das =  "arn2"
    fas =  "arn3"
  }

  # 转换后的ARN到路径列表的映射
  arn_to_paths = {
    for key, paths in local.idpath : local.idarn[key] => paths
  }
}

output "arn_to_paths" {
  value = local.arn_to_paths
}

输出结果:

{
  "arn1" = ["basp", "baas"]
  "arn2" = ["dasp"]
  "arn3" = ["fasp", "fggf", "ffdsaf", "sdfs"]
}

方案2:ARN与路径的键值对列表

如果需要将每个路径单独和ARN关联,可生成键值对列表(避免重复键问题):

locals {
  idpath = map {
    bas = ["basp", "baas"]
    das = ["dasp"]
    fas = ["fasp", "fggf", "ffdsaf", "sdfs"]
  }
  idarn = map {
    bas =  "arn1"
    das =  "arn2"
    fas =  "arn3"
  }

  # 转换后的ARN与路径的键值对列表
  arn_path_pairs = flatten([
    for key, paths in local.idpath : [
      for path in paths : {
        arn  = local.idarn[key]
        path = path
      }
    ]
  ])
}

output "arn_path_pairs" {
  value = local.arn_path_pairs
}

输出结果:

[
  {
    "arn" = "arn1"
    "path" = "basp"
  },
  {
    "arn" = "arn1"
    "path" = "baas"
  },
  {
    "arn" = "arn2"
    "path" = "dasp"
  },
  {
    "arn" = "arn3"
    "path" = "fasp"
  },
  {
    "arn" = "arn3"
    "path" = "fggf"
  },
  {
    "arn" = "arn3"
    "path" = "ffdsaf"
  },
  {
    "arn" = "arn3"
    "path" = "sdfs"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:55:15