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

Terraform如何从映射中提取列表指定的环境配置元素?

从Terraform映射中筛选指定环境配置的实现方法

直接用Terraform的for表达式在locals中构建目标映射即可,for_each主要用于资源块的多实例创建,不适合在locals里做数据筛选,这也是你之前出错的原因。

完整实现代码

假设你的原始变量定义如下:

variable "wanted_envs" {
  type    = list(string)
  default = ["env1", "env2"]
}

variable "envs" {
  type = map(object({
    type               = string
    backend            = string
    backend_subnet     = string
    k8_pod_subnet      = string
    k8_service_subnet  = string
    gateway_subnet     = string
    dmz                = string
  }))
  default = {
    "env1" = {
      type               = "prod"
      backend            = "cust-prod-backend-vpc"
      backend_subnet     = "192.168.0.0/22"
      k8_pod_subnet      = "192.168.35.16.0/20"
      k8_service_subnet  = "192.168.40.0/20"
      gateway_subnet     = "1.2.3.0/27"
      dmz                = "env1"
    },
    "env2" = {
      type               = "prod"
      backend            = "cust-prod-backend-vpc"
      backend_subnet     = "192.168.0.0/22"
      k8_pod_subnet      = "192.168.35.16.0/20"
      k8_service_subnet  = "192.168.40.0/20"
      gateway_subnet     = "1.2.3.0/27"
      dmz                = "env2"
    },
    "env3" = {
      type               = "prod"
      backend            = "cust-prod-backend-vpc"
      backend_subnet     = "192.168.0.0/22"
      k8_pod_subnet      = "192.168.35.16.0/20"
      k8_service_subnet  = "192.168.40.0/20"
      gateway_subnet     = "1.2.3.0/27"
      dmz                = "env3"
    }
  }
}

在locals中定义目标映射:

locals {
  envs_to_build = {
    for env_name in var.wanted_envs :
    env_name => var.envs[env_name]
  }
}

容错处理(可选)

如果担心wanted_envs中存在envs里没有的环境名称,可以添加条件判断自动过滤无效项,避免键不存在的错误:

locals {
  envs_to_build = {
    for env_name in var.wanted_envs :
    env_name => var.envs[env_name]
    if contains(keys(var.envs), env_name)
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:13:39