amazon-web-services - 无法对齐导入的 S3 存储桶地形配置

标签 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"
      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与现有 acl S3 存储桶上的配置,例如
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="private"定义(即恢复到您的原始代码),并删除 "acl": "private",状态文件中的属性行,然后计划(包括刷新)显示存储桶将就地更新:+ acl = "private" .申请这似乎工作正常,但第二次申请表明赠款已丢失,需要重新申请。
因此,在我看来,S3 状态刷新中存在一个错误,该错误也可能会影响导入,此外,从状态中明确删除 acl 属性会使其错误地应用为覆盖任何授权的默认值。我认为可能值得使用您的代码创建一个新存储桶,然后比较状态定义以获取原始导入丢失的任何位。

关于amazon-web-services - 无法对齐导入的 S3 存储桶地形配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64337564/

相关文章:

amazon-web-services - 胶水作业因连接超时错误而失败

mysql - Amazon RDS 只读副本——跳过复制错误

batch-file - 批处理文件仅将今天的文件上传到 S3(获取文件名作为列表,循环,执行 cp 命令)

Terraform aws 提供程序 - 如何使用 ~/.aws/config 中的默认区域

ios - Amazon IOS SDK : compiler warnings - ARC issue?

node.js - 托管在 AWS linux 上的 NodeJs 网站无法访问

Angular/AWS S3-使用预签名的URL将文件上传到AWS S3

amazon-web-services - s3 - 文件上传 - 多个 sqs 队列中的消息

terraform - 使用 terraform 0.12+ 计算输出变量

google-cloud-platform - 如何使用 terraform 在 Google Compute Engine 上启用允许 HTTP 流量/允许 HTTP 流量