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

Terraform中为EKS模块条件添加安全组Ingress规则属性的方法

解决Terraform EKS模块安全组Ingress规则Null值问题

要实现仅保留指定的cidr_block或source_security_group_id属性(忽略未指定字段,而非设为null),可以通过Terraform的for表达式过滤null值来构造本地变量,具体方案如下:

1. 规范输入变量定义

先确保输入变量将cidr_block和source_security_group_id设为可选字段,并添加校验强制二选一,避免无效输入:

variable "eks_security_group_ingress_rules" {
  type = list(object({
    name        = string
    description = string
    cidr_block              = optional(string)
    source_security_group_id = optional(string)
    from_port   = number
    to_port     = number
    protocol    = string
  }))
  default = []

  validation {
    condition     = alltrue([
      for rule in var.eks_security_group_ingress_rules :
      (rule.cidr_block != null) != (rule.source_security_group_id != null)
    ])
    error_message = "每个Ingress规则必须且只能指定cidr_block或source_security_group_id中的一个。"
  }
}

2. 过滤Null字段构造本地变量

修改本地变量逻辑,遍历输入规则时只保留非null的属性,两种实现方式可选:

方式一:全局过滤所有Null字段

适用于确定必填字段不会为null的场景,直接遍历规则的键值对并过滤:

locals {
  eks_sg_ingress = [
    for rule in var.eks_security_group_ingress_rules : {
      for k, v in rule : k => v if v != null
    }
  ]
}

方式二:精准过滤目标字段

仅针对cidr_block和source_security_group_id做过滤,避免误处理其他字段:

locals {
  eks_sg_ingress = [
    for rule in var.eks_security_group_ingress_rules : merge(
      # 保留必填核心字段
      {
        name        = rule.name
        description = rule.description
        from_port   = rule.from_port
        to_port     = rule.to_port
        protocol    = rule.protocol
      },
      # 仅添加有值的cidr_block或source_security_group_id
      {
        for k, v in {
          cidr_block              = rule.cidr_block
          source_security_group_id = rule.source_security_group_id
        } : k => v if v != null
      }
    )
  ]
}

3. 传入EKS模块使用

将处理后的本地变量传入EKS模块的安全组Ingress参数(通常为security_group_ingress):

module "eks" {
  source = "terraform-aws-modules/eks/aws"

  # 其他模块配置项...

  security_group_ingress = local.eks_sg_ingress
}

经过以上处理,每个Ingress规则对象只会包含用户实际指定的属性,不会出现null值,即可避开EKS模块的null值限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:43:12