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
相关产品推荐
相关产品推荐

