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 |
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 |
- |
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 |
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 | - | - |
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).
Lower your AWS costs.