Bird
Raised Fist0
Terraformcloud~10 mins

Splat expressions in Terraform - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to get all instance IDs from the aws_instance resource.

Terraform
output "instance_ids" {
  value = aws_instance.example[1].id
}
Drag options to blanks, or click blank then click option'
A[*]
B.*
C[.]
D[+]
Attempts:
3 left
💡 Hint
Common Mistakes
Using dot (.) instead of [*] for splat expression
Using incorrect brackets like [.] or [+]
2fill in blank
medium

Complete the code to get all private IP addresses from multiple aws_instance resources.

Terraform
output "private_ips" {
  value = aws_instance.web[1].private_ip
}
Drag options to blanks, or click blank then click option'
A.*
B[*]
C[]
D[.]
Attempts:
3 left
💡 Hint
Common Mistakes
Using dot-star (.*) which is invalid in Terraform
Using empty brackets [] without asterisk
3fill in blank
hard

Fix the error in the splat expression to correctly get all subnet IDs.

Terraform
output "subnet_ids" {
  value = aws_subnet.example[1].id
}
Drag options to blanks, or click blank then click option'
A[*]
B.*
C.[]
D[.]
Attempts:
3 left
💡 Hint
Common Mistakes
Using dot-star (.*) which is not valid in Terraform
Using dot with brackets like .[] or [.]
4fill in blank
hard

Fill both blanks to create a list of all security group names from aws_security_group resources.

Terraform
output "sg_names" {
  value = aws_security_group.[1][2].name
}
Drag options to blanks, or click blank then click option'
Aweb
Bdb
C[*]
D.*
Attempts:
3 left
💡 Hint
Common Mistakes
Using dot-star (.*) instead of [*]
Using wrong resource name like db instead of web
5fill in blank
hard

Fill all three blanks to output a list of all tags 'Name' values from aws_instance resources.

Terraform
output "instance_names" {
  value = aws_instance.[1][2].tags[3]
}
Drag options to blanks, or click blank then click option'
Aapp
B[*]
C["Name"]
D.*
Attempts:
3 left
💡 Hint
Common Mistakes
Using dot-star (.*) instead of [*]
Accessing tags.Name instead of tags["Name"]
Using wrong resource name like web instead of app

Practice

(1/5)
1.

What does a splat expression in Terraform do?

Example: aws_instance.example[*].id

easy
A. Collects the id attribute from all aws_instance.example resources into a list
B. Creates a new resource named id for each instance
C. Deletes all aws_instance.example resources
D. Filters instances with id equal to example

Solution

  1. Step 1: Understand the splat operator *

    The * means 'all items' in the list of resources.
  2. Step 2: Collect attribute values

    The expression aws_instance.example[*].id collects the id attribute from every instance in aws_instance.example.
  3. Final Answer:

    Collects the id attribute from all aws_instance.example resources into a list -> Option A
  4. Quick Check:

    Splat expression collects attributes [OK]
Hint: Remember: * means all items, collect their attributes [OK]
Common Mistakes:
  • Thinking splat creates or deletes resources
  • Confusing splat with filtering
  • Assuming splat returns a single value
2.

Which of the following is the correct syntax for a splat expression to get all name attributes from a resource list aws_s3_bucket.buckets?

easy
A. aws_s3_bucket.buckets[*].name
B. aws_s3_bucket.buckets.name[*]
C. aws_s3_bucket.buckets[].name
D. aws_s3_bucket.buckets.name

Solution

  1. Step 1: Identify splat operator position

    The splat operator * must come immediately after the resource list name inside square brackets.
  2. Step 2: Confirm attribute access

    The correct syntax is resource_list[*].attribute, so aws_s3_bucket.buckets[*].name is correct.
  3. Final Answer:

    aws_s3_bucket.buckets[*].name -> Option A
  4. Quick Check:

    Splat syntax = resource_list[*].attribute [OK]
Hint: Put * inside brackets right after resource list name [OK]
Common Mistakes:
  • Placing * after attribute name
  • Using [] without * inside
  • Omitting brackets for splat
3.

Given the Terraform code snippet:

resource "aws_instance" "web" {
  count = 3
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

output "instance_ids" {
  value = aws_instance.web[*].id
}

What will be the output of instance_ids after deployment?

medium
A. A list of 0 elements because no instances are created
B. A list of 3 instance IDs, one for each created instance
C. An error because splat cannot be used with count
D. A single instance ID of the first instance

Solution

  1. Step 1: Understand resource count creates multiple instances

    The count = 3 creates 3 instances named aws_instance.web[0], aws_instance.web[1], and aws_instance.web[2].
  2. Step 2: Splat expression collects all instance IDs

    The expression aws_instance.web[*].id collects the id attribute from all 3 instances into a list.
  3. Final Answer:

    A list of 3 instance IDs, one for each created instance -> Option B
  4. Quick Check:

    count 3 + splat = list of 3 IDs [OK]
Hint: count creates multiple; splat collects all attributes [OK]
Common Mistakes:
  • Thinking splat fails with count
  • Expecting single ID instead of list
  • Assuming no instances created
4.

Identify the error in this Terraform snippet using splat expressions:

output "bucket_names" {
  value = aws_s3_bucket.buckets.name[*]
}
medium
A. Output blocks cannot use splat expressions
B. The resource name aws_s3_bucket.buckets is invalid
C. Missing quotes around the attribute name
D. The splat operator * is incorrectly placed after the attribute name

Solution

  1. Step 1: Check splat operator position

    The splat operator * must be inside brackets immediately after the resource list, not after the attribute.
  2. Step 2: Correct syntax

    The correct syntax is aws_s3_bucket.buckets[*].name, not aws_s3_bucket.buckets.name[*].
  3. Final Answer:

    The splat operator * is incorrectly placed after the attribute name -> Option D
  4. Quick Check:

    Splat must be after resource list, not attribute [OK]
Hint: Put * right after resource list in brackets, not after attribute [OK]
Common Mistakes:
  • Placing * after attribute name
  • Confusing resource and attribute order
  • Thinking output blocks disallow splat
5.

You have a list of AWS EC2 instances created with count = 4. You want to output a list of their public IPs but only for instances that have a tag Environment set to production. Which Terraform expression correctly uses splat and filtering?

hard
A. aws_instance.web[*].public_ip
B. aws_instance.web[*].tags.Environment == "production" ? aws_instance.web[*].public_ip : []
C. [for i in aws_instance.web : i.public_ip if i.tags.Environment == "production"]
D. aws_instance.web[?tags.Environment=="production"].public_ip

Solution

  1. Step 1: Understand splat collects all attributes without filtering

    The expression aws_instance.web[*].public_ip collects all public IPs, no filtering.
  2. Step 2: Use for-expression with condition for filtering

    The correct way to filter is using a for-expression with an if condition: [for i in aws_instance.web : i.public_ip if i.tags.Environment == "production"].
  3. Final Answer:

    [for i in aws_instance.web : i.public_ip if i.tags.Environment == "production"] -> Option C
  4. Quick Check:

    Filter with for-expression + if, not splat alone [OK]
Hint: Use for-expression with if to filter, splat alone can't filter [OK]
Common Mistakes:
  • Using splat without filtering
  • Trying to filter inside splat syntax
  • Using invalid filter syntax
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