2

我打算使用 Terraform 来支持我在 AWS 中的整个监控基础设施。到目前为止,在我的 terraform 项目中已经创建了 VPC、子网、适当的安全组。我尽可能使用 Terraform 注册表:

我看到的问题是,在部署 EKS 集群后,它会将标签引入到 Terraform 似乎不知道的 VPC 和子网中。因此,下次terraform plan运行它会识别它不管理的标签并打算删除它们:

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  ~ module.vpc.aws_subnet.private[0]
      tags.%:                                "4" => "3"
      tags.kubernetes.io/cluster/monitoring: "shared" => ""

  ~ module.vpc.aws_subnet.private[1]
      tags.%:                                "4" => "3"
      tags.kubernetes.io/cluster/monitoring: "shared" => ""

  ~ module.vpc.aws_vpc.this
      tags.%:                                "4" => "3"
      tags.kubernetes.io/cluster/monitoring: "shared" => ""


Plan: 0 to add, 3 to change, 0 to destroy.

------------------------------------------------------------------------

terraform-provider-aws存在一个问题,使用 bash 的本地解决方法存在问题,但有谁知道如何让 Terraform 意识到这些标签或让它们以稳健的方式被后续计划忽略?

4

3 回答 3

0

只需在调用模块时添加标签,请注意在https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/1.41.0的示例中,它在那里显示标签,并在它说的文档中显示“要添加到所有资源的标签地图”,以便您可以将其添加到该地图。

于 2018-09-13T09:09:38.037 回答
-1

如果您控制了模块,则可以尝试在块中使用ignore_changes子句。lifecycle就像是

    lifecycle {
      ignore_changes = [
        "tags"
    ]
}

但是,对于您无法控制的模块,这将变得更加棘手。

于 2018-09-13T08:40:44.283 回答
-1

所以最终我们选择完全不使用 terraform 来部署集群,而是使用eksctlWea​​veworks 的基于社区的工具。

https://eksctl.io/

当我们在伦敦的 AWS 办事处进行一些培训时,它是由 AWS 解决方案架构师推荐的。

如果需要,配置可以存储在源代码管理中。

eksctl create cluster -f cluster.yaml

由于 EKS 对基础设施进行了大量标记,因此现在状态文件不再抱怨标记,我们的生活要好得多。

于 2020-02-08T13:50:59.040 回答