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

Amazon web services 无法对齐导入的S3 bucket地形配置,amazon-web-services,amazon-s3,terraform,Amazon Web Services,Amazon S3,Terraform,我已经将一个现有的S3存储桶导入到我的terraform状态 我现在正在尝试对其配置进行反向工程,并将其传递到.tf文件 这是我的档案 resource "aws_s3_bucket" "my-bucket" { provider = "aws.eu_west_1" bucket = "my-bucket" grant { type = "Group"

我已经将一个现有的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"]
  }
这是我的
地形图
输出

  ~ aws_s3_bucket.my-bucket
      acl:                                                     "" => "private"
无论我对
acl使用什么值,我
I总是无法将我的
tf
与S3存储桶上的现有
acl
配置对齐,例如

resource "aws_s3_bucket" "my-bucket" {
  provider = "aws.eu_west_1"
  bucket   = "my-bucket"
  acl.     = "private"
对应的
计划
输出:

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.     = ""
因此,如果我对acl不使用任何值,
terraform
显示
acl
将从未设置更改为
private

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


为什么会这样?

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

如果我使用您的原始代码(即没有acl行)创建一个bucket,则生成的TF状态文件仍然包含bucket的
“acl”:“private”
属性。如果我随后在TF代码中添加acl=“private”定义,则在尝试应用时也会得到“acl”:与grant冲突

但真正奇怪的是,如果我删除
acl=“private”
定义(即还原为原始代码),并从状态文件中删除
“acl”:“private”
属性行,那么计划(包括刷新)显示将使用以下内容更新存储桶:
+acl=“private”
。申请这个似乎效果不错,但第二次申请表明补助金已经丢失,需要重新申请


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

您使用的是哪个TF版本?版本
0.11.4
resource "aws_s3_bucket" "my-bucket" {
  provider = "aws.eu_west_1"
  bucket   = "my-bucket"
  acl.     = ""