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

Terraform zipmap条件表达式返回类型不一致报错如何解决

变量说明
  • ingress_ports_udp:逗号分隔的字符串类型
  • ingress_cidr_udp:逗号分隔的字符串类型
问题原因

原有代码的for_each条件表达式存在类型不匹配问题:真值分支返回map(string)类型的端口-CIDR映射,假值分支返回空字符串"",二者类型不一致,触发Terraform校验报错。同时需要满足两个输入变量均为空字符串时,不生成任何ingress规则的需求。

修复方案

核心调整是将条件表达式的假值分支改为和真值分支同类型的空map(string),Terraform遍历空集合时会自动跳过dynamic块的生成,刚好匹配需求。
修改后的代码如下:

dynamic "ingress" {
  iterator = rule
  for_each = length(var.ingress_ports_udp) > 0 && length(var.ingress_cidr_udp) > 0 ? zipmap(split(",", var.ingress_ports_udp), split(",", var.ingress_cidr_udp)) : tomap({})
  content {
    from_port   = rule.key
    to_port     = rule.key
    protocol    = "udp"
    cidr_blocks = [rule.value]
  }
}

额外说明:如果单端口需要对应多个CIDR,可把cidr_blocks的取值改为split(",", rule.value)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:51:02