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

Terraform:使用嵌套for表达式生成无重复键的映射

Terraform嵌套映射生成新映射解决键重复问题

问题场景

作为Terraform新手,现有嵌套映射vpcs_info,想要基于它生成新映射,但当前的嵌套for表达式输出存在键重复问题,需要修改表达式得到带唯一键的期望输出。实际场景中vpc id为敏感信息,用${timestamp()}替代。

示例配置

terraform.tfvars中的嵌套映射

vpcs_info = {
  "vpc-prod" = {
    subnets = {
      "public" = { cidr = "10.0.1.0/24" }
      "private" = { cidr = "10.0.2.0/24" }
    }
  }
  "vpc-staging" = {
    subnets = {
      "public" = { cidr = "10.1.1.0/24" }
    }
  }
}

原问题代码(locals.tf)

locals {
  subnets_map = {
    for vpc in var.vpcs_info :
    for subnet_key, subnet in vpc.subnets :
    subnet_key => {
      vpc_id = "${timestamp()}"
      cidr   = subnet.cidr
    }
  }
}

该代码会触发键重复错误,因为vpc-prod和vpc-staging下都有public子网键,Terraform不允许映射存在重复键。

解决方案

通过拼接父级VPC键与子网键生成唯一映射键,修改后的locals代码:

locals {
  subnets_map = {
    for vpc_key, vpc in var.vpcs_info :
    for subnet_key, subnet in vpc.subnets :
    "${vpc_key}-${subnet_key}" => {
      vpc_id = "${timestamp()}"
      cidr   = subnet.cidr
    }
  }
}

说明

  • 新的键格式为{vpc键}-{子网键},确保每个键全局唯一,避免重复冲突
  • 若需要其他唯一标识方式,也可结合索引或子网的其他属性构造键,但父键+子键的方式最直观且易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:01:15