首页 > 解决方案 > Terraform 附加标签

问题描述

我创建 VPC 和添加标签的子网。

稍后,我创建了 EKS 集群,它附加了自己的标签,如果我apply再次使用,标签将被覆盖。

我需要任何方法来读取当前标签,然后与我的自定义标签合并。问题是如果第一次创建 VPC 资源,我无法查询是否存在某些标签。

这是我的子网定义

resource "aws_subnet" "k8s" {
  count = "${var.create_vpc && length(var.k8s_subnets) > 0 ? length(var.k8s_subnets) : 0}"

  vpc_id            = "${local.vpc_id}"
  cidr_block        = "${var.k8s_subnets[count.index]}"
  availability_zone = "${element(var.azs, count.index)}"

  tags = "${merge(map("Name", format("subnet-%s-${var.k8s_subnet_suffix}-%s", var.name, element(var.azs, count.index))), var.tags, var.k8s_subnet_tags)}"
}

这是 EKS 添加的标签:

kubernetes.io/cluster/eks-cluster : shared

我被这种……先有鸡还是先有蛋?有什么想法或建议吗?

-- 已编辑

像 self.tags 这样的解决方案可能是解决方案,但不幸的是这是不可能的:

self.ATTRIBUTE 语法仅在供应商中允许且有效。

它显示一个错误:

Error: resource 'aws_subnet.k8s' config: cannot contain self-reference self.tags

标签: tagsterraformterraform-provider-aws

解决方案


这就是我所做的:

  1. 我在 env.sh 中定义了包含 terraform 的通用标签
  2. 创建另一个组件时,我这样做: tags = "${merge(var.default_tags, map("Name", format("%s-Jenkins-ELB", var.env)))}"
  3. 您可以将 VPC 标签写入 SSM 参数存储并稍后检索它们以供 EKS 集群使用。

推荐阅读