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



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

resource "aws_s3_bucket" "s3_private" {
for_each = var.git_repo_branch_env
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])
force_destroy = true
}

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

resource "aws_s3_bucket_acl" "s3_private_acl" {
bucket = aws_s3_bucket.s3_private.bucket
acl    = "private"
}

我收到以下错误消息

错误:缺少资源实例键 │ │ 打开 ../../modules/cloudfront-edge-auth-acp/main.tf 第 149 行,在资源中 "aws_s3_bucket_acl" "s3_private_acl": │ 149: 桶 = aws_s3_bucket.s3_private.bucket │ │ 因为 aws_s3_bucket.s3_private 设置了"for_each",其属性必须 │ 在特定 实例。│ │ 例如,与引用的索引相关联 资源,使用:│ aws_s3_bucket.s3_private[each.key]

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

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

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

resource "aws_s3_bucket_acl" "s3_private_acl" {
for_each = aws_s3_bucket.s3_private
bucket   = each.value.bucket
acl      = "private"
}

这在 Terraform 文档中得到了很好的解释:在资源之间链接for_each。

最新更新