Skip to content

AWS RDS — Relational Database Service

Amazon RDS is a managed relational database service that handles provisioning, patching, backup, recovery, and scaling — so you can focus on your application rather than database administration.

In Azure terms: AWS RDS = Azure SQL Database / Azure Database for PostgreSQL / MySQL

EngineNotes
Amazon AuroraAWS’s custom MySQL/PostgreSQL-compatible engine — 5× faster than MySQL, 3× faster than PostgreSQL
MySQLOpen-source, widely used
PostgreSQLAdvanced open-source, extensible
MariaDBCommunity MySQL fork
OracleEnterprise, bring-your-own-license or license-included
Microsoft SQL ServerFull MS SQL Server support with license options
ConceptDescription
DB InstanceThe running database server
DB Instance ClassHardware spec (CPU, RAM) — e.g., db.t3.micro, db.r6g.large
Multi-AZ DeploymentStandby replica in another AZ for automatic failover
Read ReplicaRead-only copy for offloading read traffic (async replication)
Parameter GroupDB engine configuration settings
Subnet GroupSet of subnets (in different AZs) where RDS can deploy instances
Automated BackupsDaily snapshots + transaction logs, retained 1–35 days
Manual SnapshotsUser-triggered snapshots, kept until deleted
FeatureMulti-AZRead Replica
PurposeHigh availability, failoverRead scalability
Sync typeSynchronous replicationAsynchronous replication
ReadableNo (standby not accessible)Yes (read-only)
FailoverAutomatic (~60 seconds)Manual promotion
Cross-regionYes (Multi-AZ Cluster)Yes
Extra cost~2× the instance costAdditional instance cost

Aurora is AWS’s cloud-native relational database, compatible with MySQL and PostgreSQL:

  • Storage auto-scaling — starts at 10 GB, grows to 128 TB automatically
  • 6 copies of data across 3 AZs — 4 out of 6 copies needed for writes
  • Read replicas — up to 15, with sub-10ms replica lag
  • Aurora Serverless v2 — auto-scales compute up and down to 0 (great for variable workloads)
  • Global Database — replicate across regions with < 1 second latency
ComponentDescription
Instance hoursBilled per second for the running instance
StorageGB/month for provisioned storage (gp2/gp3/io1)
I/O requestsFor magnetic and provisioned IOPS storage
Backup storageFree up to 100% of DB storage size
Data transferOutbound internet transfer

db.t3.micro is included in the AWS Free Tier (750 hours/month + 20 GB storage for 12 months).

  • VPC isolation — deploy in private subnets, no public access
  • Security Groups — control inbound connections
  • Encryption at rest — AES-256 via KMS (enable at creation)
  • Encryption in transit — SSL/TLS connections
  • IAM authentication — use IAM tokens instead of passwords (MySQL and PostgreSQL)
  • Secrets Manager integration — automatic credential rotation
FeatureAWS RDSAzure SQL Database
Managed serviceYesYes
EnginesMySQL, PostgreSQL, Oracle, SQL Server, MariaDBSQL Server (native), plus separate services for others
Aurora equivalentAmazon AuroraAzure SQL Hyperscale
Read replicasYesYes (Geo-replicas, read replicas)
Auto-failoverMulti-AZZone-redundant / Geo-failover
ServerlessAurora Serverless v2Azure SQL Serverless
Backup retention0–35 days1–35 days
IAM authYes (MySQL, PostgreSQL)Azure AD auth
Terminal window
# Create an RDS PostgreSQL instance
aws rds create-db-instance \
--db-instance-identifier my-postgres \
--db-instance-class db.t3.micro \
--engine postgres \
--master-username admin \
--master-user-password MyPassword123! \
--allocated-storage 20 \
--no-publicly-accessible \
--db-subnet-group-name my-subnet-group
# Create a read replica
aws rds create-db-instance-read-replica \
--db-instance-identifier my-postgres-read \
--source-db-instance-identifier my-postgres
# Create a manual snapshot
aws rds create-db-snapshot \
--db-instance-identifier my-postgres \
--db-snapshot-identifier my-postgres-snap-2024
# Describe DB instances
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus,Endpoint.Address]' \
--output table