我如何在Terraform中使用for_each为多个S3桶分配1桶策略?



我正在尝试for循环并获得正确的插值:

variable "my_bucket_names" {
type = list(string)
default = [
"b1",
"b2",
]
}
resource "aws_s3_bucket_policy" "tf-thing-audit-policy" {
for_each           = toset(var.my_bucket_names)
bucket = ${each.key.id} 
...

是否有一种方法可以对bucket值进行插值?

错误:

│ Expected the start of an expression, but found an invalid expression token.

each.keystring类型,不是对象或映射,因此执行.id将得到null,因为它不存在。

直接使用each.key的值对于您正在尝试做的事情(将一个桶策略分配给多个桶)是可以的。你也不需要{},因为你不需要为aws_s3_bucket_policybucket参数做任何字符串插值。

aws_s3_bucket_policy只需要桶名,即each.key:

bucket -(必选)桶名

如果您指定了一个有效的桶策略,这应该可以很好地工作:

variable "my_bucket_names" {
type = list(string)
default = [
"b1",
"b2",
]
}
resource "aws_s3_bucket_policy" "tf-thing-audit-policy" {
for_each = toset(var.my_bucket_names)
bucket = each.key
policy = jsonencode(...)
}

最新更新