amazon-web-services - 使用 terraform 为多个现有 s3 存储桶创建 s3 存储桶策略

标签 amazon-web-services amazon-s3 terraform

我有一些使用 terraform 代码创建的 S3 存储桶,如下所示:

resource "aws_s3_bucket" "a" {
  ...
}
resource "aws_s3_bucket" "b" {
  ...
}
resource "aws_s3_bucket" "c" {
  ...
}

现在我想创建存储桶策略并将此策略应用于所有现有的 s3 存储桶(a、b、c)。我怎样才能得到 s3 bucket id 并做一个循环或类似的东西?请多多指教。非常感谢!!!

resource "aws_s3_bucket_policy" "abc" {
  bucket = aws_s3_bucket.*.id
  ...
}

最佳答案

如果您创建多个桶,它们只是相差一个或几个参数(例如名称),您应该使用 countfor_each并以 list 的形式提供名称。例如:

variable "buckets" {
    default = ["a", "b", "c"]
}

resource "aws_s3_bucket" "bucket" {
  for_each = var.buckets
  name     = each.key
  # ...
}

resource "aws_s3_bucket_policy" "abc" {
  for_each = var.buckets
  bucket   = aws_s3_bucket.bucket[each.key].id
  ...
}

更新

您还可以:


locals {
    buckets = [aws_s3_bucket.a, aws_s3_bucket.b, ws_s3_bucket.c]
}

resource "aws_s3_bucket_policy" "abc" {
  for_each = {for idx, bucket in local.buckets: idx => bucket}

  bucket = each.value.id
  ...
}

关于amazon-web-services - 使用 terraform 为多个现有 s3 存储桶创建 s3 存储桶策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67700567/

相关文章:

amazon-web-services - 如何使用我的用户(未经验证)地址作为 Amazon SES 的发件人?

ubuntu - 我的 Amazon EC 2 运行的是 Amazon Linux 还是 Ubuntu?

node.js - AWS EC2 : Ubuntu Webserver - Process out of memory when running npm install

amazon-web-services - 如何将现有 CodePipeline 导出到 CloudFormation 模板

terraform - 需要权限 iam.serviceAccounts.setIamPolicy 才能对服务帐户执行此操作

terraform - 如何使用 terraform 中的动态键从 Set 中将数据提取为列表

amazon-web-services - 为什么通过Session Manager访问私有(private)EC2实例需要NAT网关?

node.js - 获取位于特定 S3 文件夹下的对象列表

amazon-s3 - 亚马逊 EMR Spark 集群 : output/result not visible

heroku - 在 Heroku 上的 Play 框架中处理文件上传