Terraform中如何提取双层嵌套Map内指定键的内层内容
解决Terraform提取嵌套Map指定键对应值的问题
直接取值(推荐,键确定存在时)
如果已经明确secure这个键一定存在于local.zone_list_policy_rules中,完全不需要用for表达式,直接通过键索引就能拿到内层内容:
test = local.zone_list_policy_rules["secure"]
动态过滤场景(键不确定存在时)
如果是需要通过条件过滤(比如不确定secure是否存在,或者要匹配多个键),可以先用你的for表达式筛选出目标键值对,再用values()函数提取所有值,最后取第一个元素:
test = values({ for k, v in local.zone_list_policy_rules : k => v if k == "secure" })[0]
注意:如果没有匹配到任何键,这个写法会报错。如果要处理键不存在的情况,可以结合
try()函数避免报错:test = try(values({ for k, v in local.zone_list_policy_rules : k => v if k == "secure" })[0], {})这里如果没匹配到,会返回一个空map,你可以根据需求替换成其他默认值。
为什么原表达式会带顶层键?
你之前写的for表达式本质是生成一个新的Map,所以会保留筛选后的键值对结构。而我们需要的是键对应的值本身,所以要么直接通过索引取值,要么从筛选后的Map中提取值。
内容的提问来源于stack exchange,提问作者lotusnoir
相关产品推荐
相关产品推荐

