我打算使用Terraform来支持我在AWS中的整个监视基础架构。 到目前为止,在我的terraform项目中已经创建了VPC,子网,适当的安全组。我在可能的情况下使用Terraform Registry:
我看到的问题是,在部署EKS群集之后,它向VPC和子网引入了Terraform似乎不知道的标签。因此,下一次运行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和local workaround using bash之间存在一个问题,但是没有人知道如何使Terraform意识到这些标签或如何以健壮的方式使它们被后续计划忽略?
答案 0 :(得分:0)
只需在调用模块时添加标签,请注意在https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/1.41.0的示例中该标签显示了标签,并且在文档中显示了“要添加到所有资源的标签图”,因此您可以将其添加到那张地图。
答案 1 :(得分:0)
所以最终我们选择完全不使用terraform来部署集群,
相反,我们使用eksctl
来自Weaveworks的基于社区的工具。
AWS解决方案架构师建议我们在伦敦的AWS办公室接受一些培训时。
如果需要,可以将配置存储在源代码管理中。
eksctl create cluster -f cluster.yaml
由于EKS对基础设施进行了很多标记,因此状态文件不再抱怨标记,我们的生活变得更好了。
答案 2 :(得分:-1)
如果控制了模块,则可以尝试在ignore_changes
块中使用lifecycle
子句。像
lifecycle {
ignore_changes = [
"tags"
]
}
使用您无法控制的模块会变得更加棘手。