Terraform中如何为EKS节点组资源配置条件性生效的标签
解决方案
该需求完全可以实现,借助Terraform原生的三元表达式和merge函数即可完成条件标签的动态注入,你之前的思路是对的,只需要调整为Terraform支持的语法即可。
修正后的配置示例
resource "aws_eks_node_group" "managed_workers" { for_each = var.nodegroups[terraform.workspace] cluster_name = aws_eks_cluster.cluster.name node_group_name = each.value.Name node_role_arn = aws_iam_role.managed_workers.arn subnet_ids = aws_subnet.private.*.id tags = merge( var.tags[terraform.workspace], # 条件标签逻辑:变量符合预期取值时返回带标签的map,否则返回空map var.somevar == "你的预期取值" ? {"topology.kubernetes.io/zone" = "us-east-2a"} : {}, { "type" = each.value.type "Name" = each.value.Name "ob" = each.value.ob "platform" = each.value.platform } ) }
原理解释
merge函数支持合并任意数量的map类型参数,空map不会向最终结果中添加任何键值对,刚好适配「不符合条件就不添加标签」的需求- 条件判断使用Terraform标准三元表达式
条件 ? 满足时返回值 : 不满足时返回值,注意相等判断用双等号==,不要和赋值用的单等号混淆 - 如果需要添加多个独立判断的条件标签,只需要在
merge的参数列表中新增对应三元表达式的map即可,每个标签的判断逻辑互不影响 - 若不同map中存在重复的标签键,
merge会以靠后参数的map取值为准,调整参数顺序即可控制覆盖优先级
内容的提问来源于stack exchange,提问作者hache cheche
相关产品推荐
相关产品推荐

