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
相关产品推荐
相关产品推荐

