Bird
Raised Fist0
Terraformcloud~20 mins

Count vs for_each decision in Terraform - Practice Questions

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Count vs for_each Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Choosing between count and for_each for resource creation

You want to create multiple identical virtual machines in Terraform. You have a list of VM names. Which approach is best to create one resource per VM name?

AUse for_each with a map of VM names as keys to create one resource per name.
BUse for_each with the VM names list converted to a set to create one resource per name.
CUse count with a fixed number and hardcode VM names inside the resource.
DUse count with the length of the VM names list and index into the list inside the resource.
Attempts:
2 left
💡 Hint

Think about how Terraform uniquely identifies each resource instance.

❓ Configuration
intermediate
2:00remaining
Terraform resource creation with count and for_each

Given the following Terraform snippet, what will be the number of resources created?

variable "servers" {
  default = ["app1", "app2", "app3"]
}

resource "aws_instance" "example" {
  count = length(var.servers)
  ami           = "ami-123456"
  instance_type = "t2.micro"
  tags = {
    Name = var.servers[count.index]
  }
}
AAn error occurs due to invalid count usage.
B3 resources, one for each server name in the list.
C0 resources, because the variable is not referenced correctly.
D1 resource, because count is not supported with lists.
Attempts:
2 left
💡 Hint

Count creates multiple instances based on the number provided.

❓ Architecture
advanced
2:00remaining
Handling resource updates with count vs for_each

You have a Terraform configuration using count to create resources from a list. You remove one item from the list and apply changes. What happens to the resources?

ATerraform keeps all resources unchanged.
BTerraform destroys the resource corresponding to the removed item by matching its index.
CTerraform throws an error because count cannot handle list changes.
DTerraform destroys the last resource in the list regardless of which item was removed.
Attempts:
2 left
💡 Hint

Think about how count indexes resources and what happens when list length changes.

❓ security
advanced
2:00remaining
Security implications of using for_each with sensitive data

You use for_each to create multiple resources with sensitive variables as keys. What is a potential security risk?

ATerraform automatically encrypts all sensitive data in state files, so no risk exists.
BUsing for_each disables sensitive variable masking in logs.
CSensitive data may appear in Terraform state files as keys, exposing secrets.
DThere is no difference in security between count and for_each.
Attempts:
2 left
💡 Hint

Consider how Terraform stores resource identifiers in state files.

❓ service_behavior
expert
2:00remaining
Impact on resource lifecycle when switching from count to for_each

You have a Terraform module using count to create resources. You switch to for_each with a map of resource names. After applying, what is the expected behavior regarding resource replacement?

ATerraform will replace all resources because the resource keys changed from indexes to names.
BTerraform will keep all resources unchanged because count and for_each are interchangeable.
CTerraform will throw an error due to incompatible resource identifiers.
DTerraform will only replace resources whose keys differ between count and for_each.
Attempts:
2 left
💡 Hint

Think about how Terraform tracks resources by keys and indexes.

Practice

(1/5)
1. Which Terraform argument should you use when you want to create 3 identical resources without unique identifiers?
easy
A. count = 3
B. for_each = {}
C. for_each = toset(["a", "b", "c"])
D. count = 0

Solution

  1. Step 1: Understand the purpose of count

    count creates multiple copies of a resource by number, perfect for identical resources.
  2. Step 2: Compare with for_each

    for_each is used when you want unique keys or values to identify each resource, not just copies.
  3. Final Answer:

    count = 3 -> Option A
  4. Quick Check:

    Simple copies = count [OK]
Hint: Use count for number copies, for_each for unique keys [OK]
Common Mistakes:
  • Using for_each when only number copies are needed
  • Setting count to zero expecting resources
  • Confusing sets with counts
2. Which of the following is the correct syntax to create resources using for_each with a map in Terraform?
easy
A. resource "aws_instance" "example" { for_each = ["a", "b"] }
B. resource "aws_instance" "example" { for_each = "string" }
C. resource "aws_instance" "example" { count = 2 }
D. resource "aws_instance" "example" { for_each = { key1 = "val1", key2 = "val2" } }

Solution

  1. Step 1: Identify valid for_each types

    for_each accepts maps or sets, not lists or strings directly.
  2. Step 2: Check each option

    resource "aws_instance" "example" { for_each = { key1 = "val1", key2 = "val2" } } uses a map with keys and values, which is valid syntax for for_each.
  3. Final Answer:

    resource with for_each map -> Option D
  4. Quick Check:

    for_each needs map or set [OK]
Hint: for_each needs map or set, not list or string [OK]
Common Mistakes:
  • Using list instead of map/set for for_each
  • Confusing count with for_each syntax
  • Passing string directly to for_each
3. Given this Terraform snippet:
resource "aws_s3_bucket" "buckets" {
  for_each = { bucket1 = "private", bucket2 = "public-read" }
  bucket = each.key
  acl = each.value
}

What will be the names of the created buckets?
medium
A. ["each.key", "each.value"]
B. ["private", "public-read"]
C. ["bucket1", "bucket2"]
D. No buckets created due to syntax error

Solution

  1. Step 1: Understand for_each map keys and values

    The keys are bucket1 and bucket2, values are ACL values.
  2. Step 2: Check bucket assignment

    The bucket name is set to each.key, so buckets named "bucket1" and "bucket2" are created.
  3. Final Answer:

    ["bucket1", "bucket2"] -> Option C
  4. Quick Check:

    Bucket names = map keys [OK]
Hint: for_each keys become resource identifiers [OK]
Common Mistakes:
  • Using values as bucket names instead of keys
  • Assuming syntax error without checking
  • Confusing each.key with each.value
4. You wrote this Terraform resource:
resource "aws_instance" "example" {
  count = length(var.instances)
  name  = var.instances[count.index]
}

But Terraform throws an error about count.index. What is the likely cause?
medium
A. count is used but for_each should be used for maps
B. var.instances is a map, but count expects a list
C. You cannot use count.index inside resource blocks
D. count must be a fixed number, not a variable

Solution

  1. Step 1: Identify variable type mismatch

    var.instances is likely a map, but count works with numbers and lists indexed by numbers.
  2. Step 2: Choose correct iterator

    For maps, for_each is the correct choice to iterate over keys and values.
  3. Final Answer:

    Use for_each for maps, not count -> Option A
  4. Quick Check:

    Maps need for_each, not count [OK]
Hint: Use for_each for maps, count for lists [OK]
Common Mistakes:
  • Using count.index with maps
  • Assuming count must be fixed number
  • Ignoring variable data type
5. You want to create multiple AWS IAM users with unique usernames and policies from this map:
users = {
  alice = "admin",
  bob = "read-only",
  carol = "power-user"
}

Which Terraform resource block correctly uses count or for_each to create these users with unique names?
hard
A.
resource "aws_iam_user" "user" {
  count = length(keys(var.users))
  name  = keys(var.users)[count.index]
  policy = var.users[name]
}
B.
resource "aws_iam_user" "user" {
  for_each = var.users
  name     = each.key
  policy   = each.value
}
C.
resource "aws_iam_user" "user" {
  count = 3
  name  = var.users[count.index]
  policy = var.users[count.index]
}
D.
resource "aws_iam_user" "user" {
  for_each = toset(var.users)
  name     = each.value
  policy   = each.key
}

Solution

  1. Step 1: Analyze data structure

    The users variable is a map with usernames as keys and policies as values.
  2. Step 2: Match iteration method

    for_each works well with maps to create uniquely identified resources using keys and values.
  3. Step 3: Check each option

    resource "aws_iam_user" "user" {
      for_each = var.users
      name     = each.key
      policy   = each.value
    }
    correctly uses for_each = var.users and assigns name = each.key and policy = each.value.
  4. Final Answer:

    Use for_each with map for unique users -> Option B
  5. Quick Check:

    Unique keys need for_each [OK]
Hint: Use for_each with maps for unique resource keys [OK]
Common Mistakes:
  • Using count with maps incorrectly
  • Mixing keys and values in wrong order
  • Using toset on maps causing errors
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