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

时间:2021-05-26 07:42:28

标签: 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 存储桶 ID 并执行循环或类似操作?请多指教。非常感谢!!!

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

1 个答案:

答案 0 :(得分: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
  ...
}