RDS pricing looks simple until you actually try to build a bill estimate. The pricing page lists instance hours, storage, I/O, backups, data transfer, and optional add-ons like RDS Proxy, each billed separately with their own rate schedules. Most pricing explainers just restate those numbers. This article does something more useful: it takes a real small-app workload and builds the complete monthly bill line by line, then shows exactly what changes when you enable Multi-AZ.
The workload throughout this article: one PostgreSQL database, db.t4g.small instance class (2 vCPU, 2 GiB RAM), 30 GB gp3 storage, standard automated backups, and roughly 10 GB of data transfer out to the internet per month. This is the most common configuration for a production side project or early-stage SaaS running in us-east-1.
Instance Classes: What the t4g Family Actually Costs
The t4g instance family runs on AWS Graviton2 processors and is the most cost-effective option for burstable workloads. These are the right instances for small apps with variable traffic. Here is the current Single-AZ pricing for the tier most small apps care about, all in us-east-1:
| Instance | vCPU | RAM | Single-AZ / hr | Single-AZ / mo | Multi-AZ / hr | Multi-AZ / mo |
|---|---|---|---|---|---|---|
| db.t4g.micro | 2 | 1 GiB | $0.016 | $11.68 | $0.032 | $23.36 |
| db.t4g.small | 2 | 2 GiB | $0.032 | $23.36 | $0.064 | $46.72 |
| db.t4g.medium | 2 | 4 GiB | $0.065 | $47.45 | $0.130 | $94.90 |
Multi-AZ pricing is exactly double the Single-AZ rate. AWS runs a synchronous standby replica in a second Availability Zone and bills you for both instances. The standby is not a read replica, it does not serve traffic, it just exists to absorb a failover event. Whether that insurance is worth the cost depends on your tolerance for downtime during a hardware failure or AZ outage.
Notice that db.t4g.micro has only 1 GiB of RAM. Postgres needs RAM for shared buffers and connection state. Under any real query load, 1 GiB becomes the bottleneck faster than the CPU. Legacy AWS accounts (created before July 15, 2025) get a free tier db.t2.micro or db.t3.micro for 12 months, but for a production workload, start at db.t4g.small.
Storage: gp2 vs gp3 and Why gp3 Wins
Both gp2 and gp3 storage cost $0.115/GB/month on RDS. The difference is what you get for that price. gp2 delivers baseline IOPS of 3 per GB provisioned (so 30 GB gives you 90 IOPS baseline, burstable to 3,000). gp3 gives you a flat 3,000 IOPS and 125 MB/s throughput as the baseline, regardless of how much storage you provision.
For a 30 GB database, gp3 is the obvious choice. You get the same 3,000 IOPS burst that gp2 can reach, but gp3 delivers it consistently without depending on the burst credit bucket. New RDS instances default to gp3 as of late 2023, so this is mostly worth knowing if you inherited an older instance still running gp2.
30 GB of gp3 storage costs $0.115 x 30 = $3.45/month. For Multi-AZ, storage billing does not change — the standby uses a mirrored volume but AWS charges you only for the provisioned primary storage. The instance cost doubles; the storage cost does not.
RDS storage autoscaling is enabled by default when you create a new instance through the console. It sounds helpful: when your database grows past 90% of provisioned storage, AWS automatically expands the volume. What it does not do is shrink it. Once expanded, you pay for that larger volume permanently. Set a maximum storage threshold that matches your actual budget tolerance, or disable autoscaling entirely if you would rather get an alert and resize manually. Expanding storage manually takes about 6 hours, so build headroom into your initial provisioning.
Backup Storage: Free Up to 100%, Then $0.095/GB
Automated backups are stored in S3 and retained for up to 35 days. AWS gives you free backup storage equal to 100% of your provisioned database storage. For a 30 GB database, the first 30 GB of backup storage per month costs nothing.
Beyond that threshold, backup storage is billed at $0.095/GB/month. For most small apps running standard retention windows, you stay within the free allocation. Where this gets expensive is if you keep 35-day retention on a large database, or if you take manual snapshots and forget to delete them. Manual snapshots are not automatically cleaned up and count toward your billable backup storage.
For the workload in this article (30 GB database, 7-day retention, no manual snapshots), backup storage stays within the free tier and costs $0.
Data Transfer: The Line Item Nobody Reads Until They Get the Bill
Data transfer pricing on RDS follows the same structure as the rest of AWS:
- →Same AZ transfers between RDS and EC2: $0.00/GB
- →Cross-AZ transfers within the same region: $0.01/GB
- →Out to the internet (first 100 TB): $0.09/GB
The $0.09/GB egress rate stings in a specific situation: if your application server is outside AWS (a VPS, a developer laptop, a Lambda in a different account) and reads from an RDS instance directly, every query response crosses the internet. At 10 GB of egress per month that is $0.90, but at 100 GB it is $9, and at 1 TB it is $92. Keep your application layer in the same AZ as your RDS instance whenever possible.
For the test workload with 10 GB of egress, data transfer costs $0.09 x 10 = $0.90/month.
The Complete Bill: Single-AZ vs Multi-AZ Side by Side
| Line Item | Single-AZ | Multi-AZ | Notes |
|---|---|---|---|
| db.t4g.small instance | $23.36 | $46.72 | $0.032/hr vs $0.064/hr × 730h |
| 30 GB gp3 storage | $3.45 | $3.45 | Storage is not doubled in Multi-AZ |
| Backup storage (30 GB) | $0.00 | $0.00 | Within free 100% allocation |
| Data transfer out (10 GB) | $0.90 | $0.90 | $0.09/GB to internet |
| Total / month | $27.71 | $51.07 |
Multi-AZ roughly doubles the bill. For a side project or internal tool where a few minutes of downtime is acceptable, Single-AZ is a reasonable choice. For a customer-facing application with an SLA, Multi-AZ is the right answer. The $23.36/month premium buys you automatic failover to the standby within about 60 to 120 seconds during a hardware or AZ failure, without any manual intervention.
RDS Proxy is a managed connection pooler that sits between your application and the database. It is especially useful for Lambda functions, which open a new database connection on every invocation and can overwhelm the Postgres max_connections limit. The cost is $0.015 per vCPU per hour of the underlying DB instance. For a db.t4g.small (2 vCPU) that is $0.03/hr, or about $21.60/month on top of your existing instance cost. For a traditional web server with connection pooling via PgBouncer, skip RDS Proxy entirely.
The Free Tier: What It Covers and When It Expires
The answer depends on when your AWS account was created. AWS changed how the free tier works for accounts created after July 15, 2025. See the AWS free tier guide for the full breakdown.
Legacy accounts (created before July 15, 2025) get 750 hours per month of db.t2.micro or db.t3.micro Single-AZ, plus 20 GB of gp2 storage and 20 GB of backup storage, all free for 12 months from account creation. That is enough to run a single small Postgres instance continuously at no charge. The 750 hours is shared across all RDS instances in the account, so running two instances simultaneously means both start generating charges around the 16th of the month. After 12 months, the free tier expires and you get the full bill starting at the next hour boundary.
New accounts (created after July 15, 2025) do not get dedicated RDS free tier hours. Instead, AWS gives you $100 in automatic credits plus another $100 for completing five onboarding tasks, for a total of $200. Those credits expire after six months or when exhausted, whichever comes first. RDS usage draws from this credit pool at full on-demand rates — once the credits run out, charges start immediately with no dedicated RDS grace period.
Either way, the clock runs from your account creation date, not the date you launched the RDS instance. Check your account age before assuming you still have coverage.
How RDS Compares to DigitalOcean Managed Postgres
For a direct apples-to-apples comparison, DigitalOcean Managed Postgres offers a 2 GiB RAM plan at $30.45/month. That plan includes 25 GB of storage, automated daily backups, automated failover on the HA configuration, and no egress charges for data transferred within the DigitalOcean network.
- Deep AWS ecosystem integration
- IAM database authentication
- Parameter Groups, CloudWatch metrics
- Read replicas in same console
- Egress costs add up at scale
- Storage autoscaling can surprise you
- Flat monthly pricing, no surprise items
- Automated backups included
- No egress charges within DO network
- Simpler configuration surface
- Less AWS ecosystem depth
- Fewer advanced tuning options
At low bandwidth the two are nearly equivalent in monthly cost: RDS Single-AZ at $27.71/month versus DO at $30.45/month. The gap widens when egress volume increases. At 100 GB of data transfer out, RDS adds $9/month in transfer charges while DO adds nothing. At 500 GB, that difference is $45/month.
For Multi-AZ high availability, the comparison shifts. RDS Multi-AZ runs $51.07/month for this workload. DigitalOcean's HA (two-node standby) configuration for the same 2 GiB RAM tier runs approximately $60.90/month. RDS Multi-AZ is the better deal at this size, assuming your workload stays inside AWS and egress stays low.
The real question is not which is cheaper in absolute terms. It is where the rest of your stack lives. If your application is on EC2 or ECS in us-east-1, RDS is the natural choice and the same-AZ transfer savings offset the price difference quickly. If you are on DigitalOcean Droplets or a platform outside AWS, the $0.09/GB egress rate turns RDS into a recurring tax on every query result. For a broader look at how both providers stack up across multiple database types and sizes, the managed Postgres cost comparison covers Supabase, Railway, and Neon alongside RDS and DO.
First: set a maximum autoscaling threshold or disable autoscaling if you are provisioning a fixed-size database. Second: set a CloudWatch billing alarm on your RDS cost dimension so storage expansion or unexpected egress triggers a notification before it becomes a surprise on the bill. Third: confirm your application server is in the same Availability Zone as your RDS instance. Cross-AZ data is charged at $0.01/GB, and that adds up faster than you expect for a read-heavy app.
RDS is not overpriced relative to what it delivers. Automated backups, automated minor version upgrades, Multi-AZ standby, read replicas, IAM authentication, and deep CloudWatch integration are genuinely useful. The billing complexity is the real cost, not the dollar amounts themselves. Know which line items apply to your workload before you launch, and the actual monthly number will be exactly what you modeled.
Use the database cost calculator to model your specific workload across RDS, DigitalOcean, and Railway side by side.