Bird
Raised Fist0
Terraformcloud~5 mins

Block syntax and structure 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 block in Terraform?
A block is a container in Terraform configuration that groups related settings together, like resources, variables, or providers.
Click to reveal answer
beginner
Name the three main parts of a Terraform block.
1. Block type (like resource or variable)
2. Block label(s) (like resource name)
3. Block body (the settings inside curly braces {}).
Click to reveal answer
beginner
How do you write a resource block for an AWS S3 bucket named 'mybucket'?
resource "aws_s3_bucket" "mybucket" { bucket = "mybucket" acl = "private" }
Click to reveal answer
intermediate
What is the purpose of labels in a Terraform block?
Labels identify the block uniquely within its type, like naming a resource so Terraform can track it.
Click to reveal answer
intermediate
Can blocks be nested inside other blocks in Terraform? Give an example.
Yes, for example, a resource block can contain nested blocks like 'lifecycle' or 'provisioner' to add extra settings.
Click to reveal answer
What symbol encloses the body of a Terraform block?
A<>
B[]
C()
D{}
Which part of a Terraform block uniquely identifies a resource?
ABlock label
BBlock type
CBlock body
DBlock comment
Which of these is NOT a valid Terraform block type?
Afunction
Bresource
Cvariable
Dprovider
How many labels can a resource block have at minimum?
AOne
BTwo
CZero
DThree
What is the correct order of parts in a Terraform block?
ABlock body, block type, labels
BLabels, block type, block body
CBlock type, labels, block body
DLabels, block body, block type
Describe the structure of a Terraform block and explain the role of each part.
Think about how Terraform groups settings and identifies resources.
You got /4 concepts.
    Explain how nested blocks work in Terraform and give an example of when you might use one.
    Consider extra settings inside a resource.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a block in Terraform configuration?
      easy
      A. To store secret values securely
      B. To write comments in the code
      C. To execute commands on the cloud provider
      D. To group related settings and resources together

      Solution

      1. Step 1: Understand Terraform block role

        Blocks in Terraform group related configuration settings and resources logically.
      2. Step 2: Differentiate from other uses

        Blocks are not for comments, commands, or secrets but for organizing configuration.
      3. Final Answer:

        To group related settings and resources together -> Option D
      4. Quick Check:

        Blocks = Group related settings [OK]
      Hint: Blocks group settings inside braces {} [OK]
      Common Mistakes:
      • Thinking blocks run commands
      • Confusing blocks with comments
      • Assuming blocks store secrets
      2. Which of the following is the correct syntax to start a Terraform block named resource with label aws_instance and name web?
      easy
      A. resource aws_instance web {
      B. resource "aws_instance" "web" {
      C. resource: aws_instance: web {
      D. resource(aws_instance, web) {

      Solution

      1. Step 1: Recall Terraform block syntax

        Terraform blocks start with block type, then labels in quotes, then braces.
      2. Step 2: Match correct syntax

        resource "aws_instance" "web" { uses quotes and braces correctly: resource "aws_instance" "web" {
      3. Final Answer:

        resource "aws_instance" "web" { -> Option B
      4. Quick Check:

        Block type + "label" + "name" + braces [OK]
      Hint: Use quotes around labels and braces to start block [OK]
      Common Mistakes:
      • Omitting quotes around labels
      • Using colons or commas instead of spaces
      • Using parentheses instead of braces
      3. Given this Terraform block snippet:
      resource "aws_s3_bucket" "mybucket" {
        bucket = "my-bucket-name"
        acl    = "private"
      }

      What does this block define?
      medium
      A. A provider configuration for AWS S3
      B. A variable named mybucket for S3 bucket name
      C. An AWS S3 bucket named mybucket with private access
      D. A local file named mybucket with private permissions

      Solution

      1. Step 1: Identify block type and labels

        The block is a resource of type aws_s3_bucket with name mybucket.
      2. Step 2: Understand block arguments

        Arguments set bucket name and access control list (acl) to private.
      3. Final Answer:

        An AWS S3 bucket named mybucket with private access -> Option C
      4. Quick Check:

        resource block creates AWS S3 bucket [OK]
      Hint: resource blocks define cloud resources with settings [OK]
      Common Mistakes:
      • Confusing resource with variable
      • Thinking acl is file permission
      • Assuming provider config instead of resource
      4. Which of the following Terraform blocks has a syntax error?
      medium
      A. resource "aws_instance" "web" ami = "ami-123456" instance_type = "t2.micro" }
      B. provider "aws" { region = "us-east-1" }
      C. variable "region" { default = "us-west-2" }
      D. output "instance_ip" { value = aws_instance.web.public_ip }

      Solution

      1. Step 1: Check block opening and braces

        resource "aws_instance" "web" ami = "ami-123456" instance_type = "t2.micro" } misses the opening brace '{' after the block header.
      2. Step 2: Confirm other blocks are correct

        Options B, C, and D have proper braces and syntax.
      3. Final Answer:

        Missing opening brace in resource block -> Option A
      4. Quick Check:

        Blocks need opening and closing braces [OK]
      Hint: Always check for matching braces after block header [OK]
      Common Mistakes:
      • Forgetting opening or closing braces
      • Misplacing block labels without quotes
      • Incorrect indentation causing confusion
      5. You want to create a Terraform configuration that defines a resource block for an AWS EC2 instance named app_server and inside it, add a nested tags block with key-value pairs. Which is the correct way to structure this?
      hard
      A. resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags = { Name = "AppServer" Environment = "Production" } }
      B. resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags { Name = "AppServer" Environment = "Production" } }
      C. resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags: { Name = "AppServer" Environment = "Production" } }
      D. resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags = [ Name = "AppServer", Environment = "Production" ] }

      Solution

      1. Step 1: Understand tags argument type

        In Terraform, tags are a map (key-value pairs) assigned with = and braces { }.
      2. Step 2: Identify correct syntax for nested map

        resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags = { Name = "AppServer" Environment = "Production" } } correctly uses tags = { ... } with key-value pairs inside.
      3. Step 3: Check other options

        resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags { Name = "AppServer" Environment = "Production" } } wrongly uses a nested block for tags (not supported). resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags: { Name = "AppServer" Environment = "Production" } } uses colon instead of =. resource "aws_instance" "app_server" { ami = "ami-abc123" instance_type = "t3.micro" tags = [ Name = "AppServer", Environment = "Production" ] } uses list syntax which is invalid for tags.
      4. Final Answer:

        Use tags = { ... } map syntax inside resource block -> Option A
      5. Quick Check:

        Tags = map with = and braces [OK]
      Hint: Use tags = { key = value } map syntax, not nested block [OK]
      Common Mistakes:
      • Using nested block instead of map for tags
      • Using colon instead of equals sign
      • Using list syntax for key-value pairs