Bird
Raised Fist0
Terraformcloud~5 mins

Meta-arguments overview in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What are meta-arguments in Terraform?
Meta-arguments are special arguments that can be used inside Terraform resource blocks to control how resources behave, like loops, conditions, or dependencies.
Click to reveal answer
beginner
Name three common meta-arguments in Terraform.
Common meta-arguments include count (to create multiple instances), for_each (to create resources from a map or set), and depends_on (to specify resource dependencies).
Click to reveal answer
beginner
How does the count meta-argument work?
The count meta-argument tells Terraform how many copies of a resource to create. For example, count = 3 creates three identical resources.
Click to reveal answer
intermediate
What is the purpose of depends_on in Terraform?
depends_on tells Terraform to create or update a resource only after certain other resources are done. It helps control the order of operations.
Click to reveal answer
intermediate
When should you use for_each instead of count?
Use for_each when you want to create resources based on a map or set with unique keys, so you can easily reference each resource by its key. count is simpler but only uses numeric indexes.
Click to reveal answer
Which meta-argument creates multiple copies of a resource by number?
Afor_each
Bcount
Cdepends_on
Dlifecycle
What does depends_on control in Terraform?
AResource creation order
BNumber of resource copies
CResource naming
DResource tags
Which meta-argument allows creating resources from a map or set with unique keys?
Acount
Bdepends_on
Cprovider
Dfor_each
Can you use both count and for_each in the same resource block?
AOnly if the resource supports it
BYes, always
CNo, they cannot be used together
DOnly with depends_on
What happens if you set count = 0 for a resource?
ATerraform creates zero resources
BTerraform creates default resources
CTerraform throws an error
DTerraform creates one resource
Explain what meta-arguments are in Terraform and give examples.
Think about special settings inside resource blocks that change how many or when resources are created.
You got /3 concepts.
    Describe the difference between using count and for_each meta-arguments.
    Consider how you choose which resources to create and how you refer to them.
    You got /4 concepts.

      Practice

      (1/5)
      1. Which meta-argument in Terraform allows you to create multiple instances of a resource easily using an integer?
      easy
      A. count
      B. depends_on
      C. lifecycle
      D. for_each

      Solution

      1. Step 1: Understand the purpose of count

        The count meta-argument lets you specify how many copies of a resource to create.
      2. Step 2: Compare with other meta-arguments

        depends_on manages dependencies, lifecycle controls resource behavior, and for_each creates multiple instances but with keys, not just count.
      3. Final Answer:

        count -> Option A
      4. Quick Check:

        Multiple instances = count [OK]
      Hint: Use count to repeat resources by number [OK]
      Common Mistakes:
      • Confusing count with depends_on
      • Thinking lifecycle creates multiple resources
      • Mixing count and for_each without understanding difference
      2. Which of the following is the correct syntax to use the depends_on meta-argument in a resource block?
      easy
      A. depends_on = ["aws_instance.example"]
      B. depends_on = aws_instance.example
      C. depends_on = [aws_instance.example]
      D. depends_on = [aws_instance.example.id]

      Solution

      1. Step 1: Recall depends_on syntax

        depends_on expects a list of resource references without quotes.
      2. Step 2: Analyze options

        depends_on = [aws_instance.example] uses a list with resource reference correctly. depends_on = aws_instance.example misses list brackets. depends_on = ["aws_instance.example"] uses quotes making it a string, not a reference. depends_on = [aws_instance.example.id] uses an attribute which is invalid here.
      3. Final Answer:

        depends_on = [aws_instance.example] -> Option C
      4. Quick Check:

        List of resource references = depends_on = [aws_instance.example] [OK]
      Hint: Always use square brackets with resource references for depends_on [OK]
      Common Mistakes:
      • Omitting brackets for depends_on list
      • Using quotes around resource names
      • Referencing resource attributes instead of resource itself
      3. Given the following Terraform snippet:
      resource "aws_instance" "example" {
        count = 3
        ami           = "ami-123456"
        instance_type = "t2.micro"
      }

      What will be the number of instances created and their resource addresses?
      medium
      A. 1 instance: aws_instance.example
      B. 3 instances: aws_instance.example[0], aws_instance.example[1], aws_instance.example[2]
      C. 3 instances: aws_instance.example.0, aws_instance.example.1, aws_instance.example.2
      D. Error due to missing for_each

      Solution

      1. Step 1: Understand count behavior

        count = 3 creates three instances indexed from 0 to 2.
      2. Step 2: Identify resource addresses format

        Terraform uses square brackets for indexed resources, so addresses are aws_instance.example[0], aws_instance.example[1], and aws_instance.example[2].
      3. Final Answer:

        3 instances: aws_instance.example[0], aws_instance.example[1], aws_instance.example[2] -> Option B
      4. Quick Check:

        Count creates indexed instances [OK]
      Hint: Count creates indexed resources with square brackets [OK]
      Common Mistakes:
      • Thinking only one instance is created
      • Using dot notation instead of brackets for indexes
      • Confusing count with for_each syntax
      4. You wrote this Terraform resource:
      resource "aws_s3_bucket" "example" {
        for_each = ["a", "b"]
        bucket = each.value
      }

      What is the error in this configuration?
      medium
      A. Missing count argument
      B. each.value is invalid inside resource blocks
      C. bucket attribute cannot use each.value
      D. for_each must be a map or set, not a list

      Solution

      1. Step 1: Check for_each type requirements

        for_each requires a map or set of strings, not a list.
      2. Step 2: Analyze provided value

        The value is a list ["a", "b"], which is invalid for for_each. It should be a set or map.
      3. Final Answer:

        for_each must be a map or set, not a list -> Option D
      4. Quick Check:

        for_each needs map/set, not list [OK]
      Hint: Use map or set for for_each, not list [OK]
      Common Mistakes:
      • Using list instead of set/map for for_each
      • Misunderstanding each.value usage
      • Confusing count and for_each requirements
      5. You want to create multiple AWS EC2 instances with different names and ensure one instance is always created before the others. Which meta-arguments combination should you use?
      hard
      A. Use for_each with a map of names and depends_on to order creation
      B. Use count with a number and lifecycle to order creation
      C. Use depends_on only, no count or for_each
      D. Use lifecycle with create_before_destroy only

      Solution

      1. Step 1: Choose meta-argument for multiple named instances

        for_each with a map lets you create instances with specific names as keys.
      2. Step 2: Ensure creation order

        depends_on lets you specify that one resource must be created before others.
      3. Final Answer:

        Use for_each with a map of names and depends_on to order creation -> Option A
      4. Quick Check:

        Multiple named + order = for_each + depends_on [OK]
      Hint: Combine for_each and depends_on for named ordered resources [OK]
      Common Mistakes:
      • Using count without names for multiple instances
      • Relying on lifecycle for creation order
      • Ignoring depends_on for resource dependencies