Bird
Raised Fist0
Terraformcloud~5 mins

Count vs for_each decision in Terraform - Quick Revision & Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What is the main difference between count and for_each in Terraform?

count creates multiple instances based on a number, while for_each creates instances based on each item in a map or set.

Click to reveal answer
beginner
When should you prefer for_each over count?

Use for_each when you want to create resources with unique keys or names, especially when working with maps or sets.

Click to reveal answer
beginner
Can count be used with maps or sets directly?

No, count only accepts a number. To use maps or sets, for_each is required.

Click to reveal answer
intermediate
How does resource addressing differ between count and for_each?

count uses numeric indexes (e.g., resource[0]), while for_each uses keys from the map or set (e.g., resource["key"]).

Click to reveal answer
intermediate
What is a common pitfall when using count with conditional expressions?

Changing count dynamically can cause resource replacement because indexes shift, leading to unexpected resource destruction and recreation.

Click to reveal answer
Which Terraform argument allows creating resources based on keys from a map or set?
Afor_each
Bcount
Cdepends_on
Dlifecycle
What type of value does count accept?
ANumber
BMap
CSet
DList
If you want to create three identical resources, which is simpler to use?
Afor_each with a map of three keys
Bcount = 3
Cdepends_on
Dprovider block
What happens if you change the order of items in a for_each map?
ATerraform throws an error
BResources get replaced due to index shift
CResources keep their keys and do not get replaced
DResources are duplicated
Which method is better for resources that need unique names or identifiers?
Adepends_on
Bcount
Cvariable
Dfor_each
Explain when and why you would choose count versus for_each in Terraform.
Think about whether you need unique keys or just a number of copies.
You got /4 concepts.
    Describe how resource addressing differs between count and for_each and why this matters.
    Consider how Terraform tracks each resource instance.
    You got /4 concepts.

      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