繁体   English   中英

无法对齐导入的 S3 存储桶地形配置

[英]Unable to align imported S3 bucket terraform configuration

我已将现有的 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 的观察,但仍可能有所帮助:

如果我使用您的原始代码(即没有 acl 行)创建存储桶,则生成的 TF 状态文件仍包含存储桶的"acl": "private",属性。 如果我然后在 TF 代码中添加 acl="private" 定义,我也会得到"acl": conflicts with grant在尝试申请时"acl": conflicts with grant

但真正奇怪的是,如果我删除acl="private"定义(即恢复到您的原始代码),并且还删除状态文件中的"acl": "private",属性行,那么计划(包括refresh) 显示存储桶将使用以下内容进行更新: + acl = "private" 申请这似乎工作正常,但第二次申请表明赠款已丢失,需要重新申请。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM