Bird
Raised Fist0
Terraformcloud~5 mins

Resource block syntax 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 block in Terraform?
A resource block defines a piece of infrastructure to create or manage, like a server or database. It tells Terraform what to build and how.
Click to reveal answer
beginner
What are the four main parts of a Terraform resource block?
1. The keyword resource
2. The resource type (like aws_instance)
3. The resource name (a unique label you choose)
4. The configuration inside curly braces defining properties
Click to reveal answer
beginner
Example:
resource "aws_instance" "web" {
ami = "ami-123456"
instance_type = "t2.micro"
}
What does this block do?
It tells Terraform to create an AWS server named "web" using the AMI with ID "ami-123456" and the instance type "t2.micro".
Click to reveal answer
beginner
Can you have multiple resource blocks of the same type in one Terraform file?
Yes! Each resource block must have a unique name within its type, so you can create many resources of the same type by giving each a different name.
Click to reveal answer
beginner
Why is it important to use meaningful names in resource blocks?
Meaningful names help you and others understand what each resource is for, making your infrastructure easier to manage and avoid confusion.
Click to reveal answer
What keyword starts a resource block in Terraform?
Aprovider
Bvariable
Cmodule
Dresource
In resource "aws_s3_bucket" "mybucket" {}, what is "mybucket"?
AResource type
BResource name
CProvider name
DVariable name
Which part of a resource block defines the cloud service or infrastructure type?
AProvider block
BResource name
CResource type
DOutput block
Can two resource blocks have the same resource name in the same Terraform file?
AOnly if they are different types
BYes, always
CNo, names must be unique
DOnly if they are in different folders
What symbol encloses the configuration settings inside a resource block?
ACurly braces {}
BSquare brackets []
CAngle brackets <>
DParentheses ()
Describe the structure of a Terraform resource block and its main components.
Think about how you tell Terraform what to create and how.
You got /4 concepts.
    Explain why unique and meaningful resource names are important in Terraform configurations.
    Imagine managing many servers with confusing labels.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the correct way to start a resource block in Terraform?
      easy
      A. resource "aws_instance" { example }
      B. resource aws_instance example { }
      C. resource "example" "aws_instance" { }
      D. resource "aws_instance" "example" { }

      Solution

      1. Step 1: Understand resource block syntax

        A resource block starts with the keyword resource, followed by the resource type in quotes, then the resource name in quotes.
      2. Step 2: Match the correct syntax

        resource "aws_instance" "example" { } correctly uses resource "aws_instance" "example" { }, which matches the required syntax.
      3. Final Answer:

        resource "aws_instance" "example" { } -> Option D
      4. Quick Check:

        Resource block syntax = resource "type" "name" { } [OK]
      Hint: Resource block always uses resource "type" "name" [OK]
      Common Mistakes:
      • Omitting quotes around type or name
      • Swapping type and name order
      • Using braces incorrectly
      2. Which of the following is a valid property assignment inside a Terraform resource block?
      easy
      A. instance_type = t2.micro
      B. instance_type => "t2.micro"
      C. instance_type = "t2.micro"
      D. instance_type: "t2.micro"

      Solution

      1. Step 1: Identify correct property syntax

        Terraform uses = to assign values, and string values must be in quotes.
      2. Step 2: Check each option

        instance_type = "t2.micro" uses instance_type = "t2.micro", which is correct. instance_type = t2.micro misses quotes, B and C use invalid assignment symbols.
      3. Final Answer:

        instance_type = "t2.micro" -> Option C
      4. Quick Check:

        Property assignment uses = and quotes for strings [OK]
      Hint: Use = and quotes for string values inside resource blocks [OK]
      Common Mistakes:
      • Forgetting quotes around string values
      • Using colon or arrow instead of =
      • Missing equal sign
      3. Given this resource block snippet, what will Terraform create?
      resource "aws_s3_bucket" "mybucket" {
        bucket = "my-unique-bucket-123"
        acl    = "private"
      }
      medium
      A. An S3 bucket named "mybucket" with public access
      B. An S3 bucket named "my-unique-bucket-123" with private access
      C. An S3 bucket named "aws_s3_bucket" with private access
      D. A storage container with default public access

      Solution

      1. Step 1: Identify resource type and name

        The resource type is aws_s3_bucket, and the resource name is mybucket. The bucket property sets the actual bucket name.
      2. Step 2: Understand properties

        The bucket property sets the bucket's real name to "my-unique-bucket-123". The acl is set to "private", meaning no public access.
      3. Final Answer:

        An S3 bucket named "my-unique-bucket-123" with private access -> Option B
      4. Quick Check:

        Bucket name = property value, ACL = private [OK]
      Hint: Bucket name is from bucket property, not resource name [OK]
      Common Mistakes:
      • Confusing resource name with actual bucket name
      • Assuming default ACL is public
      • Ignoring property values inside the block
      4. Identify the error in this Terraform resource block:
      resource "aws_instance" "web" {
        ami = "ami-123456"
        instance_type = t2.micro
      }
      medium
      A. Missing quotes around the instance_type value
      B. Resource block missing closing brace
      C. Incorrect resource type name
      D. Missing resource name

      Solution

      1. Step 1: Check property value syntax

        The instance_type property value t2.micro is missing quotes, which is required for string values.
      2. Step 2: Verify block structure

        The resource block has correct braces and resource type/name, so no errors there.
      3. Final Answer:

        Missing quotes around the instance_type value -> Option A
      4. Quick Check:

        String values must be quoted [OK]
      Hint: Always quote string values inside resource blocks [OK]
      Common Mistakes:
      • Forgetting quotes around string properties
      • Assuming braces are optional
      • Mixing resource type and name order
      5. You want to create two AWS EC2 instances with different names but the same AMI and instance type using resource blocks. Which is the best way to write this in Terraform?
      hard
      A.
      resource "aws_instance" "web1" {
        ami = "ami-abc123"
        instance_type = "t2.micro"
      }
      resource "aws_instance" "web2" {
        ami = "ami-abc123"
        instance_type = "t2.micro"
      }
      B.
      resource "aws_instance" "web" {
        count = 2
        ami = "ami-abc123"
        instance_type = "t2.micro"
      }
      C.
      resource "aws_instance" "web" {
        ami = "ami-abc123"
        instance_type = "t2.micro"
        name = ["web1", "web2"]
      }
      D.
      resource "aws_instance" "web" {
        ami = "ami-abc123"
        instance_type = "t2.micro"
        for_each = ["web1", "web2"]
      }

      Solution

      1. Step 1: Understand resource naming and duplication

        Each resource block must have a unique name.
        resource "aws_instance" "web1" {
          ami = "ami-abc123"
          instance_type = "t2.micro"
        }
        resource "aws_instance" "web2" {
          ami = "ami-abc123"
          instance_type = "t2.micro"
        }
        defines two separate resources with different names.
      2. Step 2: Evaluate other options

        resource "aws_instance" "web" {
          count = 2
          ami = "ami-abc123"
          instance_type = "t2.micro"
        }
        uses count but does not differentiate names.
        resource "aws_instance" "web" {
          ami = "ami-abc123"
          instance_type = "t2.micro"
          name = ["web1", "web2"]
        }
        tries to assign a list to name property, which is invalid.
        resource "aws_instance" "web" {
          ami = "ami-abc123"
          instance_type = "t2.micro"
          for_each = ["web1", "web2"]
        }
        uses for_each incorrectly without mapping names.
      3. Final Answer:

        Define two separate resource blocks with unique names -> Option A
      4. Quick Check:

        Unique resource names needed for multiple instances [OK]
      Hint: Use separate resource blocks with unique names for multiple instances [OK]
      Common Mistakes:
      • Using count without unique names
      • Assigning list to single property
      • Misusing for_each without proper keys