AWS has two main relational database services: Amazon Relational Database Service (RDS) and Amazon Aurora. Together, they account for a significant portion of AWS spend, consistently ranking second on the AWS Cost Leaderboard. Both services cover a wide range of use cases, often overlapping, yet the differences in performance, features, and pricing help determine which one is a better fit. While there are many resources comparing their features, this post focuses on a detailed pricing comparison.

RDS

RDS has been a staple of AWS’s database offerings since its launch in 2009. It is designed to be familiar to users of traditional relational databases, offering seamless integration and easy migration for a variety of workloads. In particular, its compatibility with a wide range of database engines, MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server, MariaDB, Aurora, and Db2, makes it easy to migrate existing applications and covers a variety of use cases. RDS automates time-consuming tasks, like backups, patching, and scaling, without requiring constant manual intervention.

Aurora

Five years after the release of RDS, AWS introduced Aurora as a part of the RDS family, specifically designed for the cloud. Aurora is regarded for being highly performant and durable, with built-in multi-AZ replication to ensure data redundancy and minimize downtime. Aurora supports both MySQL and PostgreSQL engines, offering the familiarity of these databases with significantly better performance and scalability. One of Aurora’s key differentiators is its architecture, which separates compute and storage. This design allows it to automatically scale storage independently of compute, providing up to 128 TiB of storage, without manual provisioning.

RDS vs Aurora Pricing

As Aurora is an engine of Amazon RDS, there are similarities in how the two services are priced, but also several significant differences that can influence which one is the better fit. The pricing can be complex, so we’ll break it down by the main factors and highlight both similarities and differences. For even more clarity, we’ll add specific prices, shown in the US East (N Virginia) region for MySQL.

Pricing elements include instance hours (or Aurora Capacity Unit hours for Aurora Serverless), storage per GB, and I/O. Depending on the service, factors such as region, database engine, cluster configuration, pricing model, instance type, and storage component can all influence costs.

Region

Like other AWS services, pricing for both RDS and Aurora varies based on your choice of region. Some regions are significantly less expensive than others, but choosing a region closer to your users may reduce latency, even if it comes at a higher cost.

Database Engine

For RDS, you have the choice of several database engines: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server, MariaDB, Aurora, and Db2. Aurora, however, supports only MySQL and PostgreSQL, with performance enhancements over standard RDS instances for these engines. The cost may vary based on engine, and certain engines may be lacking instance types or features. For example, Db2 does not support Reserved Instances.

Storage and I/O

RDS and Aurora have different approaches to pricing for storage and I/O operations.

Aurora offers two options: Standard and I/O-Optimized. Aurora Standard is suitable for typical data access patterns with low to moderate I/O usage, while Aurora I/O-Optimized is designed for I/O-intensive applications. For Aurora Standard, you are charged only for the I/O requests you make. With Aurora I/O-Optimized, you are not charged for I/O requests, however, the instance price and storage will be charged at an increased rate. For Aurora storage, you are charged per GB-month for only what you use.

Component Aurora Standard Aurora I/O-Optimized
Storage Rate $0.10 per GB-month $0.225 per GB-month
I/O Rate $0.20 per 1 million requests Included

Aurora I/O and storage price

RDS, on the other hand, charges for IOPS and storage based on the amount you provision, regardless of if you use all of it or not. You have the choice between General Purpose, Provisioned IOPS, and magnetic storage (which is not recommended). Provisioned IOPS is recommended for I/O intensive workloads, whereas General Purpose is recommended for medium-sized DB instances, development and test environments, and non-latency critical applications.

From there, there are even more decisions to be made. For Provisioned IOPS, there is io2 (recommended) and io1 (previous generation). For General Purpose, gp3 (recommended) and gp2 (previous generation). Learn more here. The pricing for the recommended options is as follows:

Component RDS General Purpose (gp3) RDS Provisioned IOPS (io3)
Storage $0.115 per GB-month $0.125 per GB-month
IOPS 3,000 IOPS included
$0.02 per IOPS-month over baseline
$0.10 per IOPS-month
Throughput 125 MB/s throughput included
$0.080 per MB/s-month over baseline
-

RDS IOPS, storage, and throughput price

Pricing Model

Both RDS and Aurora offer the standard On-Demand and Reserved Instance pricing models. As with other AWS services, On-Demand allows you to pay only for what you use without any upfront commitments. For long-term workloads, Reserved Instances provide a cost-saving option by offering discounted rates in exchange for a 1- or 3-year commitment. For On-Demand and Reserved Instances, you select an instance type and pay per database instance-hour (see next section).

In addition to these options, Aurora also has an additional option, Aurora Serverless, offering a scalable and cost-effective option for variable workloads. You are billed per second for Aurora Capacity Units (ACUs), wherein each ACU corresponds to approximately 2 GB of memory, along with corresponding CPU and networking resources, similar to the configuration used in Aurora provisioned instances.

Measure Aurora Standard (per ACU hour) Aurora I/O-Optimized (per ACU hour)
Aurora Capacity Unit $0.12 $0.16

Aurora Serverless V2 price

Instance

For On-Demand and Reserved Instances, both services require you to choose an instance type to run on. You are billed per hour the instance is running and the cost of an instance depends on the compute capacity (CPU, memory, etc.) you select. RDS has more instances to choose from, so you can more precisely match without over-provisioning resources. Aurora’s instances tend to have higher performance for the same engine, but this comes with a corresponding increase in cost.

Current Generation vCPU Memory RDS (Price Per Hour) Aurora Standard (Price Per Hour) Aurora I/O-Optimized (Price Per Hour)
db.t4g.micro 2 1 $0.02 - -
db.t3.micro 2 1 $0.02 - -
db.t4g.small 2 2 $0.03 - -
db.t3.small 2 2 $0.03 $0.04 $0.05
db.t4g.medium 2 4 $0.07 $0.07 $0.10
db.t3.medium 2 4 $0.07 $0.08 $0.11
db.t4g.large 2 8 $0.13 $0.15 $0.19
db.t3.large 2 8 $0.14 $0.16 $0.21
db.m6g.large 2 8 $0.15 - -
db.m7g.large 2 8 $0.17 - -
db.m6i.large 2 8 $0.17 - -
db.m5.large 2 8 $0.17 - -
db.m6gd.large 2 8 $0.19 - -
db.m5d.large 2 8 $0.21 - -
db.r6g.large 2 16 $0.22 $0.26 $0.34
db.m6id.large 2 8 $0.22 - -
db.r7g.large 2 16 $0.24 $0.28 $0.36
db.r6i.large 2 16 $0.24 $0.29 $0.38
db.r5.large 2 16 $0.24 $0.29 $0.38
db.r6gd.large 2 16 $0.26 - -
db.t4g.xlarge 4 16 $0.26 - -
db.m6in.large 2 8 $0.26 - -
db.t3.xlarge 4 16 $0.27 - -
db.r5d.large 2 16 $0.29 - -
db.m6idn.large 2 8 $0.30 - -
db.r5b.large 2 16 $0.30 - -
db.r6id.large 2 16 $0.30 - -
db.m6g.xlarge 4 16 $0.30 - -
db.x2g.large 2 32 $0.33 $0.38 $0.49
db.m7g.xlarge 4 16 $0.34 - -
db.m6i.xlarge 4 16 $0.34 - -
db.m5.xlarge 4 16 $0.34 - -
db.r6in.large 2 16 $0.35 - -
db.m6gd.xlarge 4 16 $0.37 - -
db.r6idn.large 2 16 $0.39 - -
db.m5d.xlarge 4 16 $0.42 - -
db.r6g.xlarge 4 32 $0.43 $0.52 $0.68
db.m6id.xlarge 4 16 $0.45 - -
db.r7g.xlarge 4 32 $0.48 $0.55 $0.72
db.r6i.xlarge 4 32 $0.48 $0.58 $0.75
db.r5.xlarge 4 32 $0.48 $0.58 $0.75
db.r6gd.xlarge 4 32 $0.51 - -
db.m6in.xlarge 4 16 $0.52 - -
db.t4g.2xlarge 8 32 $0.52 - -
db.t3.2xlarge 8 32 $0.54 - -
db.r5d.xlarge 4 32 $0.57 - -
db.m6idn.xlarge 4 16 $0.59 - -
db.r5b.xlarge 4 32 $0.59 - -
db.r6id.xlarge 4 32 $0.60 - -
db.m6g.2xlarge 8 32 $0.61 - -
db.x2g.xlarge 4 64 $0.65 $0.75 $0.98
db.m7g.2xlarge 8 32 $0.67 - -
db.m6i.2xlarge 8 32 $0.68 - -
db.m5.2xlarge 8 32 $0.68 - -
db.r6in.xlarge 4 32 $0.69 - -
db.m6gd.2xlarge 8 32 $0.75 - -
db.r6idn.xlarge 4 32 $0.78 - -
db.m5d.2xlarge 8 32 $0.84 - -
db.r6g.2xlarge 8 64 $0.86 $1.04 $1.35
db.m6id.2xlarge 8 32 $0.90 - -
db.r7g.2xlarge 8 64 $0.96 $1.11 $1.44
db.r6i.2xlarge 8 64 $0.96 $1.16 $1.51
db.r5.2xlarge 8 64 $0.96 $1.16 $1.51
db.r6gd.2xlarge 8 64 $1.03 - -
db.m6in.2xlarge 8 32 $1.03 - -
db.r5d.2xlarge 8 64 $1.14 - -
db.m6idn.2xlarge 8 32 $1.18 - -
db.r5b.2xlarge 8 64 $1.18 - -
db.r6id.2xlarge 8 64 $1.19 - -
db.m6g.4xlarge 16 64 $1.22 - -
db.x2g.2xlarge 8 128 $1.30 $1.51 $1.96
db.m7g.4xlarge 16 64 $1.35 - -
db.m6i.4xlarge 16 64 $1.37 - -
db.m5.4xlarge 16 64 $1.37 - -
db.r6in.2xlarge 8 64 $1.38 - -
db.m6gd.4xlarge 16 64 $1.49 - -
db.r6idn.2xlarge 8 64 $1.55 - -
db.m5d.4xlarge 16 64 $1.68 - -
db.r6g.4xlarge 16 128 $1.72 $2.08 $2.70
db.m6id.4xlarge 16 64 $1.79 - -
db.r7g.4xlarge 16 128 $1.91 $2.21 $2.87
db.r6i.4xlarge 16 128 $1.92 $2.32 $3.02
db.r5.4xlarge 16 128 $1.92 $2.32 $3.02
db.r6gd.4xlarge 16 128 $2.06 - -
db.m6in.4xlarge 16 64 $2.07 - -
db.x2iedn.xlarge 4 128 $2.22 - -
db.r5d.4xlarge 16 128 $2.29 - -
db.m6idn.4xlarge 16 64 $2.36 - -
db.r5b.4xlarge 16 128 $2.37 - -
db.r6id.4xlarge 16 128 $2.39 - -
db.m6g.8xlarge 32 128 $2.43 - -
db.x2g.4xlarge 16 256 $2.61 $3.02 $3.92
db.m7g.8xlarge 32 128 $2.70 - -
db.m6i.8xlarge 32 128 $2.74 - -
db.m5.8xlarge 32 128 $2.74 - -
db.r6in.4xlarge 16 128 $2.77 - -
db.m6gd.8xlarge 32 128 $2.99 - -
db.r6idn.4xlarge 16 128 $3.10 - -
db.m5d.8xlarge 32 128 $3.35 - -
db.r6g.8xlarge 32 256 $3.44 $4.15 $5.40
db.m6id.8xlarge 32 128 $3.59 - -
db.m6g.12xlarge 48 192 $3.65 - -
db.r7g.8xlarge 32 256 $3.83 $4.42 $5.75
db.r6i.8xlarge 32 256 $3.84 $4.64 $6.03
db.r5.8xlarge 32 256 $3.84 $4.64 $6.03
db.m7g.12xlarge 48 192 $4.04 - -
db.m6i.12xlarge 48 192 $4.10 - -
db.m5.12xlarge 48 192 $4.10 - -
db.r6gd.8xlarge 32 256 $4.11 - -
db.m6in.8xlarge 32 128 $4.13 - -
db.x2iedn.2xlarge 8 256 $4.44 - -
db.m6gd.12xlarge 48 192 $4.48 - -
db.r5d.8xlarge 32 256 $4.57 - -
db.m6idn.8xlarge 32 128 $4.72 - -
db.r5b.8xlarge 32 256 $4.74 - -
db.r6id.8xlarge 32 256 $4.77 - -
db.m6g.16xlarge 64 256 $4.86 - -
db.m5d.12xlarge 48 192 $5.03 - -
db.r6g.12xlarge 48 384 $5.16 $6.23 $8.10
db.x2g.8xlarge 32 512 $5.22 $6.03 $7.84
db.m6id.12xlarge 48 192 $5.38 - -
db.m7g.16xlarge 64 256 $5.39 - -
db.m5.16xlarge 64 256 $5.47 - -
db.m6i.16xlarge 64 256 $5.47 - -
db.r6in.8xlarge 32 256 $5.53 - -
db.r7g.12xlarge 48 384 $5.74 $6.63 $8.62
db.r6i.12xlarge 48 384 $5.76 $6.96 $9.05
db.r5.12xlarge 48 384 $5.76 $6.96 $9.05
db.m6gd.16xlarge 64 256 $5.97 - -
db.r6gd.12xlarge 48 384 $6.17 - -
db.m6in.12xlarge 48 192 $6.20 - -
db.r6idn.8xlarge 32 256 $6.20 - -
db.m5d.16xlarge 64 256 $6.71 - -
db.r5d.12xlarge 48 384 $6.86 - -
db.r6g.16xlarge 64 512 $6.87 $8.31 $10.80
db.m6idn.12xlarge 48 192 $7.08 - -
db.r5b.12xlarge 48 384 $7.10 - -
db.r6id.12xlarge 48 384 $7.16 - -
db.m6id.16xlarge 64 256 $7.17 - -
db.r7g.16xlarge 64 512 $7.65 $8.84 $11.50
db.r6i.16xlarge 64 512 $7.68 $9.28 $12.06
db.r5.16xlarge 64 512 $7.68 $9.28 $12.06
db.x2g.12xlarge 48 768 $7.82 $9.05 $11.76
db.m6i.24xlarge 96 384 $8.21 - -
db.m5.24xlarge 96 384 $8.21 - -
db.r6gd.16xlarge 64 512 $8.23 - -
db.m6in.16xlarge 64 256 $8.26 - -
db.r6in.12xlarge 48 384 $8.30 - -
db.x2iedn.4xlarge 16 512 $8.88 - -
db.r5d.16xlarge 64 512 $9.14 - -
db.r6idn.12xlarge 48 384 $9.30 - -
db.m6idn.16xlarge 64 256 $9.44 - -
db.r5b.16xlarge 64 512 $9.47 - -
db.r6id.16xlarge 64 512 $9.54 - -
db.m5d.24xlarge 96 384 $10.06 - -
db.x2g.16xlarge 64 1,024 $10.43 $12.06 $15.68
db.m6id.24xlarge 96 384 $10.76 - -
db.m6i.32xlarge 128 512 $10.94 - -
db.r6in.16xlarge 64 512 $11.07 - -
db.r6i.24xlarge 96 768 $11.52 $13.92 $18.10
db.r5.24xlarge 96 768 $11.52 $13.92 $18.10
db.m6in.24xlarge 96 384 $12.39 - -
db.r6idn.16xlarge 64 512 $12.41 - -
db.r5d.24xlarge 96 768 $13.71 - -
db.m6idn.24xlarge 96 384 $14.16 - -
db.r5b.24xlarge 96 768 $14.21 - -
db.r6id.24xlarge 96 768 $14.31 - -
db.m6id.32xlarge 128 512 $14.35 - -
db.r6i.32xlarge 128 1,024 $15.36 $18.56 $24.13
db.m6in.32xlarge 128 512 $16.53 - -
db.r6in.24xlarge 96 768 $16.60 - -
db.x2iedn.8xlarge 32 1,024 $17.77 - -
db.r6idn.24xlarge 96 768 $18.61 - -
db.m6idn.32xlarge 128 512 $18.88 - -
db.r6id.32xlarge 128 1,024 $19.09 - -
db.r6in.32xlarge 128 1,024 $22.14 - -
db.r6idn.32xlarge 128 1,024 $24.81 - -
db.x2iedn.16xlarge 64 2,048 $35.53 - -
db.x2iedn.24xlarge 96 3,072 $53.30 - -
db.x2iedn.32xlarge 128 4,096 $71.07 - -


RDS and Aurora side by side On-Demand instance price

Additional Costs and Considerations

There are several other costs that come with optional features to consider when using RDS or Aurora. These additional costs can add up to significantly impact costs. Two of the most impactful are:

  • Multi-AZ Deployment (RDS) For RDS, you can deploy a Multi-AZ configuration (up to three AZs) to enhance availability and durability. Each standby instance in RDS comes at an additional cost for the instance hours and storage that can double and triple your costs. In contrast, with Aurora, your data is automatically replicated across multiple Availability Zones.
  • Read Replicas (Aurora): Read Replicas in Aurora (up to 15) improve performance for read-heavy workloads; however, each replica is charged at the full instance hour rate, which can substantially increase overall costs as demonstrated in previous scenarios.

It’s also worth noting that RDS offers a free tier for the first year of use while Aurora does not, so this can be a consideration for early-stage projects or small-scale applications.

RDS vs Aurora Pricing Scenario

A medium-sized e-commerce platform is migrating from on-premises to AWS. They require a high-performance relational database with scalability, high availability, and reduced manual management. The platform is located near the US East (N. Virginia) region and uses MySQL. The storage encompasses customer data, order history, and more, and is roughly 1TB a month. The platform has high I/O demands due to frequent reads (e.g., product searches) and writes (e.g., inventory updates). Since the application is I/O-intensive they’re considering Aurora I/O-Optimized if they choose Aurora or RDS Provisioned IOPS (io3) with 5,000 provisioned IOPS if they choose RDS. They prefer On-Demand pricing for flexibility and are looking at the db.r5.4xlarge instance type from the memory-optimized family, offering 16 vCPUs and 128 GB of RAM.

RDS Price Calculations
Storage and IOPS
1TB = 1,000GB
1,000GB x $0.125 per GB-month = $125 storage 
5,000 IOPS x $0.10 per IOPS-month = $500 IOPS 

Instance Hours
730 hours x $1.92 price per hour = $1,401.60 instance hours

Total
$125 storage + $500 IOPS + $1,401.60 instance hours = $2,026.60

Aurora Price Calculations
Storage and IOPS
1TB = 1,000GB
1,000GB x $0.225 per GB-month = $225 storage

Instance Hours
730 hours x $3.02 price per hour = $2,204.60 instance hours

Total
$225 storage + $2,204.60 instance hours = $2,429.60


In this scenario, RDS is 16.59% less than Aurora, making RDS the cost-effective choice. If, say, the e-commerce platform needed to increase the provisioned IOPS, Aurora would become the cost-effective choice after the breakeven point 9,030 IOPS, since I/O is included in the price of Aurora I/O-Optimized but charged $0.10 per IOPS-month for RDS Provisioned IOPS (io3).

Conclusion

While RDS often proves more cost-effective for many use cases, especially those with moderate and predictable performance needs, Aurora’s advanced features and performance capabilities can justify its higher price point for certain scenarios. Also, Aurora’s offerings of Aurora I/O-Optimized and Aurora Serverless can even lead to cost savings in specific situations, namely very I/O-intensive workloads (Aurora I/O-Optimized) or cases with variable or unpredictable traffic patterns (Aurora Serverless).