我遇到一个问题,Terraform正在删除S3存储桶的标签和版本信息。这可能是什么原因?我该如何阻止这种情况的发生?
main.tf:
resource "aws_s3_bucket" "bucket" {
bucket = "bucket-${var.accountName}"
acl = "private"
versioning {
enabled = true
}
lifecycle {
prevent_destroy = true
}
}
计划输出:
module.s3.aws_s3_bucket.bucket
tags.%: "1" => "0"
tags.Versioning: "Yes" =>
计划告诉你它想从S3存储桶中删除Versioning
标签,但请注意,它并没有告诉你它正在取消S3存储桶的实际版本控制,相反,它看起来像:
versioning.0.enabled: "true" => "false"
您在Terraform代码中没有在S3存储桶上定义任何标签,因此Terraform在刷新阶段检测到漂移后,试图将S3存储桶强制返回到您定义的配置。
您可以将标记添加到Terraform代码的aws_s3_bucket
资源中,停止在Terraform之外更改Terraform托管的资源,也可以使用ignore_changes
告诉Terraform您希望标记上有漂移。
在我看来,第一种选择是最好的选择,你可以通过使用来实现这一点
resource "aws_s3_bucket" "bucket" {
bucket = "bucket-${var.accountName}"
acl = "private"
versioning {
enabled = true
}
lifecycle {
prevent_destroy = true
}
tags = {
Versioning = "Yes"
}
}
如果出于某种原因,您确实想在Terraform之外添加标签,但不希望Terraform撤消您的更改,那么您可以使用ignore_changes
生命周期告诉它忽略对标签的更改:
resource "aws_s3_bucket" "bucket" {
bucket = "bucket-${var.accountName}"
acl = "private"
versioning {
enabled = true
}
lifecycle {
prevent_destroy = true
ignore_changes = ["tag"]
}
}