In Terraform, how do you output a list from an array of objects?

Viewed 8462

I'm creating a series of s3 buckets with this definition:

resource "aws_s3_bucket" "map" {
  for_each = local.bucket_settings
  bucket = each.key
...
}

I'd like to output a list of the website endpoints:

 output "website_endpoints" {
    # value = aws_s3_bucket.map["example.com"].website_endpoint
    value = ["${keys(aws_s3_bucket.map)}"] 
 }

What's the syntax to pull out a list of the endpoints (rather than the full object properties)?

2 Answers

If you just want to get a list of website_endpoint, then you can do:

 output "website_endpoints" {
    value = values(aws_s3_bucket.map)[*].website_endpoint
 }

This uses splat expression.

You can loop over your buckets with for loop and output specific attribute, in this case website_endpoint.

output "endpoint" {
    value = [for s in aws_s3_bucket.map : s.website_endpoint[*]]
}
Related