AWS Cheatsheet

RDS

Use this AWS reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.

Supported Engines

EngineVersionsNotes
MySQL8.0, 8.4Most popular open-source
PostgreSQL15, 16, 17Feature-rich; default for new projects
MariaDB10.6, 10.11, 11.xMySQL-compatible fork
Oracle19c, 21cBYOL or License Included
SQL Server2019, 2022BYOL or LI; Windows/Linux
Aurora MySQLMySQL 8.0-compatibleAWS-native; 5x faster than MySQL
Aurora PostgreSQLPG 15/16-compatible3x faster than PostgreSQL

Create DB Instance

aws rds create-db-instance \
  --db-instance-identifier my-db \
  --db-instance-class db.t3.micro \
  --engine postgres \
  --engine-version 16.3 \
  --master-username admin \
  --master-user-password 'MyPass1!' \
  --allocated-storage 20 \
  --storage-type gp3 \
  --vpc-security-group-ids sg-0abc123 \
  --db-subnet-group-name my-subnet-group \
  --no-publicly-accessible \
  --backup-retention-period 7 \
  --deletion-protection \
  --tags Key=Env,Value=prod

Describe & Status

# List all instances
aws rds describe-db-instances \
  --query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus,Engine,DBInstanceClass,Endpoint.Address]' \
  --output table

# Wait until available
aws rds wait db-instance-available --db-instance-identifier my-db

# Get connection endpoint
aws rds describe-db-instances \
  --db-instance-identifier my-db \
  --query 'DBInstances[0].Endpoint.Address' \
  --output text

Modify Instance

# Scale up (applies during next maintenance window by default)
aws rds modify-db-instance \
  --db-instance-identifier my-db \
  --db-instance-class db.t3.medium \
  --apply-immediately

# Increase storage
aws rds modify-db-instance \
  --db-instance-identifier my-db \
  --allocated-storage 100 \
  --apply-immediately

# Enable Multi-AZ
aws rds modify-db-instance \
  --db-instance-identifier my-db \
  --multi-az \
  --apply-immediately

# Change master password
aws rds modify-db-instance \
  --db-instance-identifier my-db \
  --master-user-password 'NewPass1!' \
  --apply-immediately

Snapshots & Backups

# Manual snapshot
aws rds create-db-snapshot \
  --db-instance-identifier my-db \
  --db-snapshot-identifier my-db-snapshot-2024-01

# List snapshots
aws rds describe-db-snapshots \
  --db-instance-identifier my-db \
  --query 'DBSnapshots[*].[DBSnapshotIdentifier,SnapshotCreateTime,Status,AllocatedStorage]' \
  --output table

# Restore from snapshot to a NEW instance
aws rds restore-db-instance-from-db-snapshot \
  --db-instance-identifier my-db-restored \
  --db-snapshot-identifier my-db-snapshot-2024-01 \
  --db-instance-class db.t3.micro

# Restore to point-in-time
aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier my-db \
  --target-db-instance-identifier my-db-pitr \
  --restore-time 2024-01-15T12:00:00Z

# Delete snapshot
aws rds delete-db-snapshot --db-snapshot-identifier my-db-snapshot-2024-01

Read Replicas

# Create read replica (same region)
aws rds create-db-instance-read-replica \
  --db-instance-identifier my-db-replica \
  --source-db-instance-identifier my-db \
  --db-instance-class db.t3.micro

# Create cross-region read replica
aws rds create-db-instance-read-replica \
  --db-instance-identifier my-db-replica-eu \
  --source-db-instance-identifier arn:aws:rds:us-east-1:123:db:my-db \
  --db-instance-class db.t3.micro \
  --region eu-west-1

# Promote replica to standalone instance (irreversible)
aws rds promote-read-replica --db-instance-identifier my-db-replica

Parameter Groups

# Create custom parameter group
aws rds create-db-parameter-group \
  --db-parameter-group-name my-pg16 \
  --db-parameter-group-family postgres16 \
  --description "Custom PG16 params"

# Set parameters
aws rds modify-db-parameter-group \
  --db-parameter-group-name my-pg16 \
  --parameters "ParameterName=max_connections,ParameterValue=200,ApplyMethod=pending-reboot" \
               "ParameterName=log_min_duration_statement,ParameterValue=1000,ApplyMethod=immediate"

# Attach to instance
aws rds modify-db-instance \
  --db-instance-identifier my-db \
  --db-parameter-group-name my-pg16 \
  --apply-immediately

Subnet Groups

# Create DB subnet group (spans 2+ AZs for Multi-AZ)
aws rds create-db-subnet-group \
  --db-subnet-group-name my-subnet-group \
  --db-subnet-group-description "RDS subnets" \
  --subnet-ids subnet-0priv1 subnet-0priv2

aws rds describe-db-subnet-groups

Aurora Specifics

# Create Aurora PostgreSQL cluster
aws rds create-db-cluster \
  --db-cluster-identifier my-aurora \
  --engine aurora-postgresql \
  --engine-version 16.4 \
  --master-username admin \
  --master-user-password 'MyPass1!' \
  --db-subnet-group-name my-subnet-group \
  --vpc-security-group-ids sg-0abc123

# Add writer instance
aws rds create-db-instance \
  --db-instance-identifier my-aurora-writer \
  --db-cluster-identifier my-aurora \
  --db-instance-class db.r7g.large \
  --engine aurora-postgresql

# Add reader instance
aws rds create-db-instance \
  --db-instance-identifier my-aurora-reader \
  --db-cluster-identifier my-aurora \
  --db-instance-class db.r7g.large \
  --engine aurora-postgresql

# Failover (promote a reader to writer)
aws rds failover-db-cluster --db-cluster-identifier my-aurora

# Aurora Serverless v2 — add to cluster
aws rds create-db-instance \
  --db-instance-identifier my-aurora-serverless \
  --db-cluster-identifier my-aurora \
  --db-instance-class db.serverless \
  --engine aurora-postgresql

RDS Proxy

# Create proxy (reduces connection overhead for Lambda/containers)
aws rds create-db-proxy \
  --db-proxy-name my-proxy \
  --engine-family POSTGRESQL \
  --auth '[{"AuthScheme":"SECRETS","SecretArn":"arn:aws:secretsmanager:...","IAMAuth":"REQUIRED"}]' \
  --role-arn arn:aws:iam::123:role/rds-proxy-role \
  --vpc-subnet-ids subnet-0priv1 subnet-0priv2 \
  --vpc-security-group-ids sg-0abc123

# Register target (the RDS instance)
aws rds register-db-proxy-targets \
  --db-proxy-name my-proxy \
  --db-instance-identifiers my-db

Deletion

# Delete without final snapshot (non-prod)
aws rds delete-db-instance \
  --db-instance-identifier my-db \
  --skip-final-snapshot \
  --delete-automated-backups

# Delete with final snapshot
aws rds delete-db-instance \
  --db-instance-identifier my-db \
  --final-db-snapshot-identifier my-db-final-snapshot

Instance Class Quick Reference

ClassvCPURAMUse Case
db.t3.micro21 GBDev/test, Free Tier
db.t3.medium24 GBSmall workloads
db.m7g.large28 GBGeneral-purpose prod
db.r7g.large216 GBMemory-intensive
db.r7g.4xlarge16128 GBHigh-memory workloads
db.serverlessAutoAurora Serverless v2