无法对齐导入的S3 bucket地形配置



我已经将一个现有的S3存储桶导入到我的terraform状态。

我现在正在尝试对其配置进行反向工程,并将其传递到.tf文件。

这是我的文件

resource "aws_s3_bucket" "my-bucket" {
provider = "aws.eu_west_1"
bucket   = "my-bucket"
grant {
type        = "Group"
permissions = ["READ_ACP", "WRITE"]
uri         = "http://acs.amazonaws.com/groups/s3/LogDelivery"
}
grant {
id          = "my-account-id"
type        = "CanonicalUser"
permissions = ["FULL_CONTROL"]
}

这是我的terraform plan输出

~ aws_s3_bucket.my-bucket
acl:                                                     "" => "private"

无论我对acl使用什么值,我总是无法将我的tf与S3存储桶上的现有acl配置对齐,例如

resource "aws_s3_bucket" "my-bucket" {
provider = "aws.eu_west_1"
bucket   = "my-bucket"
acl.     = "private"

对应的plan输出:

Error: aws_s3_bucket.my-bucket: "acl": conflicts with grant
Error: aws_s3_bucket.my-bucket: "grant": conflicts with acl

和另一个:

resource "aws_s3_bucket" "my-bucket" {
provider = "aws.eu_west_1"
bucket   = "my-bucket"
acl.     = ""
resource "aws_s3_bucket" "my-bucket" {
provider = "aws.eu_west_1"
bucket   = "my-bucket"
acl.     = ""

因此,如果我不使用acl的值,terraform显示acl将从未设置更改为private

如果我使用任何值,我都会得到一个错误。

为什么?

这是对0.13的观察,但仍然可能有所帮助:

如果我使用原始代码创建了一个bucket(即没有acl行(,那么生成的TF状态文件仍然包括bucket的"acl": "private",属性。如果我随后添加一个acl="0";私人的";TF代码中的定义,我在尝试应用时也得到了"acl": conflicts with grant

但真正奇怪的是,如果我删除acl="private"定义(即恢复到原始代码(,并从状态文件中删除"acl": "private",属性行,那么计划(包括刷新(显示bucket将用以下内容更新:+ acl = "private"。申请这个似乎很有效,但第二次申请表明拨款已经丢失,需要重新申请。

因此,在我看来,S3状态刷新中有一个错误,可能也会影响导入,此外,从状态中明显删除acl属性会使其错误地作为默认值应用,从而覆盖任何授予。我认为,使用您的代码创建一个新的bucket,然后比较状态定义,以恢复原始导入遗漏的任何位可能是值得的。

最新更新