Bird
Raised Fist0
Terraformcloud~10 mins

Meta-arguments overview in Terraform - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to use the meta-argument that controls resource creation count.

Terraform
resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  [1] = 3
}
Drag options to blanks, or click blank then click option'
Afor_each
Bdepends_on
Ccount
Dlifecycle
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'depends_on' instead of 'count' to create multiple resources.
Confusing 'for_each' with 'count' for simple multiple resource creation.
2fill in blank
medium

Complete the code to use the meta-argument that defines dependencies between resources.

Terraform
resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  [1] = [aws_security_group.sg]
}
Drag options to blanks, or click blank then click option'
Adepends_on
Bcount
Cfor_each
Dprovider
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'count' to manage dependencies instead of 'depends_on'.
Not specifying dependencies causing resource creation errors.
3fill in blank
hard

Fix the error in the code by choosing the correct meta-argument to iterate over a map.

Terraform
resource "aws_s3_bucket" "example" {
  [1] = var.bucket_names
  bucket = [1].value
}
Drag options to blanks, or click blank then click option'
Acount
Bfor_each
Cdepends_on
Dprovider
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'count' with maps instead of 'for_each'.
Trying to access '.value' without using 'for_each'.
4fill in blank
hard

Fill both blanks to correctly prevent Terraform from deleting a resource on destroy and to ignore changes to tags.

Terraform
resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  lifecycle {
    [1] = true
    [2] = ["tags"]
  }
}
Drag options to blanks, or click blank then click option'
Aprevent_destroy
Bignore_changes
Ccreate_before_destroy
Dreplace_triggered_by
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing 'create_before_destroy' with 'prevent_destroy'.
Not using 'ignore_changes' causing unwanted updates.
5fill in blank
hard

Fill all three blanks to correctly use meta-arguments to create multiple resources from a map, specify a provider, and define dependencies.

Terraform
resource "aws_instance" "example" {
  [1] = var.instances
  provider    = aws.[2]
  [3] = [aws_security_group.sg]
  ami           = "ami-123456"
  instance_type = "t2.micro"
}
Drag options to blanks, or click blank then click option'
Afor_each
Bus-east-1
Cdepends_on
Dcount
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'count' instead of 'for_each' for maps.
Incorrect provider region name.
Omitting 'depends_on' causing resource creation order issues.

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