【问题标题】:Create s3 bucket policy for multiple existing s3 bucket using terraform使用 terraform 为多个现有 s3 存储桶创建 s3 存储桶策略
【发布时间】:2021-08-14 10:35:00
【问题描述】:

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

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

现在我想创建存储桶策略并将此策略应用于所有现有的 s3 存储桶(a、b、c)。如何获取 s3 存储桶 ID 并执行循环或类似操作?请多多指教。非常感谢!!!

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

【问题讨论】:

    标签: amazon-web-services amazon-s3 terraform


    【解决方案1】:

    如果您创建的多个存储桶只有一个或几个参数(例如名称)不同,您应该使用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
      ...
    }
    

    【讨论】:

    • 嗨,我知道这个解决方案,但我不想更改与现有 s3 存储桶相关的任何内容。还有其他方法可以解决我的问题吗?
    • @DươngQuangThọ 我更新然后回答迭代现有的存储桶。
    • @DươngQuangThọ 没问题。很高兴它成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2021-01-19
    • 2023-03-31
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    相关资源
    最近更新 更多