Terraform Tutorial — Practical Output Examples

1 minute read

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.


← Outputs Across Modules Practice Exercises →