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

如何基于变量列表在Terraform中创建EKS托管节点组

解决Terraform嵌套列表生成EKS托管节点组的问题

正确的嵌套For表达式写法

要基于var.clusters中的嵌套列表生成EKS托管节点组映射,需要使用双层嵌套for表达式,直接迭代每个集群下的节点组对象:

module "eks" {
  source = "terraform-aws-modules/eks/aws"
  # 配置集群名称、VPC等其他必填参数...

  eks_managed_node_groups = {
    for cluster in var.clusters :
    for worker in cluster.eks_workers :
    worker.name => {
      instance_type = worker.instance_type
      # 根据需求添加其他节点组配置,例如:
      # desired_size = 2
      # min_size     = 1
      # max_size     = 3
      # subnet_ids   = var.private_subnets
    }
  }
}

之前写法的问题分析

  1. 第一种写法错误原因:
    var.clusters[*].eks_workers会返回一个列表的列表(示例中为[[{name="nodes1",...}, {name="nodes2",...}]]),直接迭代时worker代表的是整个子列表,而非单个节点组对象,因此无法直接访问worker.name。

  2. 第二种写法不符合需求:
    使用worker_group_key(列表索引)生成的键是something-0、something-1这类格式,和你期望的用节点组名称(nodes1、nodes2)作为键的需求不匹配。

扩展:避免多集群下的键冲突

如果你的配置中有多个集群,不同集群的节点组名称可能重复,建议结合集群名称和节点组名称生成唯一键:

eks_managed_node_groups = {
  for cluster in var.clusters :
  for worker in cluster.eks_workers :
  "${cluster.name}-${worker.name}" => {
    instance_type = worker.instance_type
    # 其他配置...
  }
}

最终生成的配置格式

对于你提供的变量,上述代码会生成符合预期的节点组配置:

eks_managed_node_groups = {
  "nodes1" = {
    instance_type = ["t3.micro"]
    # 其他配置项...
  }
  "nodes2" = {
    instance_type = ["t3.micro"]
    # 其他配置项...
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:23:13