A fintech startup's engineering lead shared their AWS bill with us after a quarterly cost review: their database spend had jumped from $3,100 to $5,800 per month in 90 days — without adding a single new feature or significantly increasing traffic. The culprit was Aurora I/O charges that nobody on the team had tracked during the migration from RDS. They had made the right technical decision to move to Aurora for better failover and performance, but the I/O pricing model caught them completely off guard. This guide breaks down exactly how AWS RDS, Aurora, and Aurora Serverless v2 are priced, where the hidden costs hide, and how to choose the right option for your workload and budget.
- RDS is cheapest for stable, write-heavy workloads with predictable I/O — no per-I/O charges on the standard model.
- Aurora costs 20–40% more per instance hour than RDS, plus $0.20 per million I/Os on the standard pricing tier — I/O charges can easily double the bill for read-heavy or high-throughput workloads.
- Aurora I/O-Optimized (launched 2023) eliminates per-I/O charges at a 43% higher instance price — it breaks even around 500K I/Os per instance hour.
- Aurora Serverless v2 charges per ACU-hour (Aurora Capacity Unit) and scales in 0.5 ACU increments — highly cost-efficient for spiky or low-traffic workloads, but can cost more than a provisioned instance at sustained high load.
- Multi-AZ deployments double instance costs for all three options — plan accordingly.
- Data transfer and backup storage costs are often overlooked and can add 20–30% to total spend.
AWS RDS — Predictable Pricing, Familiar Operations
Amazon RDS for MySQL and PostgreSQL uses straightforward instance-based pricing. You pay for the instance type, storage (gp2, gp3, or io1/io2), backup retention, and data transfer. There are no per-I/O charges on the standard compute tier. This makes cost planning simple and cost surprises rare — which is why RDS remains the right choice for many production workloads even as Aurora has matured.
RDS Instance Pricing (us-east-1, On-Demand)
RDS pricing scales with the instance family. The most commonly deployed sizes for production OLTP workloads fall in the db.t3, db.m6g, and db.r6g families. Here are representative 2025 on-demand prices for MySQL and PostgreSQL (prices are identical across both engines on RDS):
| Instance Type | vCPU | RAM | On-Demand ($/hr) | Monthly (730 hrs) |
|---|---|---|---|---|
| db.t3.medium | 2 | 4 GB | $0.068 | ~$50 |
| db.m6g.large | 2 | 8 GB | $0.171 | ~$125 |
| db.m6g.xlarge | 4 | 16 GB | $0.342 | ~$250 |
| db.r6g.xlarge | 4 | 32 GB | $0.480 | ~$350 |
| db.r6g.2xlarge | 8 | 64 GB | $0.960 | ~$700 |
RDS Storage Costs
RDS storage runs on gp2, gp3, io1, or io2. For most workloads, gp3 is the right choice — it provides 3,000 IOPS and 125 MB/s throughput at the base tier with no additional charge, and allows you to purchase additional IOPS separately. Storage costs on gp3 are $0.115 per GB-month. A 500 GB database costs roughly $58/month in storage, plus $0.10 per GB-month for automated backups that exceed your retention window storage.
RDS Reserved Instances: The Biggest Lever
Reserved Instances (RIs) are where RDS economics really change. A 1-year No Upfront RI on a db.r6g.xlarge drops the effective hourly rate from $0.480 to approximately $0.290 — a 40% reduction. A 3-year All Upfront RI cuts it further to around $0.187/hour, a 61% reduction versus on-demand. For any RDS instance running at consistent utilization above 70%, Reserved Instances are the single highest-ROI optimization available.
Purchase RIs on your baseline capacity, not your peak capacity. Use on-demand instances to handle burst. A db.r6g.xlarge RI paired with on-demand db.r6g.2xlarge during traffic spikes often costs less than RI-covering your peak instance size year-round.
When RDS Makes Sense
- Write-heavy workloads where Aurora I/O charges would accumulate rapidly
- Teams already familiar with MySQL or PostgreSQL operations who do not need Aurora's fast failover (<30 seconds)
- Smaller databases (under 1 TB) where Aurora's distributed storage overhead is not justified
- Cost-sensitive environments where the Aurora premium is hard to justify to finance
Amazon Aurora — Premium Performance, Variable I/O Costs
Aurora MySQL and Aurora PostgreSQL use the same distributed storage architecture underneath, decoupling compute from storage across six storage nodes in three Availability Zones. This architecture enables Aurora's headline features: sub-30-second failover, storage auto-scaling up to 128 TB, up to 15 read replicas sharing the same storage layer, and built-in fault tolerance. The tradeoff is a more complex pricing model with a meaningful per-I/O component that surprises many teams.
Aurora Instance Pricing vs. RDS
Aurora instance pricing runs approximately 20–40% higher than equivalent RDS instances on a per-hour basis. Here is the direct comparison for the most common sizes in us-east-1:
| Instance Type | RDS On-Demand ($/hr) | Aurora On-Demand ($/hr) | Aurora Premium |
|---|---|---|---|
| db.t3.medium | $0.068 | $0.082 | +21% |
| db.r6g.large | $0.240 | $0.290 | +21% |
| db.r6g.xlarge | $0.480 | $0.580 | +21% |
| db.r6g.2xlarge | $0.960 | $1.160 | +21% |
| db.r6g.4xlarge | $1.920 | $2.310 | +20% |
Aurora I/O Costs — The Cost Surprise
On the standard Aurora pricing tier, every read and write I/O to the distributed storage layer is charged at $0.20 per million I/O requests. This sounds trivial — until you model actual workloads. A moderately busy OLTP database on a db.r6g.xlarge processing 1,000 transactions per second, each touching an average of 50 pages, generates roughly 50,000 I/Os per second — 4.3 billion I/Os per day — resulting in a daily I/O charge of $860. At that rate, I/O costs alone exceed $25,000/month.
Aurora I/O charges apply to both read and write I/Os from Aurora compute nodes to the distributed storage layer — including background I/Os from the storage engine (InnoDB buffer pool evictions, redo log writes, checksums). The number visible in CloudWatch under VolumeReadIOPs and VolumeWriteIOPs is the billable metric. Check these metrics on your RDS instance before migrating to Aurora to project I/O costs accurately.
Aurora I/O-Optimized: Eliminating Per-I/O Charges
AWS launched Aurora I/O-Optimized in May 2023 specifically to address the I/O cost unpredictability problem. I/O-Optimized eliminates per-I/O charges entirely in exchange for a higher instance price — approximately 43% higher than the standard Aurora tier. The break-even point is approximately 500,000 I/O requests per instance hour. For workloads above that threshold — which is most production OLTP databases — I/O-Optimized is meaningfully cheaper than standard Aurora.
For a db.r6g.xlarge running at 1,000 I/Os per second (3.6 million per hour):
| Cost Component | Standard Aurora | I/O-Optimized Aurora |
|---|---|---|
| Instance (per hour) | $0.580 | $0.829 |
| I/O charge (per hour) | $0.72 (3.6M × $0.20/M) | $0.00 |
| Total per hour | $1.30 | $0.829 |
| Monthly estimate | ~$949 | ~$605 |
Switch to Aurora I/O-Optimized if your CloudWatch VolumeReadIOPs + VolumeWriteIOPs averages more than 500K per hour. You can toggle between Standard and I/O-Optimized on an existing Aurora cluster with no downtime — AWS applies the change at the cluster level within a few minutes.
Aurora Storage Pricing
Aurora storage costs $0.10 per GB-month (slightly cheaper than RDS gp3 at $0.115/GB-month) and scales automatically. There is no need to pre-provision storage capacity — Aurora expands in 10 GB increments automatically. Backup storage beyond the cluster's current size is charged at $0.021/GB-month.
Aurora Serverless v2 — Pay for What You Use
Aurora Serverless v2, released as GA in April 2022, is a fundamentally different pricing model: instead of paying for a fixed instance size, you pay per ACU-hour (Aurora Capacity Unit). One ACU provides approximately 2 GB of RAM and proportional CPU. Serverless v2 scales in 0.5 ACU increments from a configurable minimum (as low as 0.5 ACU) to a configurable maximum (up to 256 ACU), adjusting within seconds in response to actual load.
Aurora Serverless v2 Pricing
In us-east-1, Aurora Serverless v2 charges $0.12 per ACU-hour for MySQL-compatible and PostgreSQL-compatible clusters. Storage is priced identically to provisioned Aurora at $0.10/GB-month. I/O is charged at the same $0.20/million I/Os as standard Aurora (unless you opt into the I/O-Optimized configuration, also available for Serverless v2).
To understand what this means in dollar terms for a typical workload:
| Scenario | ACU Range | Avg ACUs Used | Monthly Cost (compute only) |
|---|---|---|---|
| Dev/staging (low usage) | 0.5–4 | 1 ACU average | ~$88 |
| Small SaaS (business hours only) | 0.5–8 | 3 ACU average | ~$263 |
| Mid-size OLTP (variable load) | 2–16 | 8 ACU average | ~$701 |
| High-traffic API (sustained load) | 8–32 | 24 ACU average | ~$2,102 |
An Aurora Serverless v2 instance running at 24 ACUs on average is roughly equivalent to a db.r6g.4xlarge provisioned instance. At that scale, a provisioned db.r6g.4xlarge at $1.160/hour costs about $847/month — significantly less than the $2,102 Serverless v2 estimate for the same average capacity. Serverless v2's economic advantage is clearest when average utilization is well below peak capacity.
Aurora Serverless v2 does not scale to zero. The minimum ACU setting (even at 0.5 ACU) means you pay continuously. At $0.12/ACU-hour, a minimum-configured 0.5 ACU instance costs approximately $44/month at idle — not free. For true zero-cost idle periods, Aurora Serverless v1 (now deprecated) was the option; v2 is not a replacement for zero-scale use cases.
When Serverless v2 Saves Money
Aurora Serverless v2 delivers real cost savings when your workload has a high peak-to-average ratio — typically when peak is more than 3x your average. A development or staging database that needs 16 ACUs during business hours but only 0.5 ACU at night can run for approximately $88/month versus $605/month for a provisioned db.r6g.2xlarge. Likewise, SaaS applications with weekly or seasonal spikes benefit significantly from not paying for peak capacity 24/7.
Head-to-Head Cost Comparison
The following table compares total estimated monthly costs for three representative workloads across all three pricing models. Estimates include compute, storage (500 GB), and typical I/O charges where applicable. All figures are on-demand, single-AZ, us-east-1.
| Workload Type | RDS (db.r6g.xlarge) | Aurora Standard | Aurora I/O-Optimized | Aurora Serverless v2 |
|---|---|---|---|---|
| Low-traffic SaaS (~100 QPS, 50K IOPS avg) |
$350 + $58 storage = $408 | $424 + $50 storage + $7.20 I/O = $481 | $606 + $50 storage = $656 | 2 ACU avg: $175 + $50 storage = $225 |
| Mid-size OLTP (~1K QPS, 1M IOPS avg) |
$700 + $58 storage = $758 | $847 + $50 storage + $144 I/O = $1,041 | $1,212 + $50 storage = $1,262 | 8 ACU avg: $701 + $50 storage = $751 |
| High-traffic API (~5K QPS, 5M IOPS avg) |
$700 (r6g.2xl) + $58 = $758 | $847 + $50 storage + $720 I/O = $1,617 | $1,212 + $50 storage = $1,262 | 24 ACU avg: $2,102 + $50 storage = $2,152 |
| Spiky / variable (peak 10x average) |
Sized to peak: $700 = ~$758 | Sized to peak + I/O = ~$1,100+ | Sized to peak = ~$1,262 | Scales with load: ~$300–$400 avg |
The table makes the key patterns clear: RDS wins on raw compute cost for stable workloads; standard Aurora can be significantly more expensive than it appears once I/O charges are included; Aurora I/O-Optimized is the pragmatic choice for high-I/O Aurora workloads; and Serverless v2 is compelling for spiky or low-average-utilization patterns but expensive at sustained high load.
Hidden Costs to Watch For
Multi-AZ Doubles Your Instance Bill
All three options support Multi-AZ deployments — and all of them double the instance cost when enabled. For RDS, Multi-AZ adds a synchronous standby instance in a second AZ. For Aurora, Multi-AZ means adding a reader instance (or relying on Aurora's built-in storage replication, which is always multi-AZ regardless). For Serverless v2, each Aurora instance in the cluster is billed separately. A production architecture with one writer and one reader doubles the compute line item before any other costs are applied.
Backup Storage
Automated backups within your configured retention window are included in the instance price for RDS, but backup storage beyond the current database size is charged at $0.095/GB-month for RDS and $0.021/GB-month for Aurora. On-demand and automated snapshots stored beyond the retention window are always charged. A 1 TB RDS database with 7-day retention keeping 3 TB of total backup data pays roughly $190/month just in backup storage — a cost often invisible until the first quarterly review.
Aurora's backup storage pricing at $0.021/GB-month is significantly cheaper than RDS backup storage at $0.095/GB-month. If you have a large database with aggressive backup retention requirements, this difference alone can represent hundreds of dollars per month and partially offsets Aurora's higher instance price.
Data Transfer Costs
Data transfer out from RDS and Aurora to the internet or to other AWS regions carries standard EC2 data transfer pricing: $0.09/GB for the first 10 TB/month out to the internet. Intra-region transfers to EC2 instances in the same AZ are free; cross-AZ transfers within the same region cost $0.01/GB each way. For read-heavy applications routing queries to Aurora read replicas in a different AZ than the application, cross-AZ charges add up quickly. A workload transferring 10 TB/month of query results across AZs pays $100/month in data transfer alone.
RDS Proxy
If you are using RDS Proxy for connection pooling — common with Lambda-backed APIs or applications using Aurora Serverless v2 — Proxy is charged at $0.015 per vCPU-hour of the underlying database instance capacity. For a db.r6g.xlarge (4 vCPUs), RDS Proxy adds $0.06/hour, or approximately $44/month. For Serverless v2, Proxy cost is based on the maximum ACU configuration.
Enhanced Monitoring and Performance Insights
Enhanced Monitoring at granularities finer than 60 seconds costs $0.014/vCPU-hour and ships metrics to CloudWatch at standard CloudWatch rates. Performance Insights is free for the 7-day retention tier; extending to 2 years costs $0.02/vCPU-month. These costs are small in isolation but become meaningful across a fleet of 20 or 30 database instances.
Which Should You Choose?
Choose RDS when:
- Your workload is write-intensive or has high sustained I/O, and you want predictable costs without I/O charges
- You need to minimize cost and do not require Aurora's sub-30-second failover or 15-replica read scaling
- Your database is under 1 TB and Aurora's distributed storage architecture adds no tangible operational benefit
- You plan to purchase Reserved Instances — RDS RI pricing is very aggressive and often makes RDS the clear winner on total cost of ownership
Choose Aurora (I/O-Optimized) when:
- You need Aurora's fast failover, global database, or Babelfish features
- Your average I/O rate exceeds 500K I/O operations per hour (I/O-Optimized eliminates per-I/O charges)
- Your database will grow beyond 1 TB and Aurora's auto-scaling storage simplifies operations
- You need more than 5 read replicas — Aurora supports up to 15 sharing the same storage layer
Choose Aurora Serverless v2 when:
- Your peak-to-average compute ratio is 3x or higher — Serverless v2 eliminates paying for capacity that sits idle
- You run development, staging, or reporting workloads that need to scale quickly but do not run at full capacity consistently
- You are building a new application and want to defer the capacity-planning decision until you understand actual traffic patterns
- You use Lambda or other serverless application architecture and need a database that scales to match compute bursts
You can mix provisioned Aurora instances and Serverless v2 instances within the same Aurora cluster. A common pattern is to run the writer as a provisioned instance (for predictable write throughput) and add Serverless v2 reader instances that scale automatically to absorb variable read traffic. This hybrid approach often beats the cost of fully provisioned read replicas sized to peak read demand.
- Check CloudWatch
VolumeReadIOPsandVolumeWriteIOPson any existing RDS or Aurora instance before comparing costs — I/O charges are the most common source of Aurora billing shock. - Aurora I/O-Optimized breaks even at roughly 500K I/Os per instance-hour; above that threshold it is almost always cheaper than standard Aurora despite the 43% higher instance price.
- Aurora Serverless v2 saves money when peak demand is 3x or more above average utilization — for flat, sustained workloads it is typically more expensive than a provisioned instance.
- Multi-AZ doubles compute costs across all three options — factor this into cost comparisons rather than comparing single-AZ estimates against production Multi-AZ designs.
- Reserved Instances on RDS or provisioned Aurora provide 40–60% discounts versus on-demand pricing for stable workloads — this is often the highest-ROI cost optimization available.
- Backup storage costs differ significantly: Aurora backup storage is $0.021/GB-month versus $0.095/GB-month for RDS — a 4.5x difference that matters at scale with long retention windows.
Working with JusDB on AWS Database Cost Optimization
JusDB helps engineering teams right-size their AWS database spend — analyzing I/O patterns, Reserved Instance opportunities, Aurora vs RDS trade-offs, and connection pool configuration. Our DBAs have saved clients thousands per month in unnecessary AWS costs.
Explore JusDB Cloud Database Management → | Talk to a DBA
Related reading: