0
0
Terraformcloud~10 mins

For_each for map-based instances in Terraform - Step-by-Step Execution

Choose your learning style9 modes available
Process Flow - For_each for map-based instances
Define map variable
Start for_each loop
Iterate over each map key-value pair
Create resource instance using key and value
Repeat for all map entries
End loop with all instances created
Terraform reads a map variable, then loops over each key-value pair to create a resource instance for each entry.
Execution Sample
Terraform
variable "servers" {
  type = map(string)
  default = {
    web = "10.0.0.1"
    db  = "10.0.0.2"
  }
}

resource "aws_instance" "example" {
  for_each = var.servers
  ami      = "ami-123456"
  instance_type = "t2.micro"
  private_ip = each.value
}
Creates one AWS instance per map entry, using the map key as instance name and value as private IP.
Process Table
StepMap KeyMap ValueResource Instance CreatedInstance Private IP
1web10.0.0.1aws_instance.example["web"]10.0.0.1
2db10.0.0.2aws_instance.example["db"]10.0.0.2
3---All map entries processed, loop ends
💡 All map entries processed, no more keys to iterate
Status Tracker
VariableStartAfter 1After 2Final
each.key-webdb-
each.value-10.0.0.110.0.0.2-
resource count0122
Key Moments - 2 Insights
Why does Terraform use the map key as the instance identifier in the resource?
Terraform uses the map key as the unique identifier to create separate resource instances, as shown in execution_table rows 1 and 2 where aws_instance.example["web"] and aws_instance.example["db"] are created.
What happens if the map is empty?
If the map is empty, the for_each loop does not run any iterations, so no resource instances are created. This is implied by the exit_note in the execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the private IP of the instance created at step 2?
A10.0.0.1
B10.0.0.2
Cami-123456
Dt2.micro
💡 Hint
Check the 'Instance Private IP' column at step 2 in the execution_table.
At which step does Terraform finish creating all instances from the map?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look at the exit_note and the last row in the execution_table.
If the map had three entries instead of two, how would the resource count change in variable_tracker after the last iteration?
AIt would be 2
BIt would be 1
CIt would be 3
DIt would be 0
💡 Hint
Refer to the 'resource count' row in variable_tracker and how it increments per iteration.
Concept Snapshot
Terraform for_each with map:
- Use for_each = var.map to loop over map entries
- each.key is map key, each.value is map value
- Creates one resource per map entry
- Resource instances named by map keys
- Useful for dynamic multiple resource creation
Full Transcript
This visual execution shows how Terraform uses for_each with a map variable to create multiple resource instances. It starts by defining a map with keys and values. Then, Terraform loops over each key-value pair. For each pair, it creates a resource instance named by the key and uses the value for configuration, such as private IP. The execution table tracks each step, showing the key, value, resource created, and IP assigned. The variable tracker shows how each.key, each.value, and resource count change with each iteration. Key moments clarify why keys are used as identifiers and what happens if the map is empty. The quiz tests understanding of instance IPs, loop completion, and resource count changes. This method helps create multiple similar resources efficiently using map data.