Bird
Raised Fist0
Terraformcloud~5 mins

Splat expressions in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a splat expression in Terraform?
A splat expression lets you get a list of values from multiple resources or attributes easily, like collecting all names from a group of servers.
Click to reveal answer
beginner
How does the syntax resource_type.resource_name[*].attribute work in Terraform?
It collects the attribute from all instances of resource_name and returns a list of those values.
Click to reveal answer
beginner
Why use splat expressions instead of accessing each resource attribute individually?
Splat expressions save time and code by automatically gathering values from many resources without writing repetitive code.
Click to reveal answer
intermediate
What is the difference between resource[*].attribute and resource.attribute in Terraform?
resource[*].attribute returns a list of attributes from all resources, while resource.attribute accesses a single resource's attribute.
Click to reveal answer
intermediate
Can splat expressions be used with nested attributes in Terraform? Give an example.
Yes, for example aws_instance.example[*].tags["Name"] collects the 'Name' tag from all instances.
Click to reveal answer
What does the splat expression aws_instance.web[*].id return?
AA list of IDs for all aws_instance.web resources
BThe ID of the first aws_instance.web resource
CA single string with all IDs concatenated
DAn error because splat expressions are invalid
Which symbol is used in Terraform splat expressions to select all instances?
A*
B#
C@
D&
If you want to get a list of all public IPs from multiple instances, which expression is correct?
Aaws_instance.example.public_ip
Baws_instance.example[*].public_ip
Caws_instance.example[0].public_ip
Daws_instance.example.public_ip[*]
What type of value does a splat expression return in Terraform?
AMap
BString
CBoolean
DList
Can splat expressions be used with resources created using count or for_each?
AOnly with for_each, not with count
BNo, splat expressions only work with single resources
CYes, they work well to gather attributes from all instances
DOnly with count, not with for_each
Explain what a splat expression is in Terraform and how it helps when working with multiple resources.
Think about how you would get the same attribute from many servers without writing code for each one.
You got /4 concepts.
    Describe the syntax of a splat expression and give an example of how to get all instance IDs from a resource.
    Use the * symbol inside square brackets to select all instances.
    You got /3 concepts.

      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