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

如何提取Terraform map中值为DEV的键生成DEV账号ID列表

Terraform 按Map值筛选对应键列表实现方案

注意:你给出的示例account_map存在重复键333333333333,Terraform的Map类型不支持重复键,后写入的"PROD"会覆盖之前的"STG"值,实际使用时需要先修正这个重复键问题。

实现这个需求不需要依赖额外复杂逻辑,直接用Terraform原生的for列表表达式配合条件判断即可。单独使用keys()函数只能全量返回Map的所有键,本身不具备按值筛选的能力。

具体实现代码

locals {
  # 修正重复键后的账号Map示例
  account_map = {
    "111111111111" = "DEV"
    "222222222222" = "DEV"
    "333333333333" = "STG"
    "444444444444" = "PROD"
  }

  # 筛选值为DEV的账号ID列表
  dev_accounts = [for account_id, env in local.account_map : tostring(account_id) if env == "DEV"]
}

逻辑说明

  • 方括号包裹的for表达式会直接生成列表类型结果
  • 遍历Map时account_id接收键(即账号ID),env接收对应的值(即环境标识)
  • 末尾的if env == "DEV"是筛选规则,仅保留值匹配DEV的条目
  • 冒号后的tostring(account_id)指定符合条件的条目返回账号ID作为列表元素,加tostring()是为了避免把账号ID写成数字类型时和预期的字符串类型列表不符,如果你的Map键本身就是字符串类型可以去掉这个转换函数

可以通过输出块验证结果:

output "dev_accounts" {
  value = local.dev_accounts
}

执行Terraform计划后得到的输出和你预期的格式完全一致:

dev_accounts = ["111111111111", "222222222222"]

如果需要筛选其他环境的账号列表,只需要修改if后的匹配值即可,比如筛选STG环境就把条件改为if env == "STG"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:39:15