What is the purpose of the data block in Terraform?
The data block is used to query and read information about existing resources that are not managed by the current Terraform configuration.
Click to reveal answer
beginner
How do you reference an existing AWS VPC by its ID in Terraform?
You use a data block like this:
data "aws_vpc" "example" {
id = "vpc-12345678"
}
This lets you access its attributes in your configuration.
Click to reveal answer
intermediate
Why should you use data sources instead of hardcoding resource attributes?
Using data sources keeps your configuration flexible and up-to-date by dynamically fetching current resource details instead of relying on fixed values that may change.
Click to reveal answer
intermediate
What happens if the queried resource does not exist when using a Terraform data source?
Terraform will return an error during plan or apply because it cannot find the resource to read its attributes.
Click to reveal answer
beginner
Can you modify existing resources using Terraform data sources?
No, data sources only read information. To modify resources, you must use resource blocks managed by Terraform.
Click to reveal answer
What Terraform block is used to query existing resources?
Aoutput
Bresource
Cdata
Dvariable
✗ Incorrect
The data block is specifically designed to query existing resources.
Which of the following is TRUE about Terraform data sources?
AThey read information from existing resources.
BThey store variables.
CThey delete resources.
DThey can create new resources.
✗ Incorrect
Data sources only read information from existing resources; they do not create or delete resources.
If a data source references a non-existent resource, what will happen?
ATerraform will create the resource automatically.
BTerraform will ignore the missing resource.
CTerraform will skip the data source silently.
DTerraform will return an error during plan or apply.
✗ Incorrect
Terraform requires the resource to exist to read its data; otherwise, it errors out.
How do you access an attribute from a data source in Terraform?
Using data sources helps keep your configuration flexible and accurate by fetching current resource details.
Explain how Terraform data sources help you work with existing cloud resources.
Think about how you can read info without managing the resource.
You got /4 concepts.
Describe the difference between Terraform resource blocks and data blocks.
One manages, the other queries.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of a data block in Terraform?
easy
A. To create new cloud resources from scratch
B. To delete resources that are no longer needed
C. To query and use existing resources created outside the current configuration
D. To define variables for user input
Solution
Step 1: Understand the role of data blocks
data blocks in Terraform are used to look up or query existing resources that were created outside the current Terraform configuration or by other means.
Step 2: Differentiate from resource creation
Unlike resource blocks that create new infrastructure, data blocks only read information without making changes.
Final Answer:
To query and use existing resources created outside the current configuration -> Option C
Quick Check:
Data blocks read existing resources = B [OK]
Hint: Data blocks read existing resources, not create them [OK]
Common Mistakes:
Confusing data blocks with resource creation
Thinking data blocks delete resources
Using data blocks to define variables
2. Which of the following is the correct syntax to query an existing AWS VPC by its ID using a data block?
easy
A. data "aws_vpc" "example" { id = "vpc-123456" }
B. resource "aws_vpc" "example" { id = "vpc-123456" }
C. data "aws_vpc" "example" { vpc_id = "vpc-123456" }
D. data "aws_vpc" "example" { name = "vpc-123456" }
Solution
Step 1: Identify correct data block syntax
The correct syntax uses data followed by the provider resource type and a name, then inside the block the attribute id is used to specify the VPC ID.
Step 2: Check attribute correctness
The attribute to specify the VPC ID is id, not vpc_id or name.
Final Answer:
data "aws_vpc" "example" { id = "vpc-123456" } -> Option A
Quick Check:
Use id attribute in data block = A [OK]
Hint: Use 'id' attribute inside data block to query by resource ID [OK]
Common Mistakes:
Using resource block instead of data block
Using wrong attribute names like vpc_id
Confusing resource creation syntax with data query
3. Given this Terraform data block:
data "aws_subnet" "selected" {
filter {
name = "tag:Name"
values = ["public-subnet"]
}
}
What will data.aws_subnet.selected.id return?
medium
A. The ID of the subnet tagged with Name=public-subnet
B. A list of all subnet IDs in the AWS account
C. An error because filter is not allowed in data blocks
D. The name of the subnet instead of the ID
Solution
Step 1: Understand the filter block in data source
The filter block selects resources matching the tag Name=public-subnet.
Step 2: Identify the returned attribute
data.aws_subnet.selected.id returns the ID of the matched subnet, not a list or name.
Final Answer:
The ID of the subnet tagged with Name=public-subnet -> Option A
Quick Check:
Filter selects subnet by tag, id returns its ID = D [OK]
Hint: Filter selects resource; .id returns its ID [OK]
Common Mistakes:
Thinking filter returns multiple resources
Assuming .id returns name or list
Believing filter is invalid in data blocks
4. You wrote this data block to query an existing AWS security group:
data "aws_security_group" "example" {
name = "my-sg"
}
But Terraform returns an error: "Multiple security groups found with name 'my-sg'". What is the best fix?
medium
A. Remove the name attribute to query all security groups
B. Add a filter block with more specific criteria to narrow the search
C. Change data to resource to create a new security group
D. Rename the security group in AWS to have a unique name
Solution
Step 1: Understand the error cause
The error means multiple security groups share the same name, so Terraform cannot pick one.
Step 2: Narrow the query with filters
Adding a filter block with more attributes (like VPC ID) helps select exactly one security group.
Final Answer:
Add a filter block with more specific criteria to narrow the search -> Option B
Quick Check:
Use filters to avoid multiple matches = C [OK]
Hint: Use filters to narrow data queries when duplicates exist [OK]
Common Mistakes:
Switching to resource block instead of filtering
Removing name attribute causing ambiguous query
Changing AWS resource names unnecessarily
5. You want to use an existing AWS IAM role in your Terraform configuration, but only know its ARN. Which is the best way to query this role using a data block?
hard
A. Use data "aws_iam_role" "existing" { id = "my-role" }
B. Use data "aws_iam_role" "existing" { name = "my-role" } and ignore ARN
C. Use resource "aws_iam_role" "existing" { arn = "arn:aws:iam::123456789012:role/my-role" }
D. Use data "aws_iam_role" "existing" { arn = "arn:aws:iam::123456789012:role/my-role" }
Solution
Step 1: Identify correct attribute to query by ARN
The aws_iam_role data source supports querying by arn attribute to find the exact role.
Step 2: Avoid using resource block or wrong attributes
Using resource block tries to create a new role, which is incorrect. Using name may fail if multiple roles share the name. id is not a valid attribute here.
Final Answer:
Use data "aws_iam_role" "existing" { arn = "arn:aws:iam::123456789012:role/my-role" } -> Option D
Quick Check:
Query IAM role by ARN using data block = A [OK]
Hint: Query IAM role by ARN attribute in data block [OK]
Common Mistakes:
Using resource block instead of data block
Querying by name when ARN is known
Using invalid attribute 'id' for IAM role
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.