即使资源配置没有变化,AWS 资源也会更新。作为 terraform 计划的一部分,标签将使用相同的值重新应用。
resource "aws_dynamodb_table" "sample_table" {
name = "sample_table_name"
billing_mode = "PAY_PER_REQUEST"
hash_key = "sample_hash_key"
range_key = "sample_range_key"
attribute {
name = "sample_hash_key"
type = "S"
}
attribute {
name = "sample_range_key"
type = "S"
}
tags = merge(
local.common_tags,
{
"Name" = "sample_table_name"
},
)
}
这里
local.common_tags
是在main.tf文件的本地部分中定义的公共标签集,如下所示
locals {
common_tags = {
Source = var.source_tag
Owner = var.owner_tag
Contact = var.contact_tag
}
}
我正在对相同的 tf 文件执行多次 terraform apply,无需任何更改。 但是 terraform 说修改 'sample_table' ,下面是 terraform 运行的日志。
# aws_dynamodb_table.sample_table will be updated in-place
~ resource "aws_dynamodb_table" "sample_table" {
id = "sample_table_name"
name = "sample_table_name"
~ tags = {
+ "Contact" = "[email protected]"
"Name" = "sample_table_name"
+ "Owner" = "Owning_team"
+ "Source" = "My_source"
}
# (10 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
您可以看到在资源级别定义的标签
"Name" = "sample_table_name"
没有更新/修改,但是在本地定义的标签正在被修改,即使每次都没有任何更改。
Terraform 版本和提供商如下。
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.63.0"
}
}
terraform {
required_version = "~> 1.4.5"
}
实际上我正在经历 github 中提出的问题default_tags 总是显示更新,即使我的问题并不完全相似,在我看到的评论之一中可能是因为使用了我上面使用的两个常见标签,在除了在
default_tags
文件中定义的 provoder.tf
之外。所以我现在只是删除了通用标志并在默认标志中处理了所有内容。到目前为止,这对我有用。
您可以尝试升级 Terraform 的 AWS 提供商版本吗?
我在两个不同的存储库中也遇到了这个问题,但是更改提供程序版本解决了这个问题。就我而言,我有 4.62.0,后来升级到了 5.2.0,一切顺利,不再计划在每个
terraform plan
上创建标签。
在升级之前,请不要忘记查看Terraform AWS 提供商版本 5 升级指南以了解潜在的注意事项。