如何为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
相关产品推荐
相关产品推荐

