Amazon RDS vs RDS Custom vs Self-Managed Database on EC2: Choosing the Right Control Boundary

· 11 min read ·
AWSArchitecture

Every database deployment on AWS involves a trade-off between how much AWS manages and how much control customers retain. The three options — Amazon RDS, RDS Custom, and a self-managed database on EC2 — represent three distinct positions on that spectrum. Picking the wrong one either leaves customer paying for management they didn’t need or fighting AWS automation for access they should have had from the start.

This writeup is about understanding where the control boundary sits in each model, and which workloads belong in each one.


The Control Spectrum

Before comparing options, it helps to be precise about what “control” means in this context. There are roughly five layers where it matters:

LayerWhat it covers
OSPatching, kernel parameters, OS-level tuning, direct SSH
Database binaryEngine version, patch application, custom builds
Database configpg_hba.conf, my.cnf, init scripts, extensions, plugins
StorageDisk type, filesystem, I/O scheduler, direct volume access
HA & replicationFailover mechanism, replica topology, replication lag visibility

Amazon RDS controls all five on customer’s behalf. RDS Custom gives customer access to OS and some database binary layers while AWS still manages infrastructure. Self-managed EC2 gives them all five but makes them responsible for all five.


Amazon RDS

RDS is a fully managed relational database service. AWS handles provisioning, OS patching, database engine patching, backups, Multi-AZ failover, and read replica management. User interact with the database through its endpoint — there is no SSH, no OS shell, no direct filesystem access.

What Customer Get

What They Give Up

They cannot:

Supported Engines

MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, and Amazon Aurora (MySQL-compatible and PostgreSQL-compatible). The exact feature set varies by engine — Oracle and SQL Server have the most restrictions because of licensing constraints.

When RDS Is the Right Choice

RDS is the correct default for most production workloads. The managed overhead it removes (patch cycles, backup validation, failover testing) is genuinely expensive to replicate yourself.


RDS Custom

RDS Custom sits between fully managed RDS and self-managed EC2. It gives customers SSH access to the underlying EC2 instance and direct access to the database binary and OS, while AWS still manages the infrastructure primitives (networking, storage, backups at the snapshot level).

RDS Custom currently supports Oracle and SQL Server. It exists specifically for those engines because enterprise Oracle and SQL Server deployments frequently require OS-level customisation that standard RDS does not permit.

What Customers Get (Beyond Standard RDS)

The Automation Boundary

RDS Custom introduces the concept of a pause automation window. If engineer make changes to the instance that AWS automation does not expect (restarting the database manually, modifying system files), they first pause RDS Custom automation, make the changes, then resume automation. If they skip this step, AWS automation may detect the unexpected state and attempt to remediate it, potentially undoing the changes.

This is the key operational difference from standard RDS: engineers are not fully shielded from the infrastructure layer, which means they can break things that RDS would have protected them from.

When RDS Custom Is the Right Choice

If customers are not running Oracle or SQL Server, RDS Custom is not available to them — and for MySQL and PostgreSQL workloads, the combination of standard RDS parameter groups and extensions covers the vast majority of production requirements.


Self-Managed Database on EC2

Running own database engine on an EC2 instance gives engineer complete control over every layer. They choose the OS, the engine version, the build flags, the storage configuration, the replication topology, and the backup strategy. They also own every failure.

What Customer Get

What Customer Own

Everything RDS handles automatically becomes customer’s operational responsibility:

Storage Considerations

The storage choice matters significantly for a self-managed database. io2 Block Express gives customers up to 256,000 IOPS and 4,000 MB/s throughput per volume, which exceeds what any current RDS instance can deliver. For write-heavy OLTP workloads that have saturated RDS storage performance, this is the primary technical reason to consider self-managed EC2.

Instance store (NVMe SSD physically attached to the host) delivers the highest IOPS and lowest latency of any storage option in AWS, with no network path. The tradeoff is that instance store is ephemeral — data is lost if the instance stops or is terminated. Using instance store for a production database requires a robust replication strategy where the instance store is never the only copy of the data (typically: primary on instance store, synchronous replica on EBS, WAL streaming to S3).

When Self-Managed EC2 Is the Right Choice

Self-managed EC2 is not the right choice because “we want more control” in the abstract. The operational cost is real and recurring — every hour spent on patching cycles, backup validation, and HA incident response is an hour not spent on the application.


Side-by-Side Comparison

DimensionRDSRDS CustomSelf-Managed EC2
OS accessNoneYes (SSM)Yes (SSH)
Engine patchingAWS-managedSharedCustomers
OS patchingAWS-managedCustomersCustomers
Backup / PITRAutomatedAutomatedCustomers
Multi-AZ failoverAutomatedAutomatedCustomers
Read replicasManagedManagedCustomers
Custom extensionsParameter groups onlyFull accessFull access
Storage autoscalingYesYesManual
Supported enginesMySQL, PG, MariaDB, Oracle, SQL Server, AuroraOracle, SQL ServerAny
Cost premiumRDS markup on instanceRDS markup on instanceRaw EC2 price
Operational burdenLowMediumHigh

The Cost Reality

RDS charges a premium over raw EC2 pricing for the same instance family. For a db.r6g.2xlarge (8 vCPU, 64 GB RAM), the on-demand price in ap-southeast-1 is roughly:

The gap narrows significantly with Reserved Instances. A 1-year no-upfront Reserved Instance for RDS cuts the price roughly in half, as does a 1-year Reserved Instance for EC2. At reserved pricing, the operational cost of self-managing often exceeds the savings unless the team already has the tooling built and the expertise in-house.

Aurora Serverless v2 changes the calculus for variable workloads — it scales in 0.5 ACU increments, which means customers pay for actual consumed capacity rather than a fixed instance size. For workloads with significant idle periods (dev/staging, overnight batch jobs, seasonal traffic), Aurora Serverless v2 can be materially cheaper than a fixed RDS instance.


Decision Framework

Start with RDS unless customer have a specific reason not to. Then work through these questions:

Is engine supported by RDS?

Do customer need OS-level access or custom Oracle/SQL Server configurations?

Do customer need storage performance beyond RDS limits, or a replication topology RDS cannot provide?

Do customer have a dedicated DBA team with capacity to own patching, HA, and recovery tooling?

The control boundary is not about preference. It is about which failure modes customer are equipped to handle and which ones customer would rather outsource.

Further Reading