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

如何通过指定键列表过滤Terraform Map以生成新Map?

如何在Terraform中根据列表筛选Map条目?

你可以通过Terraform的**for表达式**结合条件过滤来实现这个需求,直接基于目标列表生成筛选后的新Map。

完整实现代码

locals {
  all_subnets = {
    "10.1.1.1/24" = "subnet-a"
    "10.2.2.2/24" = "subnet-b"
    "10.3.3.3/24" = "subnet-c"
    "10.4.4.4/24" = "subnet-d"
  }

  subnets_i_like = ["10.1.1.1/24", "10.4.4.4/24"]

  # 生成筛选后的新Map
  new_map = {
    for cidr in local.subnets_i_like : cidr => local.all_subnets[cidr]
    if contains(keys(local.all_subnets), cidr)
  }
}

代码说明

  • for cidr in local.subnets_i_like:遍历subnets_i_like列表中的每个CIDR元素
  • cidr => local.all_subnets[cidr]:以当前CIDR作为新Map的键,从all_subnets中取出对应的值作为新Map的value
  • if contains(keys(local.all_subnets), cidr):添加存在性校验,确保只保留all_subnets中实际存在的键,避免因列表包含无效键导致的报错

简化版本(当列表元素均为原Map有效键时)

如果你能确定subnets_i_like中的所有元素都是all_subnets的有效键,可以省略条件判断,简化为:

new_map = { for cidr in local.subnets_i_like : cidr => local.all_subnets[cidr] }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:54:55