Bird
Raised Fist0
Terraformcloud~20 mins

Meta-arguments overview in Terraform - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Terraform Meta-Arguments Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding the purpose of Terraform meta-arguments

Which of the following best describes the purpose of Terraform meta-arguments?

AThey control how Terraform manages resource creation, updates, and dependencies.
BThey define the cloud provider credentials and authentication methods.
CThey specify the exact hardware specifications for virtual machines.
DThey are used to write conditional expressions inside resource blocks.
Attempts:
2 left
💡 Hint

Think about arguments that affect resource lifecycle and dependencies.

❓ Configuration
intermediate
2:00remaining
Effect of count meta-argument on resource instances

Given the following Terraform resource snippet, how many instances of aws_instance will be created?

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  count         = 3
}
A3 instances
B0 instances
C1 instance
DDepends on the number of availability zones
Attempts:
2 left
💡 Hint

The count meta-argument controls how many copies of the resource are created.

❓ Architecture
advanced
2:00remaining
Using depends_on to control resource creation order

Consider two resources: aws_vpc.main and aws_subnet.subnet1. You want to ensure the subnet is created only after the VPC is fully created. Which meta-argument usage achieves this?

AAdd <code>depends_on = [aws_subnet.subnet1]</code> inside <code>aws_vpc.main</code> resource block.
BUse <code>count = 0</code> in <code>aws_subnet.subnet1</code> until VPC is created.
CNo need to specify; Terraform automatically orders resources alphabetically.
DAdd <code>depends_on = [aws_vpc.main]</code> inside <code>aws_subnet.subnet1</code> resource block.
Attempts:
2 left
💡 Hint

Think about which resource depends on the other.

❓ security
advanced
2:00remaining
Impact of lifecycle meta-argument on resource deletion

What is the effect of setting lifecycle { prevent_destroy = true } in a Terraform resource block?

ATerraform will delete the resource immediately without confirmation.
BTerraform will refuse to delete the resource, preventing accidental destruction.
CTerraform will ignore changes to the resource's attributes during updates.
DTerraform will automatically recreate the resource if deleted outside Terraform.
Attempts:
2 left
💡 Hint

Consider what 'prevent_destroy' implies about resource safety.

❓ service_behavior
expert
2:00remaining
Behavior of for_each meta-argument with map input

Given this Terraform resource snippet, what will be the keys of the created resources?

resource "aws_s3_bucket" "buckets" {
  for_each = {
    alpha = "us-east-1"
    beta  = "us-west-2"
  }
  bucket = "my-bucket-${each.key}"
  region = each.value
}
ANo resources will be created due to syntax error
B[0, 1]
C["alpha", "beta"]
D["us-east-1", "us-west-2"]
Attempts:
2 left
💡 Hint

Recall how for_each uses map keys as resource instance keys.

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