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

Terraform如何将对象列表转换为名称-ID键值对映射?

解决方案

你可以直接通过Terraform映射类型的for表达式一步生成目标键值对结构,或者基于已有的列表变量转换,两种方式都可行:

方法一:直接生成目标映射(推荐)

无需先创建中间对象列表,直接在for表达式里构建映射结构,语法为{for ... in ... : 键 => 值 if ...}:

locals {
  my_group_map = {
    for group in data.okta_groups.aws_groups.groups :
    group.name => group.id
    if contains(local.groups_not_to_check, group.name) == false
  }
}

这段代码会直接输出你需要的结构:

{
  "<group1name>" = "<group1id>",
  "<group2name>" = "<group2id>",
  ...
}

方法二:基于已有列表变量转换

如果需要保留原有的my_new_map列表变量,可以额外新建一个local变量,通过遍历列表生成映射:

locals {
    my_new_map = [for group in data.okta_groups.aws_groups.groups: {
        id = group.id 
        name = group.name
    } if contains(local.groups_not_to_check, group.name) == false] 

    my_group_map = {
        for item in local.my_new_map :
        item.name => item.id
    }
}

关键语法说明

Terraform的for表达式创建映射时,核心结构是:

{for 元素 in 集合 : 键表达式 => 值表达式 [if 过滤条件]}

这里利用group.name(或item.name)作为唯一键,group.id(或item.id)作为对应值,同时保留原有的过滤逻辑排除指定组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:55:58