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
Why outputs expose useful information
📖 Scenario: You are setting up a simple cloud infrastructure using Terraform. You want to create a virtual machine and then expose its IP address as an output. This output will help you easily find the IP address after deployment without searching through the cloud console.
🎯 Goal: Create a Terraform configuration that defines a virtual machine resource and exposes its public IP address using an output variable.
📋 What You'll Learn
Create a resource block for a virtual machine named example_vm.
Define an output variable named vm_ip that exposes the public IP address of example_vm.
💡 Why This Matters
🌍 Real World
Outputs help you quickly find important details like IP addresses after deploying cloud resources, saving time and effort.
💼 Career
Knowing how to expose useful information with outputs is essential for cloud engineers to manage and share infrastructure details effectively.
Progress0 / 4 steps
1
Create a virtual machine resource
Create a resource block named example_vm of type aws_instance with the ami set to "ami-0c55b159cbfafe1f0" and instance_type set to "t2.micro".
Terraform
Hint
Use the resource keyword to define the virtual machine with the exact name and properties.
2
Add a configuration variable for the output
Create an output block named vm_ip but leave the value empty for now.
Terraform
Hint
Use the output keyword and give it the name vm_ip. Set value to an empty string for now.
3
Set the output value to the VM's public IP
Set the value of the output vm_ip to the public IP address of the example_vm resource using aws_instance.example_vm.public_ip.
Terraform
Hint
Use the resource reference aws_instance.example_vm.public_ip to get the public IP address.
4
Add a description to the output
Add a description to the output vm_ip with the text "The public IP address of the example VM".
Terraform
Hint
Add the description attribute inside the output block with the exact text.
Practice
(1/5)
1. What is the main purpose of Terraform outputs?
easy
A. To display important information about deployed resources
B. To delete resources automatically
C. To write logs to a file
D. To encrypt all resource data
Solution
Step 1: Understand Terraform outputs role
Outputs are designed to show key details like IP addresses or IDs after deployment.
Step 2: Compare with other options
Deleting resources, logging, or encrypting are not functions of outputs.
Final Answer:
To display important information about deployed resources -> Option A
Quick Check:
Outputs show info = A [OK]
Hint: Outputs reveal resource info after deployment [OK]
Common Mistakes:
Thinking outputs delete resources
Confusing outputs with logging
Assuming outputs encrypt data
2. Which of the following is the correct syntax to define an output named instance_ip in Terraform?
easy
A. output instance_ip = aws_instance.example.private_ip
B. output instance_ip { value: aws_instance.example.private_ip }
C. output "instance_ip" = aws_instance.example.private_ip
D. output "instance_ip" { value = aws_instance.example.private_ip }
Solution
Step 1: Recall Terraform output block syntax
Outputs use the block format: output "name" { value = ... }
Step 2: Check each option
output "instance_ip" { value = aws_instance.example.private_ip } matches correct syntax; others misuse assignment or block format.
Final Answer:
output "instance_ip" { value = aws_instance.example.private_ip } -> Option D
Quick Check:
Correct output block syntax = B [OK]
Hint: Use output "name" { value = ... } format [OK]
Common Mistakes:
Using equals sign outside block
Missing quotes around output name
Using colon instead of equals
3. Given this output block:
output "db_password" {
value = aws_db_instance.main.password
sensitive = true
}
What will happen when you run terraform apply?
medium
A. The password will be hidden and not shown in the output
B. Terraform will throw a syntax error
C. The password will be shown in the output after apply
D. The password will be printed in plain text in logs
Solution
Step 1: Understand the sensitive flag effect
Setting sensitive = true hides the output value from the CLI after apply.
Step 2: Analyze options
The password will be hidden and not shown in the output correctly states the password is hidden; others are incorrect or unsafe.
Final Answer:
The password will be hidden and not shown in the output -> Option A
Quick Check:
sensitive = true hides output = C [OK]
Hint: Use sensitive = true to hide outputs [OK]
Common Mistakes:
Assuming sensitive outputs always show
Confusing syntax with errors
Thinking sensitive outputs print in logs
4. You wrote this output block:
output "web_url" {
value = aws_instance.web.public_ip
sensitive = false
}
After running terraform apply, you see no output displayed. What is the likely cause?
medium
A. Terraform outputs never show IP addresses
B. The sensitive flag hides the output even if false
C. The resource aws_instance.web does not exist or is misspelled
D. Outputs must be declared in a separate file
Solution
Step 1: Check resource reference correctness
If the resource name is wrong or missing, output has no value to show.
Step 2: Evaluate other options
Sensitive = false means output shows; outputs can be in any file; IPs do show.
Final Answer:
The resource aws_instance.web does not exist or is misspelled -> Option C
Quick Check:
Wrong resource name = no output = D [OK]
Hint: Check resource names carefully in outputs [OK]
Common Mistakes:
Believing sensitive=false hides output
Thinking outputs must be in separate files
Assuming IPs never show in outputs
5. You want to share the URL of a deployed web app but keep the admin password secret. Which output configuration achieves this?
hard
A. output "app_url" { value = aws_lb.web.dns_name }
output "admin_password" { value = aws_db.admin.password }
B. output "app_url" { value = aws_lb.web.dns_name }
output "admin_password" { value = aws_db.admin.password sensitive = true }
C. output "app_url" { value = aws_lb.web.dns_name sensitive = true }
output "admin_password" { value = aws_db.admin.password }
D. output "app_url" { value = aws_lb.web.dns_name sensitive = true }
output "admin_password" { value = aws_db.admin.password sensitive = true }
Solution
Step 1: Identify which outputs should be sensitive
The admin password must be hidden, so sensitive = true is needed there.
Step 2: Confirm app URL visibility
The app URL should be visible, so no sensitive flag on that output.
Final Answer:
output "app_url" { value = aws_lb.web.dns_name }
output "admin_password" { value = aws_db.admin.password sensitive = true } -> Option B
Quick Check:
Hide secrets, show URLs = A [OK]
Hint: Set sensitive = true only on secret outputs [OK]