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

如何在Terraform中按双条件过滤Map并保留原键值对

Terraform Map筛选:保留符合条件的键值对

问题背景

现有变量定义如下:

variable "input_var"{
  type = map(object({
    str_attribute = string
    num_attribute = number
    sub_obj = optional(object({
      id = number
      other_property = string
    }))
  }))
}

需要遍历该Map,筛选出同时满足sub_obj != null和sub_obj.id != 0的元素,生成保留原键和值的新Map。

正确实现代码

直接使用Terraform的Map类型for表达式即可完成需求,同时通过短路逻辑避免null访问报错:

filtered_input = {
  for k, v in var.input_var : k => v
  if v.sub_obj != null && v.sub_obj.id != 0
}

关键说明

  1. 短路逻辑避免报错:
    Terraform的&&运算符是短路执行的——如果v.sub_obj != null不成立,后面的v.sub_obj.id != 0不会被执行,完美避免了null时访问属性的错误。
  2. 直接生成Map:
    使用{for k, v in ... : k => v if ...}的语法,会直接生成一个新Map,键和值完全沿用原Map中符合条件的元素,不需要额外转换。

原尝试代码的问题分析

你之前的代码存在两个核心问题:

  • 列表推导而非Map推导:使用[for ...]生成的是列表而非Map,即使嵌套tomap({k = v}),最终得到的也是包含多个小Map的列表,不是目标的单个Map。
  • 未处理null情况:直接访问v.sub_obj.id,当sub_obj为null时会触发属性访问错误,必须先判断sub_obj不为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:25:32