Bird
Raised Fist0
Terraformcloud~10 mins

Resource types and names in Terraform - Step-by-Step Execution

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
Process Flow - Resource types and names
Start Terraform config
↓
Define resource block
↓
Specify resource type
↓
Assign resource name
↓
Add resource properties
↓
Terraform processes resource
↓
Resource created in cloud
Terraform config starts by defining a resource block with a type and a name, then properties, which Terraform uses to create the resource.
Execution Sample
Terraform
resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-unique-bucket-123"
  acl    = "private"
}
Defines an AWS S3 bucket resource with type 'aws_s3_bucket' and name 'my_bucket'.
Process Table
StepActionResource TypeResource NamePropertiesResult
1Read resource block startBegin parsing resource
2Identify resource typeaws_s3_bucketResource type set
3Identify resource nameaws_s3_bucketmy_bucketResource name set
4Read propertiesaws_s3_bucketmy_bucketbucket = "my-unique-bucket-123", acl = "private"Properties stored
5Terraform plans resourceaws_s3_bucketmy_bucketbucket = "my-unique-bucket-123", acl = "private"Plan created
6Terraform applies resourceaws_s3_bucketmy_bucketbucket = "my-unique-bucket-123", acl = "private"S3 bucket created in AWS
7End of resource blockResource creation complete
💡 Resource block fully processed and resource created in cloud provider.
Status Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
resource_typeaws_s3_bucketaws_s3_bucketaws_s3_bucketaws_s3_bucket
resource_namemy_bucketmy_bucketmy_bucket
properties
bucket: my-unique-bucket-123
acl: private
bucket: my-unique-bucket-123
acl: private
Key Moments - 2 Insights
Why do we need both a resource type and a resource name?
The resource type tells Terraform what kind of cloud resource to create (like an S3 bucket), and the resource name is a local label to refer to this resource in the Terraform code. See execution_table rows 2 and 3.
Can two resources have the same name?
No, resource names must be unique within the same type in a Terraform configuration to avoid confusion. This is shown by the single resource name 'my_bucket' in execution_table row 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the resource name after step 3?
Abucket
Baws_s3_bucket
Cmy_bucket
Dprivate
💡 Hint
Check the 'Resource Name' column in execution_table row 3.
At which step does Terraform apply the resource to the cloud?
AStep 4
BStep 6
CStep 5
DStep 7
💡 Hint
Look for the 'Result' column mentioning 'S3 bucket created in AWS' in execution_table.
If you change the resource name from 'my_bucket' to 'your_bucket', which variable changes in variable_tracker?
Aresource_name
Bresource_type
Cproperties
Dnone
💡 Hint
Check the 'resource_name' row in variable_tracker for changes.
Concept Snapshot
Terraform resource blocks define cloud resources.
Syntax: resource "resource_type" "resource_name" { properties }
Resource type specifies the cloud service.
Resource name is a local label.
Properties configure the resource.
Terraform uses these to create and manage cloud infrastructure.
Full Transcript
In Terraform, you define resources using blocks that start with the keyword 'resource'. Each resource block requires a resource type, which tells Terraform what kind of cloud resource to create, such as an AWS S3 bucket. Next, you assign a resource name, which is a local identifier used within your Terraform code to refer to that resource. Inside the block, you specify properties that configure the resource, like the bucket name and access control list for an S3 bucket. Terraform reads these definitions step-by-step: it first identifies the resource type, then the resource name, then reads the properties. After parsing, Terraform plans the resource creation and then applies it, creating the actual resource in the cloud. Resource names must be unique within the same type to avoid confusion. This process ensures your infrastructure is defined clearly and managed effectively.

Practice

(1/5)
1. What does the resource block in Terraform define?
easy
A. A provider configuration
B. A variable to store user input
C. A cloud service to create and manage
D. A function to run code

Solution

  1. Step 1: Understand Terraform resource block purpose

    The resource block tells Terraform what cloud service to create and manage.
  2. Step 2: Differentiate from other blocks

    Variables store input, functions run code, and providers configure cloud access, but resources define actual services.
  3. Final Answer:

    A cloud service to create and manage -> Option C
  4. Quick Check:

    Resource block = cloud service definition [OK]
Hint: Resource blocks create services, not variables or functions [OK]
Common Mistakes:
  • Confusing resource with variable or provider blocks
  • Thinking resource defines code logic
  • Mixing resource with output blocks
2. Which of the following is the correct syntax to declare an AWS S3 bucket resource named my_bucket in Terraform?
easy
A. resource aws_s3_bucket "my_bucket" {}
B. resource aws_s3_bucket my_bucket {}
C. resource "aws_s3_bucket" my_bucket {}
D. resource "aws_s3_bucket" "my_bucket" {}

Solution

  1. Step 1: Recall Terraform resource syntax

    Terraform resource syntax requires resource type and name as strings inside quotes: resource "type" "name" {}
  2. Step 2: Match correct option

    Only resource "aws_s3_bucket" "my_bucket" {} uses quotes correctly around both type and name.
  3. Final Answer:

    resource "aws_s3_bucket" "my_bucket" {} -> Option D
  4. Quick Check:

    Resource type and name must be quoted [OK]
Hint: Always quote resource type and name in Terraform [OK]
Common Mistakes:
  • Omitting quotes around type or name
  • Using quotes inconsistently
  • Swapping order of type and name
3. Given this Terraform code snippet:
resource "aws_instance" "web" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

What is the resource type and name?
medium
A. Type: aws_instance, Name: web
B. Type: web, Name: aws_instance
C. Type: ami-123456, Name: t2.micro
D. Type: aws_instance, Name: ami-123456

Solution

  1. Step 1: Identify resource type and name in block

    The first quoted string after resource is the type: "aws_instance". The second is the name: "web".
  2. Step 2: Confirm values are correct

    AMI and instance_type are attributes, not resource type or name.
  3. Final Answer:

    Type: aws_instance, Name: web -> Option A
  4. Quick Check:

    Resource type and name = aws_instance, web [OK]
Hint: First quoted string = type, second = name [OK]
Common Mistakes:
  • Confusing attributes with resource type or name
  • Swapping type and name
  • Using attribute values as names
4. What is wrong with this Terraform resource declaration?
resource "aws_s3_bucket" my_bucket {
  bucket = "my-bucket-name"
}
medium
A. Resource name is not quoted
B. Resource type is missing
C. Bucket attribute is invalid
D. Missing provider block

Solution

  1. Step 1: Check resource declaration syntax

    Terraform requires both resource type and name to be quoted strings.
  2. Step 2: Identify the error

    The resource name my_bucket is not quoted, causing a syntax error.
  3. Final Answer:

    Resource name is not quoted -> Option A
  4. Quick Check:

    Resource names must be quoted strings [OK]
Hint: Always quote resource names to avoid syntax errors [OK]
Common Mistakes:
  • Forgetting quotes around resource names
  • Assuming attributes cause errors
  • Thinking provider block is mandatory here
5. You want to create two AWS EC2 instances with different names but the same type in Terraform. Which is the best way to name the resources?
hard
A. resource "aws_instance" "aws_instance" {} and resource "aws_instance" "aws_instance" {}
B. resource "aws_instance" "app1" {} and resource "aws_instance" "app2" {}
C. resource "aws_instance" "1" {} and resource "aws_instance" "2" {}
D. resource "aws_instance" "instance" {} and resource "aws_instance" "instance" {}

Solution

  1. Step 1: Understand resource naming rules

    Resource names must be unique within the same type to avoid conflicts.
  2. Step 2: Evaluate naming options

    resource "aws_instance" "app1" {} and resource "aws_instance" "app2" {} uses unique, descriptive names app1 and app2. Choices that reuse the same name cause errors. The choice using numeric names is valid but less descriptive.
  3. Final Answer:

    resource "aws_instance" "app1" {} and resource "aws_instance" "app2" {} -> Option B
  4. Quick Check:

    Unique descriptive names prevent conflicts [OK]
Hint: Use unique, clear names for each resource [OK]
Common Mistakes:
  • Using duplicate resource names
  • Using unclear or numeric-only names
  • Ignoring naming uniqueness rules