Skill 24 · Architect For Startups
Subchapter 24.27
references/rds-aurora.mdMarkdown6 KBView on GitHub
PostgreSQL on Aurora Serverless v2 is the default database for startups. It gives you:
Use plain RDS (not Aurora) when:
db.t4g.micro RDS PostgreSQL costs ~$12/month vs Aurora’s $44/month minimumAurora Serverless v2 minimum ACU cost: Even “scaled to zero” isn’t zero — minimum is 0.5 ACU = ~$44/month. For a side project or internal tool, plain RDS db.t4g.micro at $12/month is 4x cheaper. Use Aurora Serverless v2 when the auto-scaling justifies the minimum.
Multi-AZ on day one: Multi-AZ doubles your database cost. At pre-PMF with no revenue, single-AZ + automated daily snapshots is an acceptable risk. Your “HA plan” is: restore from snapshot (10-30 min downtime). Add Multi-AZ when you have paying customers with uptime expectations.
RDS Proxy when you don’t need it: $18/month minimum per proxy. Only needed for Lambda→RDS connections (Lambda’s connection storm problem). If your app uses containers with connection pooling (HikariCP, pgBouncer), skip RDS Proxy entirely.
Oversized instances “for headroom”: Startups provision db.r6g.large ($140/month) when db.t4g.medium ($48/month) with 2 vCPU/4GB handles their workload fine. Start with the smallest t4g class that has enough memory for your working set. Upsize takes <10 minutes with minimal downtime.
Read replicas before you need them: Each Aurora read replica adds ~$44/month minimum. Don’t add replicas until: (a) you’ve confirmed reads are the bottleneck via Performance Insights, and (b) your read traffic exceeds what the writer can handle. Most startups need 0 read replicas until post-Series A.
Snapshot retention at 35 days: Default is 7 days, but teams set 35 days “for safety.” At 100GB database, that’s ~$23/month in backup storage vs ~$5/month for 7 days. Right-size retention to your actual compliance needs.
db.t4g.micro (~$12/month) OR Aurora Serverless v2 (0.5 ACU, ~$44/month)gp3 storage (20GB minimum, auto-extends)--manage-master-user-passwordStart with RDS, not Aurora. Aurora’s $44/month minimum seems trivial, but at pre-PMF you might have 5 services each needing a database. 5 × $44 = $220/month. 5 × RDS db.t4g.micro = $60/month. Migrate to Aurora when a specific database needs auto-scaling storage or high availability.
PostgreSQL, always PostgreSQL. Even if your team knows MySQL better. PostgreSQL has: better JSON support (replace MongoDB), full-text search (replace Elasticsearch for simple cases), PostGIS (location queries), and a richer extension ecosystem. This flexibility reduces the number of databases you need.
Single-AZ is fine until you have SLAs. The “always use Multi-AZ in production” guidance assumes production means “paying customers with contractual uptime.” If your production means “100 beta users who’ll understand 10 minutes of downtime,” save the money.
Connection pooling in your app, not RDS Proxy. PgBouncer sidecar or built-in pooling (HikariCP for Java, Prisma for Node.js) is free and runs co-located with your app. RDS Proxy’s value is specifically for Lambda’s thousands-of-ephemeral-connections problem.
| Signal | Direction |
|---|---|
| Single table with >10K writes/sec, simple key-value access | DynamoDB for that table |
| Need sub-10ms reads on hot data | DynamoDB or ElastiCache in front of Aurora |
| Full-text search beyond PostgreSQL’s capabilities | OpenSearch for search, keep Aurora as source of truth |
| Time-series data (metrics, IoT) growing unbounded | Timestream or InfluxDB |
| Monthly database cost > $2K, mostly reads | Consider read replicas + Aurora Global if multi-region |
max ACU conservatively (4-8 ACU) unless you know your peak load.