我有一些使用 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
...
}
答案 0 :(得分:1)
如果您创建多个仅通过一个或几个参数(例如名称)不同的存储桶,您应该使用 count 或 for_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
...
}