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

如何为terraform-aws-eks模块多节点组关联的EKS自动创建ASG批量打标签

多EKS节点组批量打ASG标签实现方案

实现逻辑

terraform-aws-eks模块会默认输出所有托管节点组的完整资源对象,我们可以直接基于这个输出集合做两层遍历,把所有节点组关联的ASG名单全部拍平后,批量创建标签资源,无需逐个节点组硬编码配置。

完整代码示例

首先假设你调用EKS模块的写法如下(可替换为自己已有的模块配置):

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "你的模块版本号"

  cluster_name = "你的集群名"
  cluster_version = "1.21" # 替换为实际集群版本

  # 你定义的3个节点组示例配置
  node_groups = {
    ng_spot_1 = {
      min_size     = 1
      max_size     = 10
      desired_size = 2
      capacity_type = "SPOT"
      # 其他节点组配置
    }
    ng_spot_2 = {
      min_size     = 1
      max_size     = 10
      desired_size = 2
      capacity_type = "SPOT"
      # 其他节点组配置
    }
    ng_spot_3 = {
      min_size     = 1
      max_size     = 10
      desired_size = 2
      capacity_type = "SPOT"
      # 其他节点组配置
    }
  }

  # 其他集群配置
}

核心的批量打标签的资源写法如下:

resource "aws_autoscaling_group_tag" "cluster_auto_scaler_capacity_type" {
  for_each = toset(flatten([
    for ng in values(module.eks.eks_node_groups) : [
      for asg in ng.resources[0].autoscaling_groups : asg.name
    ]
  ]))

  autoscaling_group_name = each.value

  tag {
    key   = "k8s.io/cluster-autoscaler/node-template/label/eks.amazonaws.com/capacityType"
    value = "SPOT"

    propagate_at_launch = false
  }
}

注意事项

  • 代码里的module.eks需要替换为你自己本地定义的EKS模块的引用名称
  • 标签的键、值、propagate_at_launch参数都可以根据实际需求调整
  • 后续新增节点组时不需要修改该标签资源的代码,会自动识别新节点组关联的ASG并打标签
  • 该写法适配你使用的Terraform 1.0.6+和AWS Provider 3.60.0的版本要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:15:03