Bird
Raised Fist0
Terraformcloud~5 mins

Resource types and names in Terraform - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is a resource type in Terraform?
A resource type in Terraform defines what kind of cloud or infrastructure object you want to create or manage, like a virtual machine, storage bucket, or network.
Click to reveal answer
beginner
How do you name a resource in Terraform?
You give a resource a unique name within its type to identify it in your configuration. This name is used to refer to the resource in other parts of your code.
Click to reveal answer
beginner
Example: What does this mean? resource "aws_instance" "web" {}
It means you are defining a resource of type 'aws_instance' (a virtual machine on AWS) and naming it 'web' so you can manage it in your Terraform code.
Click to reveal answer
intermediate
Why must resource names be unique within the same type?
Because Terraform uses the resource name to track and manage the resource. If names are duplicated, Terraform cannot tell which resource you mean.
Click to reveal answer
intermediate
Can resource types be from different providers in the same Terraform configuration?
Yes, Terraform supports multiple providers, so you can define resources from different cloud providers or services in one configuration.
Click to reveal answer
In Terraform, what does the resource type specify?
AThe output format
BThe name of the resource
CThe version of Terraform
DThe kind of infrastructure object to create
What is the purpose of the resource name in Terraform?
ATo identify the resource uniquely within its type
BTo specify the cloud provider
CTo set the resource's IP address
DTo define the resource's size
Which of these is a valid Terraform resource declaration?
Aresource aws_s3_bucket mybucket {}
Bresource "aws_s3_bucket" "mybucket" {}
Cresource "mybucket" "aws_s3_bucket" {}
Dresource "aws_s3_bucket" {}
Can you use the same resource name for two resources of the same type in Terraform?
ANo, names must be unique within the same type
BOnly if they are in different files
CYes, it is allowed
DOnly if they use different providers
Is it possible to define resources from multiple cloud providers in one Terraform file?
ANo, only one provider per file
BOnly if using modules
CYes, Terraform supports multiple providers
DOnly if providers are the same company
Explain what resource types and resource names are in Terraform and why they are important.
Think about how Terraform knows what to create and how to track it.
You got /3 concepts.
    Describe the correct syntax for declaring a resource in Terraform and what each part means.
    Look at the example: resource "aws_instance" "web" {}
    You got /4 concepts.

      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