Bird
Raised Fist0
Terraformcloud~10 mins

For_each for map-based instances in Terraform - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to use a map with for_each to create instances.

Terraform
resource "aws_instance" "example" {
  for_each = [1]
  ami           = each.value.ami
  instance_type = each.value.instance_type
}
Drag options to blanks, or click blank then click option'
Avar.instances
Bvar.instance_list
Caws_instance.example
Dlocal.instances
Attempts:
3 left
💡 Hint
Common Mistakes
Using a list variable instead of a map for for_each.
Referencing a resource instead of a variable.
2fill in blank
medium

Complete the code to access the instance type from the map value.

Terraform
instance_type = [1].instance_type
Drag options to blanks, or click blank then click option'
Avar.instances
Blocal.instance
Ceach.value
Deach.key
Attempts:
3 left
💡 Hint
Common Mistakes
Using each.key which is the map key, not the value.
Using variable names instead of each.
3fill in blank
hard

Fix the error in the for_each expression to correctly iterate over the map variable.

Terraform
for_each = [1]
Drag options to blanks, or click blank then click option'
Avar.instances
Bvar.instances[*]
Cvar.instances[]
Dvar.instances.all
Attempts:
3 left
💡 Hint
Common Mistakes
Using list or index syntax on a map variable.
Trying to access a non-existent property like .all.
4fill in blank
hard

Fill both blanks to create a map of instance names to AMI IDs using for_each.

Terraform
output "instance_amis" {
  value = { for name, details in [1] : name => details.[2] }
}
Drag options to blanks, or click blank then click option'
Avar.instances
Bvar.instance_list
Cami
Dinstance_type
Attempts:
3 left
💡 Hint
Common Mistakes
Using a list variable instead of a map for iteration.
Accessing the wrong property like instance_type instead of ami.
5fill in blank
hard

Fill all three blanks to define multiple AWS instances using for_each with map variable and set tags.

Terraform
resource "aws_instance" "web" {
  for_each = [1]
  ami           = each.value.[2]
  instance_type = each.value.instance_type
  tags = {
    Name = [3]
  }
}
Drag options to blanks, or click blank then click option'
Avar.instances
Bami
Ceach.key
Dlocal.instances
Attempts:
3 left
💡 Hint
Common Mistakes
Using a list variable instead of a map for for_each.
Accessing the wrong property for AMI.
Using a fixed string instead of each.key for the Name tag.

Practice

(1/5)
1. What does for_each do when used with a map in Terraform?
easy
A. Creates resources only for the first key in the map
B. Deletes all resources in the map
C. Combines all map entries into a single resource
D. Creates one resource for each key-value pair in the map

Solution

  1. Step 1: Understand the role of for_each with maps

    for_each iterates over each key-value pair in a map to create multiple resources.
  2. Step 2: Recognize resource creation behavior

    Each key-value pair results in one resource instance, using each.key and each.value inside the resource block.
  3. Final Answer:

    Creates one resource for each key-value pair in the map -> Option D
  4. Quick Check:

    for_each with map = one resource per pair [OK]
Hint: Remember: for_each maps keys to separate resources [OK]
Common Mistakes:
  • Thinking for_each merges all map entries into one resource
  • Assuming for_each deletes resources
  • Believing for_each only uses the first map key
2. Which of the following is the correct syntax to use for_each with a map in a Terraform resource?
easy
A. resource "aws_instance" "example" { for_each = { key1 = "val1", key2 = "val2" } }
B. resource "aws_instance" "example" { for_each = ("key1", "key2") }
C. resource "aws_instance" "example" { for_each = "key1" }
D. resource "aws_instance" "example" { for_each = ["one", "two"] }

Solution

  1. Step 1: Identify valid for_each types

    for_each accepts a map or set of strings, but here we focus on map usage.
  2. Step 2: Check syntax correctness

    resource "aws_instance" "example" { for_each = { key1 = "val1", key2 = "val2" } } uses a map with key-value pairs correctly inside curly braces, which is valid Terraform syntax.
  3. Final Answer:

    resource "aws_instance" "example" { for_each = { key1 = "val1", key2 = "val2" } } -> Option A
  4. Quick Check:

    Map syntax with curly braces = correct for_each [OK]
Hint: Use curly braces for maps in for_each [OK]
Common Mistakes:
  • Using square brackets for maps instead of curly braces
  • Passing a single string instead of a map
  • Using parentheses which are invalid here
3. Given the Terraform snippet:
variable "servers" {
  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"
  tags = {
    Name = each.key
    IP   = each.value
  }
}

What will be the value of the tag Name for the instance with IP 10.0.0.2?
medium
A. web
B. 10.0.0.2
C. db
D. example

Solution

  1. Step 1: Map keys to IP addresses

    The map has keys 'web' and 'db' with values '10.0.0.1' and '10.0.0.2' respectively.
  2. Step 2: Match IP to key

    The IP '10.0.0.2' corresponds to the key 'db', so the tag Name will be 'db'.
  3. Final Answer:

    db -> Option C
  4. Quick Check:

    each.key for IP 10.0.0.2 = db [OK]
Hint: Match IP value to map key for Name tag [OK]
Common Mistakes:
  • Confusing key and value in the map
  • Using IP as the Name tag instead of the key
  • Assuming static tag values
4. What is wrong with this Terraform resource using for_each on a map?
resource "aws_instance" "example" {
  for_each = { "one" = "10.0.0.1", "two" = "10.0.0.2" }
  ami           = "ami-123456"
  instance_type = "t2.micro"
  tags = {
    Name = each.value
  }
  count = 2
}
medium
A. Using both for_each and count together causes an error
B. The map syntax is invalid
C. Missing each.key in tags
D. AMI ID is incorrect

Solution

  1. Step 1: Check resource meta-arguments

    Terraform does not allow using both for_each and count in the same resource block.
  2. Step 2: Identify the error cause

    The presence of count = 2 alongside for_each causes a configuration error.
  3. Final Answer:

    Using both for_each and count together causes an error -> Option A
  4. Quick Check:

    for_each and count cannot coexist [OK]
Hint: Never mix for_each and count in one resource [OK]
Common Mistakes:
  • Thinking map syntax is wrong
  • Believing missing each.key causes error
  • Assuming AMI ID is the problem
5. You have a map of server roles and IPs:
servers = {
  app1 = "10.0.1.1"
  app2 = ""
  app3 = "10.0.1.3"
  app4 = null
}

You want to create AWS instances only for servers with valid IPs using for_each. Which expression correctly filters the map to exclude empty or null IPs?
hard
A. for_each = var.servers
B. for_each = { for k, v in var.servers : k => v if v != "" && v != null }
C. for_each = { for k, v in var.servers : k => v if v == "" || v == null }
D. for_each = [ for v in var.servers : v if v != "" ]

Solution

  1. Step 1: Understand filtering with for expressions

    Use a for expression with an if condition to filter out empty strings and null values from the map.
  2. Step 2: Check each option

    for_each = { for k, v in var.servers : k => v if v != "" && v != null } correctly filters keys where value is neither empty string nor null, producing a valid filtered map for for_each.
  3. Final Answer:

    for_each = { for k, v in var.servers : k => v if v != "" && v != null } -> Option B
  4. Quick Check:

    Filter map with if condition to exclude empty/null [OK]
Hint: Filter map with for and if to exclude empty/null [OK]
Common Mistakes:
  • Not filtering out empty or null values
  • Using list comprehension instead of map
  • Filtering for empty/null instead of excluding them
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard