Bird
Raised Fist0
Terraformcloud~5 mins

Data source vs resource difference in Terraform - Quick Revision & Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What is a resource in Terraform?
A resource is an infrastructure object that Terraform creates, updates, or deletes. It represents real cloud services like servers, databases, or networks.
Click to reveal answer
beginner
What is a data source in Terraform?
A data source lets Terraform read or fetch information from existing infrastructure or external sources without changing them.
Click to reveal answer
beginner
How does a resource differ from a data source in Terraform?
Resources create or manage infrastructure, while data sources only read existing information without making changes.
Click to reveal answer
intermediate
Why use a data source instead of a resource?
Use a data source to get details about existing infrastructure you did not create or want to keep unchanged.
Click to reveal answer
intermediate
Give an example of when to use a resource vs a data source.
Use a resource to create a new virtual machine. Use a data source to get the IP address of an existing database.
Click to reveal answer
What does a Terraform resource do?
ARuns Terraform commands
BOnly reads existing infrastructure
CCreates or manages infrastructure
DDeletes data sources
What is the main purpose of a Terraform data source?
ATo read existing infrastructure information
BTo create new cloud resources
CTo delete resources
DTo run scripts
Which Terraform block would you use to get the IP of an existing server?
Aresource
Bdata
Cvariable
Doutput
If you want to create a new database, which Terraform block do you use?
Aresource
Bdata
Coutput
Dprovider
Can a data source modify infrastructure?
AYes, it can update resources
BYes, it can create resources
CYes, it can delete resources
DNo, it only reads data
Explain the difference between a Terraform resource and a data source.
Think about who controls the infrastructure changes.
You got /4 concepts.
    When would you choose to use a data source instead of a resource in Terraform?
    Consider scenarios where infrastructure is already set up.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main difference between a resource and a data source in Terraform?
      easy
      A. Resources and data sources both create infrastructure but in different clouds.
      B. Resources create or manage infrastructure; data sources only read existing information.
      C. Resources only read existing infrastructure; data sources create new infrastructure.
      D. Resources are temporary; data sources are permanent.

      Solution

      1. Step 1: Understand resource role

        Resources in Terraform are used to create or manage cloud infrastructure components.
      2. Step 2: Understand data source role

        Data sources are used to read information about existing infrastructure without changing it.
      3. Final Answer:

        Resources create or manage infrastructure; data sources only read existing information. -> Option B
      4. Quick Check:

        Resource = create/manage, Data source = read [OK]
      Hint: Resources build; data sources just look up info [OK]
      Common Mistakes:
      • Thinking data sources create resources
      • Confusing resource and data source roles
      • Assuming both modify infrastructure
      • Believing data sources are temporary
      2. Which of the following is the correct syntax to declare a data source in Terraform?
      easy
      A. data "aws_ami" "example" {}
      B. resource "aws_instance" "example" {}
      C. source "aws_vpc" "example" {}
      D. resource "data_aws_subnet" "example" {}

      Solution

      1. Step 1: Identify data source syntax

        Data sources use the keyword data followed by the type and name.
      2. Step 2: Check options

        data "aws_ami" "example" {} uses data "aws_ami" "example" {}, which is correct syntax for a data source.
      3. Final Answer:

        data "aws_ami" "example" {} -> Option A
      4. Quick Check:

        Data source starts with 'data' keyword [OK]
      Hint: Data sources start with 'data' keyword [OK]
      Common Mistakes:
      • Using 'resource' keyword for data sources
      • Mixing 'source' keyword which doesn't exist
      • Prefixing resource with 'data_' incorrectly
      • Confusing resource and data source syntax
      3. Given this Terraform snippet:
      data "aws_vpc" "selected" {
        filter {
          name   = "tag:Name"
          values = ["main-vpc"]
        }
      }
      
      resource "aws_subnet" "example" {
        vpc_id     = data.aws_vpc.selected.id
        cidr_block = "10.0.1.0/24"
      }

      What does the data.aws_vpc.selected.id represent?
      medium
      A. The ID of an existing VPC filtered by tag "Name=main-vpc".
      B. The ID of a subnet created inside the VPC.
      C. A random VPC ID generated by Terraform.
      D. The ID of a new VPC created by Terraform.

      Solution

      1. Step 1: Analyze data source usage

        The data "aws_vpc" "selected" block reads an existing VPC filtered by the tag "Name=main-vpc".
      2. Step 2: Understand reference in resource

        The resource aws_subnet.example uses data.aws_vpc.selected.id to get the ID of that existing VPC to create a subnet inside it.
      3. Final Answer:

        The ID of an existing VPC filtered by tag "Name=main-vpc". -> Option A
      4. Quick Check:

        Data source reads existing VPC ID [OK]
      Hint: Data source reads existing resource info [OK]
      Common Mistakes:
      • Thinking data source creates new VPC
      • Confusing subnet ID with VPC ID
      • Assuming random ID generation
      • Using resource instead of data source for existing info
      4. You wrote this Terraform code but get an error:
      resource "aws_vpc" "main" {
        cidr_block = "10.0.0.0/16"
      }
      
      data "aws_vpc" "main" {
        id = aws_vpc.main.id
      }

      What is the problem?
      medium
      A. The data source block is missing a filter instead of id.
      B. Data sources cannot reference resources in the same configuration.
      C. You cannot use the same name for resource and data source.
      D. The resource block is missing a provider configuration.

      Solution

      1. Step 1: Check naming conflict

        The resource and data source both use the name "main" which causes a naming conflict in Terraform.
      2. Step 2: Terraform rules

        Terraform does not allow a resource and a data source to share the same type and name within the same module.
      3. Final Answer:

        You cannot use the same name for resource and data source. -> Option C
      4. Quick Check:

        Resource and data source names must be unique [OK]
      Hint: Resource and data source names must differ [OK]
      Common Mistakes:
      • Thinking same names cause conflicts
      • Believing you always need filters over id
      • Assuming data sources can depend on resources
      • Blaming missing provider config
      5. You want to create a subnet in an existing VPC without recreating the VPC. Which Terraform approach is best?
      hard
      A. Use a resource block for the VPC and a resource block for the subnet.
      B. Use a resource block for the subnet and ignore the VPC.
      C. Use a data source block for both VPC and subnet.
      D. Use a data source block to read the existing VPC and a resource block to create the subnet.

      Solution

      1. Step 1: Identify existing infrastructure

        The VPC already exists, so it should not be recreated or managed as a resource.
      2. Step 2: Use data source for existing VPC

        Use a data source block to safely read the existing VPC's details without changing it.
      3. Step 3: Create subnet resource

        Create a resource block for the subnet to add new infrastructure inside the existing VPC.
      4. Final Answer:

        Use a data source block to read the existing VPC and a resource block to create the subnet. -> Option D
      5. Quick Check:

        Data source reads existing; resource creates new [OK]
      Hint: Read existing with data source; create new with resource [OK]
      Common Mistakes:
      • Trying to recreate existing VPC as resource
      • Using data source to create subnet (not possible)
      • Ignoring existing VPC and creating subnet without VPC ID
      • Using resource for both causing conflicts
      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