Bird
Raised Fist0
Terraformcloud~5 mins

Output declaration syntax in Terraform - Commands & Configuration

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
Introduction
When you create infrastructure with Terraform, you often want to see important information after it finishes. Output declarations let you show useful details like IP addresses or resource IDs automatically.
When you want to see the public IP address of a server you just created.
When you need to pass resource IDs from one Terraform module to another.
When you want to confirm the name of a created storage bucket after deployment.
When you want to display connection details for a database instance.
When you want to share outputs with your team without looking into the cloud console.
Config File - main.tf
main.tf
terraform {
  required_version = ">= 1.0"
}

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

output "instance_id" {
  description = "The ID of the AWS EC2 instance"
  value       = aws_instance.example.id
}

output "instance_public_ip" {
  description = "The public IP address of the instance"
  value       = aws_instance.example.public_ip
}

This Terraform file creates a small AWS EC2 instance.

The output blocks declare values to show after deployment:

  • instance_id shows the unique ID of the instance.
  • instance_public_ip shows the public IP address assigned.

The description helps explain what each output means.

Commands
This command sets up Terraform in the current folder by downloading necessary plugins and preparing the environment.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/aws... - Installing hashicorp/aws v4.0.0... - Installed hashicorp/aws v4.0.0 (signed by HashiCorp) Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure.
This command creates the infrastructure defined in the configuration without asking for confirmation. It will also show the output values declared.
Terminal
terraform apply -auto-approve
Expected OutputExpected
aws_instance.example: Creating... aws_instance.example: Still creating... [10s elapsed] aws_instance.example: Creation complete after 15s [id=i-0abcd1234efgh5678] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: instance_id = "i-0abcd1234efgh5678" instance_public_ip = "54.210.123.45"
→
-auto-approve - Skip manual approval prompt to apply changes immediately
This command shows only the public IP address output value after deployment.
Terminal
terraform output instance_public_ip
Expected OutputExpected
54.210.123.45
Key Concept

If you remember nothing else from this pattern, remember: output declarations let you see and share important information about your created infrastructure automatically.

Common Mistakes
Not declaring an output block for a value you want to see after apply
Terraform will create the resource but won't show the value automatically, making it hard to find important info.
Always add an output block with a clear value expression for any key info you want to see.
Using incorrect resource references inside the output value
Terraform will fail to apply or show errors because it can't find the resource attribute.
Use the exact resource name and attribute as defined in your configuration, like aws_instance.example.id.
Expecting outputs to update automatically without reapplying
Outputs only refresh after terraform apply or terraform refresh commands.
Run terraform apply or terraform output commands again to see updated output values.
Summary
Use terraform init to prepare your working folder and download providers.
Define output blocks in your Terraform files to declare values you want to see after deployment.
Run terraform apply to create resources and automatically display output values.
Use terraform output to view specific output values anytime after deployment.

Practice

(1/5)
1. What is the purpose of an output block in a Terraform configuration?
easy
A. To display useful information after Terraform applies changes
B. To define variables for input values
C. To create resources in the cloud
D. To delete resources automatically

Solution

  1. Step 1: Understand Terraform output blocks

    Output blocks are used to show important information after Terraform finishes applying infrastructure changes.
  2. Step 2: Differentiate from other blocks

    Variables define inputs, resources create cloud items, and outputs only display results.
  3. Final Answer:

    To display useful information after Terraform applies changes -> Option A
  4. Quick Check:

    Output block = display info [OK]
Hint: Outputs show info after apply, not inputs or resource creation [OK]
Common Mistakes:
  • Confusing outputs with variables
  • Thinking outputs create resources
  • Assuming outputs delete resources
2. Which of the following is the correct syntax to declare an output named instance_ip with value aws_instance.web.private_ip?
easy
A. output "instance_ip" { value = aws_instance.web.private_ip }
B. output instance_ip = aws_instance.web.private_ip
C. output "instance_ip" : aws_instance.web.private_ip
D. output instance_ip { value: aws_instance.web.private_ip }

Solution

  1. Step 1: Recall Terraform output block syntax

    The correct syntax uses the keyword output, a quoted name, and a block with value assignment using =.
  2. Step 2: Check each option

    output "instance_ip" { value = aws_instance.web.private_ip } matches the correct syntax exactly. Others use invalid assignment or missing quotes.
  3. Final Answer:

    output "instance_ip" { value = aws_instance.web.private_ip } -> Option A
  4. Quick Check:

    Output syntax = output "name" { value = ... } [OK]
Hint: Output name must be quoted and value assigned with = inside braces [OK]
Common Mistakes:
  • Omitting quotes around output name
  • Using = outside braces
  • Using colon instead of =
3. Given this output block:
output "db_password" {
  value     = var.db_password
  sensitive = true
}

What will Terraform do when you run terraform apply?
medium
A. Cause a syntax error because sensitive is not allowed
B. Show the db_password value in the output after apply
C. Hide the db_password value in the output to keep it secret
D. Ignore the output block completely

Solution

  1. Step 1: Understand the sensitive attribute

    Setting sensitive = true tells Terraform to hide the output value from the terminal to protect secrets.
  2. Step 2: Predict Terraform behavior on apply

    Terraform will not display the actual value but will note that a sensitive output exists.
  3. Final Answer:

    Hide the db_password value in the output to keep it secret -> Option C
  4. Quick Check:

    sensitive = true hides output value [OK]
Hint: Sensitive outputs hide values after apply to protect secrets [OK]
Common Mistakes:
  • Expecting sensitive outputs to show values
  • Thinking sensitive causes errors
  • Assuming outputs are ignored
4. Identify the error in this output block:
output "server_port" {
  value = 8080
  sensitive = "false"
}
medium
A. The value 8080 must be a string, not a number
B. The sensitive attribute should be a boolean, not a string
C. Output names cannot be quoted
D. Missing a comma after the value line

Solution

  1. Step 1: Check attribute types in output block

    The sensitive attribute expects a boolean (true or false), not a string in quotes.
  2. Step 2: Validate other parts

    Value can be a number without quotes, output names must be quoted, and commas are not used between lines in HCL.
  3. Final Answer:

    The sensitive attribute should be a boolean, not a string -> Option B
  4. Quick Check:

    sensitive = true/false boolean, not "false" string [OK]
Hint: Boolean attributes must not be quoted strings [OK]
Common Mistakes:
  • Using quotes around boolean values
  • Thinking output names are unquoted
  • Adding commas between lines
5. You want to output a list of public IPs from multiple AWS instances stored in aws_instance.web list. Which output block correctly returns their public IPs?
hard
A. output "public_ips" { value = for i in aws_instance.web { i.public_ip } }
B. output "public_ips" { value = aws_instance.web.public_ip }
C. output "public_ips" { value = aws_instance.web.public_ip[*] }
D. output "public_ips" { value = [for i in aws_instance.web : i.public_ip] }

Solution

  1. Step 1: Understand how to extract values from a list of resources

    Terraform uses for-expressions inside output value to map over lists and extract attributes.
  2. Step 2: Evaluate each option

    output "public_ips" { value = [for i in aws_instance.web : i.public_ip] } uses correct for-expression syntax. output "public_ips" { value = aws_instance.web.public_ip } tries direct attribute access on list (invalid). output "public_ips" { value = aws_instance.web.public_ip[*] } uses incorrect splat syntax. output "public_ips" { value = for i in aws_instance.web { i.public_ip } } has invalid block syntax.
  3. Final Answer:

    output "public_ips" { value = [for i in aws_instance.web : i.public_ip] } -> Option D
  4. Quick Check:

    Use for-expressions to map list attributes [OK]
Hint: Use for-expressions with [for x in list : x.attr] to extract lists [OK]
Common Mistakes:
  • Trying to access attribute directly on list
  • Using invalid syntax for list comprehension
  • Confusing for-expression with block syntax