I'm trying to for loop and get get the interpolation correct:
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}
...
Is there a way I can interpolate on the bucket
value?
Error:
│ Expected the start of an expression, but found an invalid expression token.
CodePudding user response:
each.key
is of type string
, not an object or a map so doing .id
will result in null
as it doesn't exist.
Using the value of each.key
directly will be fine for what you're trying to do (assigning 1 bucket policy to multiple buckets). You also don't need {}
as you don't need to do any string interpolation for the bucket
argument of aws_s3_bucket_policy
.
aws_s3_bucket_policy
just requires the bucket name which is each.key
:
bucket - (Required) The name of the bucket to which to apply the policy.
This should work perfectly fine, provided you specify a valid bucket policy:
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(...)
}