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
Output values after apply
📖 Scenario: You are setting up a simple cloud infrastructure using Terraform. After creating resources, you want to see important information like the resource ID and IP address once the deployment is done.
🎯 Goal: Create a Terraform configuration that defines a resource and outputs its ID and IP address after applying the configuration.
📋 What You'll Learn
Define a resource with a fixed name
Create output values for resource ID and IP address
Use exact variable and resource names as specified
Outputs must be visible after terraform apply
💡 Why This Matters
🌍 Real World
Cloud engineers often need to see resource details like IDs and IPs after deployment to connect or configure other services.
💼 Career
Knowing how to create and use outputs in Terraform is essential for infrastructure automation and collaboration in cloud roles.
Progress0 / 4 steps
1
Define a simple resource
Create a resource called aws_instance with the name example and set the ami to "ami-12345678" and instance_type to "t2.micro".
Terraform
Hint
Use the resource block with type aws_instance and name example. Set the ami and instance_type exactly as shown.
2
Add output for instance ID
Create an output called instance_id that outputs the id attribute of the aws_instance.example resource.
Terraform
Hint
Use an output block with the name instance_id. Set its value to aws_instance.example.id.
3
Add output for public IP
Create an output called public_ip that outputs the public_ip attribute of the aws_instance.example resource.
Terraform
Hint
Use an output block named public_ip and set its value to aws_instance.example.public_ip.
4
Add description to outputs
Add a description attribute to both instance_id and public_ip outputs. Use "The ID of the instance" for instance_id and "The public IP address of the instance" for public_ip.
Terraform
Hint
Add the description attribute inside each output block with the exact text given.
Practice
(1/5)
1. What is the main purpose of output values in a Terraform configuration?
easy
A. To create new cloud resources
B. To display important information after Terraform applies changes
C. To define variables used inside Terraform modules
D. To store Terraform state files remotely
Solution
Step 1: Understand the role of output values
Output values are used to show key information after Terraform finishes applying infrastructure changes.
Step 2: Differentiate outputs from other Terraform features
Variables define inputs, resources create infrastructure, and state files store deployment state. Outputs specifically display results.
Final Answer:
To display important information after Terraform applies changes -> Option B
Quick Check:
Outputs = display info after apply [OK]
Hint: Outputs show info after apply, not inputs or resources [OK]
Common Mistakes:
Confusing outputs with variables
Thinking outputs create resources
Mixing outputs with state storage
2. Which of the following is the correct syntax to define an output named instance_ip in Terraform?
easy
A. output "instance_ip" { value = aws_instance.example.private_ip }
B. output instance_ip = aws_instance.example.private_ip
C. output "instance_ip" = aws_instance.example.private_ip
D. output { instance_ip = aws_instance.example.private_ip }
Solution
Step 1: Recall Terraform output block syntax
Outputs use the block syntax: output "name" { value = ... }.
Step 2: Match syntax to options
output "instance_ip" { value = aws_instance.example.private_ip } matches the correct block syntax with quotes and value assignment.
Final Answer:
output "instance_ip" { value = aws_instance.example.private_ip } -> Option A
Quick Check:
Output block = output "name" { value = ... } [OK]
Hint: Outputs need block syntax with quotes and value key [OK]
Common Mistakes:
Missing quotes around output name
Using equals sign outside block
Incorrect block structure
3. Given this Terraform output block:
output "bucket_name" {
value = aws_s3_bucket.my_bucket.id
}
What will Terraform display after terraform apply if the bucket ID is my-bucket-123?
medium
A. "aws_s3_bucket.my_bucket.id"
B. "my-bucket-123"
C. bucket_name = "my-bucket-123"
D. No output will be shown
Solution
Step 1: Understand output display format
Terraform outputs show the output name followed by an equals sign and the value.
Step 2: Apply the known value
The value aws_s3_bucket.my_bucket.id is "my-bucket-123", so output shows: bucket_name = "my-bucket-123".
Final Answer:
bucket_name = "my-bucket-123" -> Option C
Quick Check:
Output format = name = value [OK]
Hint: Outputs show name = value after apply [OK]
Common Mistakes:
Expecting only the value without name
Confusing resource attribute with output text
Thinking outputs are hidden by default
4. You wrote this output block:
output "db_password" {
value = var.db_password
sensitive = true
}
After terraform apply, you still see the password printed in the console. What is the likely cause?
medium
A. You ran terraform output -raw db_password after apply
B. You must set sensitive = false to hide output
C. Terraform does not support sensitive outputs
D. The output block syntax is invalid
Solution
Step 1: Understand sensitive output behavior
Sensitive outputs hide values in the terraform apply console and standard terraform output. However, terraform output -raw <name> bypasses this and shows the value.
Step 2: Identify cause of exposure
The likely cause is running terraform output -raw db_password, which reveals sensitive values.
Final Answer:
You ran terraform output -raw db_password after apply -> Option A
Quick Check:
Sensitive hides output unless -raw [OK]
Hint: Sensitive hides output unless -raw used [OK]
Common Mistakes:
Thinking sensitive = false hides output
Believing Terraform can't mark outputs sensitive
Assuming syntax error causes exposure
5. You want to output a list of instance IPs from multiple AWS instances created with a count. Which output block correctly returns all private IPs after apply?