Terraform在使用aws_s3_bucket时重写标记和版本控制信息



我遇到一个问题,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"]
}
}

最新更新