for
Expressions
A for
expression in Terraform is like a loop that helps you transform or process lists and maps of data. Think of it as a way to say "for each item in this collection, do something with it". For more information about for
expression check here (opens in a new tab)
Here are some common use cases with simple examples:
Creating a new list from an existing list
Convert a list of domains into edge hostnames.
variable "domains" {
default = ["example.com", "api.example.com"]
}
locals {
edge_hostnames = [for domain in var.domains : "${domain}.edgesuite.net"]
# Result: [
# "example.com.edgesuite.net",
# "api.example.com.edgesuite.net"
# ]
}
Creating a map from a list
Converting a list of hostnames into a map containing the respective edge hostnames.
locals {
edge_hostnames = {for domain in var.domains : "${domain}" => "${domain}.edgesuite.net"}
# Result: {
# "api.example.com" = "api.example.com.edgesuite.net"
# "example.com" = "example.com.edgesuite.net"
# }
}
Filtering items
Filter out the example.com domain from the list.
variable "all_names" {
default = ["example.com", "api.example.com", "www.example.com"]
}
locals {
hostnames = [for item in var.all_names : item if item != "example.com"]
}
output "hostname" {
value = local.hostnames
}
# Result: [
# "api.example.com",
# "www.example.com"
# ]
The main benefits of for
expressions are:
- They help you avoid repetitive code
- They make it easier to process lists and maps
- They allow you to transform data into the format you need
- They're great for creating multiple similar resources
Exercise
Configure
Create the following variable in your variables.tf:
variable "apps" {
default = [ "www", "api", "blog", "shop", "cdn"]
}
Update
In your main.tf and with the use of the for
expression, convert each app name above into a hostname by appending the example.com domain. The new local variable containing the new hostnames list can be named app_hostnames
and we will use it in later exercises.
Output
Output the app_hostnames
local to confirm the logic is applied.
Plan
Run terraform plan
. You could run terraform apply
too, but because we are not modifying any resources no changes will be applied anyway.
Commit
Commit your change and push it to GitHub.