Terraform Tutorial — Practical Output Examples
Here are real-world output examples you’ll use repeatedly in AWS projects.
S3 Bucket Outputs
resource "aws_s3_bucket" "assets" {
bucket = "myapp-assets-${var.environment}"
}
output "bucket_name" {
value = aws_s3_bucket.assets.id
description = "Name of the assets bucket"
}
output "bucket_arn" {
value = aws_s3_bucket.assets.arn
description = "ARN of the assets bucket"
}
output "bucket_domain" {
value = aws_s3_bucket.assets.bucket_regional_domain_name
description = "Regional domain name for the bucket"
}
EC2 Instance Outputs
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux.id
instance_type = var.instance_type
subnet_id = var.subnet_id
}
output "instance_id" {
value = aws_instance.web.id
description = "EC2 instance ID"
}
output "public_ip" {
value = aws_instance.web.public_ip
description = "Public IP of the web server"
}
output "ssh_command" {
value = "ssh -i key.pem ec2-user@${aws_instance.web.public_ip}"
description = "SSH command to connect to the instance"
}
RDS Database Outputs
resource "aws_db_instance" "main" {
engine = "postgres"
engine_version = "15.4"
instance_class = "db.t3.micro"
db_name = "myapp"
username = "admin"
password = var.db_password
}
output "db_endpoint" {
value = aws_db_instance.main.endpoint
description = "RDS endpoint (host:port)"
}
output "db_connection_string" {
value = "postgresql://admin:${var.db_password}@${aws_db_instance.main.endpoint}/myapp"
sensitive = true
}
VPC and Networking Outputs
output "vpc_id" {
value = aws_vpc.main.id
description = "VPC ID"
}
output "public_subnet_ids" {
value = aws_subnet.public[*].id
description = "Public subnet IDs"
}
output "nat_gateway_ip" {
value = aws_eip.nat.public_ip
description = "NAT Gateway public IP"
}
Aggregate Summary Output
Combine everything into a single output for easy consumption:
output "deployment_info" {
value = {
environment = var.environment
region = var.region
vpc_id = aws_vpc.main.id
web_url = "http://${aws_instance.web.public_ip}"
db_endpoint = aws_db_instance.main.endpoint
s3_bucket = aws_s3_bucket.assets.id
}
description = "Summary of all deployed resources"
}
$ terraform output -json deployment_info | jq '.'
{
"environment": "dev",
"region": "us-east-1",
"vpc_id": "vpc-0abc123def456",
"web_url": "http://54.123.45.67",
"db_endpoint": "myapp-db.cdef123.us-east-1.rds.amazonaws.com:5432",
"s3_bucket": "myapp-assets-dev"
}
What’s Next?
Time to practice everything you’ve learned about outputs.