Amazon RDS vs. EC2: Where to Host Your MySQL Database in AWS?
Amazon RDS and EC2 are two key database hosting options when you think of AWS for hosting MySQL, a relational database. However, choosing between fully managed and self-managed databases is challenging, whether you’re migrating from on-premises to the cloud or starting fresh.
For example, Airbnb was having issues scaling their self-managed MySQL database servers through their old provider. This happened just when they wanted to continue expanding their business.
Airbnb switched their main database to the fully managed Amazon Aurora service, which also integrated smoothly with ElastiCache and DynamoDB. The frictionless ability to scale and manage their new stack was a key AWS benefit. As Airbnb Co founder Nathan Blecharczyk commented:
“It was great to be able to ramp up more servers without having to contact anyone and without having minimum usage commitments. AWS is the easy answer for any Internet business that wants to scale to the next level.”
This post covers criteria to evaluate the AWS RDS vs EC2 decision many companies face for database hosting. You might resemble Airbnb’s scenario or others, where such decisions seem to be difficult to make. So let’s begin!
What is Amazon RDS?
Amazon Relational Database Service (RDS) offers a fully managed database hosting option in AWS. RDS makes it easy to set up, operate, and scale popular relational databases including MySQL, PostgreSQL, MariaDB, Oracle, and SQL Server. It automatically configures database instances based on selected capacity for CPU, memory, storage and networking.
Also, database engine patching, backups, scaling, replication, operating system and hardware provisioning are handled behind the scenes. In addition, the pricing model charges only for capacity provisioned per hour as needed rather than term licensing.
What is Amazon EC2?
Amazon Elastic Compute Cloud (EC2) provides on-demand, secure virtual server capacity that can be provisioned through a web interface. EC2 allows spinning up customizable virtual machines to serve as flexible compute capacity for databases, applications, containers and more. Users have complete control over resources and environments.
Capacity scales to meet dynamic workload demands. EC2 enables focusing on business logic rather than hardware management by handling infrastructure behind the scenes. Pricing allows paying for only the capacity used per hour without commitments.
A brief overview: Amazon RDS vs. EC2-Hosted MySQL
Hosting a MySQL database on an Amazon Elastic Compute Cloud (EC2) instance will give you full control and flexibility over your MySQL database. It surpasses the limitations of Amazon RDS (Amazon Relational Database Service) while also utilizing all the benefits of the Amazon Cloud platform and services. In addition, you can choose the underlying building blocks, such as storage settings, underlying operating systems, and database configuration.
However, having complete control and freedom over an EC2-hosted MySQL database comes at a cost. You lose the managed capabilities included in Amazon RDS database, increasing daily management overhead.
While both the services have pros and cons, let’s compare them based on various factors to help you choose the best option.
Administration: Amazon RDS vs. EC2
Amazon RDS: It automatically carries out the tasks involved in the administration of a database. This includes software patching, upgrades to latest database versions, backup management, replication setup, failure detection and recovery operations and more. As such you avoid having a dedicated resource carry out these tasks.
RDS uses automated failover to keep database operations unaffected by outages due to underlying hardware issues or database engine rebooting. You also get notifications about planned upgrades 2 months before deployment in addition to notifications about upgrades that require your involvement.
However, RDS does not let you have SSH access or allow you to directly access the operating system and database configuration files. Certain administration settings are also unavailable to modify under RDS managed service.
Amazon EC2: On the other hand, you have unhindered access to the EC2 instance and the database running on it. You are responsible for carrying out administrative activities that ensure smooth operations like patches, upgrades, backups, replications and high availability setup.
You have access through SSH to directly configure the database settings based on your application’s performance and availability requirements. But you also need dedicated DBA resources for ongoing management using best practices for database administration.
Overall RDS lower administration costs through automation while EC2 provides more control and customization ability around database administration activities.
Availability: Amazon RDS vs. EC2
Amazon RDS: It provides multi-availability zone installations for hosting your MySQL database, ensuring high availability for your application. When you supply a Multi-AZ database instance, RDS automatically creates a primary database instance. Additionally, it makes a copy of the data to use as a backup in a different availability zone (AZ). To know more about its benefits, read this detailed article on multi-region databases.
However, the availability impact is restricted to the amount of time it takes for the automatic failover to finish, in case of a DB instance or Availability Zone failure. And for Amazon Aurora, it takes less than a minute, compared to up to two minutes for other database engines.
For Multi-AZ setups, operations like DB Instance scaling and system upgrades like OS patching are executed first on standby before an automatic failover. As a result, the impact on your availability is minimal and only lasts for the duration of the automatic failover process.
To avoid any unwanted effects of the backup process on application performance, RDS creates a backup from a standby replica. In addition, an automatic failover method provided by Amazon RDS modifies the DB instance’s DNS record to point to the backup DB instance.
However, Amazon RDS’ high availability feature is not a scalable option.
Amazon EC2: On the other hand, you can use partial replication on a MySQL database that is hosted by AWS EC2. To achieve high availability, you can also employ conventional statement-based replication.
Using AWS’s AZs and AWS regions in this configuration is also possible, but doing so requires explicit configuration. Self-hosted environments come with asynchronous replication by default when hosting a MySQL database. At the same time, MySQL Cluster can be used to implement synchronous replication.
Amazon RDS can be the winner here as it has in-built availability. Whereas, with EC2, it is your responsibility to configure the database servers for improved availability.
Costs: Amazon RDS vs EC2 MySQL Pricing
Amazon RDS: You only pay for what you use when hosting your MySQL database on Amazon RDS. You have the choice of paying using Reserved or On-Demand instances. You are free to choose among the available instance types based on your use case.
To know more, check out this detailed blog on Amazon RDS pricing and tips to optimize RDS costs.
Amazon EC2: For EC2, you have the option to employ Reserved instances and savings plans to cut costs. In addition, the On-Demand and Spot instances are additional payment options.
You can choose the on-demand pricing model if:
- Your use case involves an application with unpredictable workloads and short-term objectives, and
- You are seeking lower costs and flexibility without any upfront payments
Apps with users having urgent computing demands and apps with flexible start and end durations can use Spot instances. If you intend to use your current server-bound software licensing, EC2 also lets you maintain a dedicated host.
Let’s take one cost exercise for better understanding:
The most affordable Amazon RDS (the AWS-managed database service) tier is about USD 15 per month. MySQL installation on your application server is “free” in comparison.
When your application requires a little more CPU and RAM, and you start looking for database servers with, let’s say, 4 vCPUs and 16 GB of RAM (db.m4.xlarge on Amazon RDS), you can expect to pay roughly USD 762 per month on Amazon RDS, assuming you have 1 TB of data. That configuration (t4g.xlarge) would only cost you about USD 200 a month on AWS EC2.
As you can see, EC2 is a clear winner here. As a fully managed database service, RDS comes with premium pricing compared to a self-managed service with an on-demand cost model.
For more cloud cost optimization tips (that even AWS won't tell you)
Measuring performance: Amazon RDS vs EC2
Amazon RDS: You can configure an RDS instance to have a specific amount of provided IOPS when setting it up. And although provisioning IOPS can be costly, it gives you access to quick, dependable, and consistent input/output performance. In addition, you can gain insight into database performance thanks to Amazon RDS’ close integration with Amazon CloudWatch.
Amazon EC2: To use EC2 and obtain the IOPS and latency required, you must select the appropriate storage volume. AWS Cloudwatch can be used with EC2 as well to track database performance. You can also use third-party database monitoring solutions to gain information on database performance.
From a monitoring standpoint, there is no clear winner here. RDS is tightly integrated with CloudWatch for gaining insights into database performance. As for EC2, you can use CloudWatch as well as third-party monitoring tools for the same.
Scalability: Amazon RDS vs EC2
Amazon RDS: Amazon RDS allows you to separately increase CPU, RAM, storage, and IOPS. But not when Multi-AZ is enabled. It is because it takes some time to upgrade the standby database first.
To improve the performance of read-intensive applications, horizontal scaling can be done via read replicas. There are no limits on the number of read replicas you can have for a hosted MySQL database, but you can have up to five on Amazon RDS.
To know more about database scaling methods, check out this blog post on bottlenecks of scaling databases and how to solve them.
Amazon EC2: Scaling databases with AWS services is as simple as baking a pie. Given that AWS’s cloud services are created to address the increasing demands of applications. Using EBS volumes and EC2, you may increase your database’s scalability by up to 64,000 IOPS. Additionally, by fine-tuning your MySQL configuration, you can improve its performance.
In terms of increasing volume size, performance tuning, and switching the volume type while it is in use, the EBS volume feature is excellent. Even if you change these configurations, it still allows you to use the database as is.
Both services offer great scalability. However, scaling can be seamless with RDS as it is closely integrated with Amazon’s tools and managed by AWS. But while much of scaling with EC2 is a manual affair, it offers better control and flexibility.
Backup: Amazon RDS vs EC2
Amazon RDS: By default, RDS gives you the option to safely store data and generate automated backups of your Amazon RDS DB instance in Amazon S3. Moreover, it enables you to back up your instance using user initiative. They are retained until the user specifically deletes them.
Anytime you choose, you can start a fresh instance from a database snapshot. Although database snapshots act as full backups when necessary, you are only charged storage costs for incremental utilization.
Automated backups, point-in-time recovery, database snapshots, and even snapshot sharing, where you may share a manual DB snapshot with other AWS accounts, are all made possible by Amazon RDS.
Amazon EC2: If your AWS MySQL database is hosted on an EC2 instance, you’ll have to manage Amazon EBS, specifically automating your MySQL Amazon EBS volume snapshots. To avoid data loss, you should take snapshots when there are no active read operations because of data consistency.
Using AWS Command Line Interface or Amazon CloudWatch events, you can also automate the creation of snapshots. Using AWS Command Line Interface or Amazon CloudWatch events, you can also automate the creation of snapshots.
To sum up, RDS is the clear winner when it comes to backups. You can automate backups with RDS, but you need to enable backups manually with EC2.
Comparative analysis of Amazon EC2 vs. RDS
|Full SSH access and control of everything including MySQL config files but responsibility for all aspects of management. Need dedicated DBA resources.
|Fully managed service handles upgrades, patching, replication, backups etc. Limited access to advanced database customization due to blackbox model.
|Manual setup of replication and redundancy across AZs/regions. Self-hosted MySQL has asynchronous replication. Less downtime if properly configured
|Multi-AZ redundancy and automated failover by default for high availability. Max downtime of 2 mins for failover. Not infinitely scalable for very high workloads
|Premium costs as a managed service, starts from $15/month for entry config. Scale up compute and storage as needed
|Only pays for EC2 compute used. Can be much cheaper to self-host MySQL at $200/month for equivalent config
|Can use CloudWatch as well, plus third party tools. Fine control over storage types/capacity/performance
|Integrated with CloudWatch for metrics and monitoring. Can provision additional IOPS for consistent performance
|Manual scaling but very high capacity of 64,000 IOPS theoretically supported. Tight control over MySQL config tuning
|Separately auto-scale computing power, RAM, storage. Horizontally scale read load via read replicas. Limited to 5 read replicas.
|Manually take EBS snapshots for consistency. Automation and lifecycle management has to be custom built.
|Automated backups to S3 with configurable retention. Does snapshots and point-in-time recovery. Share snapshots across accounts.
How to choose between Amazon RDS and AWS EC2?
The primary decision between using Amazon RDS or self-managing database servers on EC2 instances revolves around whether an organization prefers manual control or automated management.
RDS provides easy API-driven database administration, removing the burden of mundane tasks like backups, patching, replicas, etc. But the tradeoff is less flexibility around things like using customized database versions.
With EC2, complete control is possible but requires extensive effort for security, reliability, scaling, and routine maintenance.
Evaluate current workloads, budget constraints, and existing infrastructure strategy to map out the optimized path between the two options.
Benefits of choosing Amazon RDS for MySQL database
- Easy deployment
To build, edit, and destroy your database instances with RDS, you can either utilize the AWS management console or a collection of APIs. For all of your MySQL instances, you will have complete control over security and access. In addition, Amazon RDS, a managed database service, features a simple procedure for managing database backups and snapshots.
You have pre-configured MySQL database instances with configurations and parameters tailored to the chosen instance type. However, with the help of easy-to-use database parameter groups, you will have good control over these settings. For your database instances, these groups offer granular-level control and customization options.
- Fast storage options
Your MySQL database instances can be backed up and recovered using Amazon RDS’ automated backup services at any point in time within your selected retention periods (up to 35 days). Additionally, you can manually start backups of your instances, and Amazon RDS will keep all of these backups until you specifically delete them. It has never been this simple to back up the data.
For your database instances, there are storage options with SSD backing. Furthermore, the general purpose storage option gives you access to the cost-effective storage solution for smaller or medium-sized workloads. Finally, provisioned IOPS Storage offers constant storage performance of up to 40,000 I/Os per second for supporting high-performance applications.
- High availability
We all know that the complexity of physical hardware configurations makes it difficult to achieve high availability of databases using an on-premises setup. It is challenging as there are so many variables involved that must coordinate seamlessly. Moreover, it does not even take into account the requirement for numerous geographically dispersed data centers.
Your MySQL database instances can gain improved availability and durability using Amazon RDS Multi-AZ deployments, which makes them a suitable fit for production database applications. In addition, for read-intensive workloads, it is simple to elastically scale out beyond the limitations of a single database instance by using Amazon RDS Read Replicas.
Benefits of using EC2 for hosting MySQL database
Unlike physical servers, where you need to install another database server and consider what to do with the remaining resources, Amazon EC2 allows you to instantly extend or decrease your database’s infrastructure with only a few clicks.
EC2 is an excellent alternative to on-premises setup but not as effectively scalable as managed services. Since you don’t need to maintain the intricate configuration or think about adding another physical server while raising the hosting server’s capacity.
- Pay-as-you-go model
With AWS EC2, you can avoid paying upfront expenses by selecting a pricing model corresponding to your consumption spikes. That way, it only bills you for the actual usage, in contrast to an on-premises setup where you must pay upfront fees.
Read more on how to choose the right database on AWS
Migrating your MySQL database to AWS may prove practical rather than hosting it on-premise. Both the AWS solutions- RDS and EC2- provide cost-effectiveness and a good deal in terms of infrastructure and maintenance.
While Amazon RDS offers significant administrative relief by automating MySQL database management and configuration, it also frees you up to concentrate on other crucial duties like developing the application’s fundamental logic.
With a minor drawback of additional operational expenses, Amazon EC2 is more focused on offering total control and flexibility over MySQL databases.
You must fully comprehend your use cases to select the best solution. Simform, as an AWS advanced consulting partner, has built a credible portfolio by helping clients take and implement such tough decisions. If you find yourself in such a dilemma, get in touch with our AWS solution architects and professionals to move things along.