在 terraform 中使用 for_each 时缺少资源实例键

Drk*_*Str 0 terraform terraform-provider-aws

我正在 terraform 中使用 for_each 创建多个 s3 存储桶。这是我正在使用的代码

\n
resource "aws_s3_bucket" "s3_private" {\n  for_each = var.git_repo_branch_env\n  bucket   = each.value.override_domain_name == "" ?  each.value.sitename_prefix == "" ? each.value.domain_name : join(".", [each.value.sitename_prefix, each.value.domain_name]) : each.value.sitename_prefix == ""  ? each.value.override_domain_name : join(".", [each.value.sitename_prefix, each.value.override_domain_name])\n  force_destroy = true\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我想为创建的每个存储桶设置 ACL 属性,这是我尝试使用的代码

\n
resource "aws_s3_bucket_acl" "s3_private_acl" {\n  bucket = aws_s3_bucket.s3_private.bucket\n  acl    = "private"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误消息

\n
\n

\xe2\x94\x82 错误:缺少资源实例密钥 \xe2\x94\x82 \xe2\x94\x82 位于\n../../modules/cloudfront-edge-auth-acp/main.tf 第 149 行,位于resources\n"aws_s3_bucket_acl" "s3_private_acl": \xe2\x94\x82 149: bucket =\naws_s3_bucket.s3_private.bucket \xe2\x94\x82 \xe2\x94\x82 因为 aws_s3_bucket.s3_private\n 设置了 "for_each",其属性必须在特定实例上\xe2\x94\x82 访问。\xe2\x94\x82 \xe2\x94\x82 例如,要与引用资源的索引相关联,请使用: \xe2\x94\x82 aws_s3_bucket.s3_private[each.key]

\n
\n

我收到错误消息是因为我的存储桶资源上有一个 for_each,并且我需要为每个存储桶添加 ACL 属性。但我不确定如何将 ACL 属性添加到每个存储桶。

\n

问题:如何为使用 for_each 创建的每个存储桶分配 ACL 属性?

\n

Kom*_*owy 5

如果您使用创建了多个存储桶for_each,则需要对 ACL 执行相同的操作:

resource "aws_s3_bucket_acl" "s3_private_acl" {
  for_each = aws_s3_bucket.s3_private
  bucket   = each.value.bucket
  acl      = "private"
}
Run Code Online (Sandbox Code Playgroud)

Terraform 文档对此进行了很好的解释:在资源之间链接 for_each