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

Terraform如何迭代嵌套map以同时获取上层属性与子map键值

解决方案

步骤1:定义展平后的本地变量

你需要先把嵌套的map结构展平为一维结构,让每一个条目对应id子map的单条键值对,同时携带外层的hits和所属应用名称:

locals {
  flattened_app_ids = merge([
    for app_name, app_conf in var.apps : {
      for id_k, id_v in app_conf.id : "${app_name}__${id_k}" => {
        app_name = app_name
        hits     = app_conf.hits
        id_key   = id_k
        id_value = id_v
      }
    }
  ]...)
}

步骤2:在资源中遍历使用

直接用for_each引用上面的本地变量即可,所有需要的属性都可以直接读取:

# 示例资源,替换为你实际使用的资源类型
resource "your_resource_type" "target" {
  for_each = local.flattened_app_ids

  # 获取id子map的当前key,对应你期望的id[each.key]效果
  name        = each.value.id_key
  # 获取id子map的当前value
  image_id    = each.value.id_value
  # 获取外层的hits属性
  hit_count   = each.value.hits
  # 可选:获取该条目所属的外层app名称
  belong_app  = each.value.app_name
}

核心逻辑说明

  • 双层for循环先遍历外层apps的所有应用,再遍历每个应用下的id子map
  • 用merge函数把遍历生成的多个子map合并为单个一维map,符合for_each的参数要求
  • 展平后的每个条目都包含了你需要的所有属性,无需在资源声明中再做嵌套取值操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:48:04