TL;DR. RDS pricing is the sum of up to nine meters, and the instance rate is often less than half of them. In our worked example, a Multi-AZ db.r7g.large on RDS for PostgreSQL with 1,000 GB of gp3 and one read replica costs $1,183.41 a month at US East list prices, and the instance lines are 44% of it. A Database Savings Plan discounts only those instance lines, by 20% on this class, which cuts the whole bill by 8.8%. To see which line is growing on your own account, you need cost per database, and the Cost and Usage Report splits one database across its instance ARN, its snapshot ARNs and data transfer rows with no resource ID at all.

RDS pricing pages lead with an hourly instance rate, and most comparisons stop there. The bill does not. It adds storage per GB allocated, IOPS above a baseline, backups beyond a free allowance, data transfer, and per-vCPU options that scale with the instance. This post prices each line from AWS's own price list, builds one bill step by step, and then shows how to find those lines for each database you run.

Nine meters make up the RDS bill

All prices below are US East (N. Virginia) on-demand rates for RDS for PostgreSQL, taken from AWS's public price list for Amazon RDS (publication of October 26, 2026), read on October 27, 2026. Single-AZ rates first, Multi-AZ with one standby second:

MeterHow it is billedUS East list price
Instance hoursper instance-hour, per second after a 10-minute minimumdb.r7g.large $0.239, Multi-AZ $0.478
Storageper GB-month allocated, used or notgp2 and gp3 $0.115, Multi-AZ $0.23; io1 and io2 $0.125, Multi-AZ $0.25
IOPS and throughputper IOPS-month or MiB/s-month above the gp3 baseline; every provisioned IOPS on io1 and io2gp3 $0.02 per IOPS, $0.08 per MiB/s; io1 $0.10 per IOPS
Backup storageper GB-month beyond the free allowance$0.095
Snapshot export to S3per GB of snapshot size$0.010
Data transferper GB out to the internet, other Regions, or EC2 in another Availability Zone$0.09 to the internet (first 10 TB), $0.01 each way across AZs
Extended Supportper vCPU-hour on a major version past standard support$0.10 in years 1 and 2, $0.20 in year 3
RDS Proxyper vCPU-hour of the instances behind the proxy$0.015
Database Insightsper vCPU-hour monitored, billed by CloudWatch$0.0125

Three rules on AWS's pages change how to read this table. Per-second billing applies after "a billable status change, such as starting, creating, or modifying", with a 10-minute minimum. Backups are free "up to 100% of your total database storage for a region", counted across the Region, not per instance. And on gp3 for PostgreSQL, volumes of 400 GiB and more get a 12,000 IOPS and 500 MiB/s baseline, while smaller volumes get 3,000 IOPS and cannot provision more.

Snapshot export charges the whole snapshot, whatever you export. AWS's own example: a 10 GB table filtered out of a 100 GB snapshot is billed as "100GB * $0.013 per GB of snapshot size". The price list rate for PostgreSQL in US East is $0.010.

Data transfer is the line most teams skip. Replication to a Multi-AZ standby and to read replicas in the same Region is free. Traffic between your application on EC2 and RDS in a different Availability Zone is not: AWS's architecture blog puts it at "$0.01/GB in and $0.01/GB out".

The Free Tier covers "750 hours on a selection of Single-AZ instance databases, 20 GB of General Purpose SSD (gp2) storage, and 20 GB of storage for automated database backups each month for one year". The worked bill below is far past it: 1,000 GB of storage against 20.

A worked RDS bill, from Single-AZ to Multi-AZ plus a replica

Consider one production PostgreSQL database in US East: a db.r7g.large (2 vCPUs, 16 GiB), 1,000 GB of gp3 provisioned at 16,000 IOPS, 600 GB of backup storage billed beyond the free allowance, and 200 GB a month sent to the internet beyond the global free 100 GB. At 730 hours a month:

LineSingle-AZMulti-AZMulti-AZ plus one Single-AZ read replica
Instance730 × $0.239 = $174.47730 × $0.478 = $348.94$348.94 + $174.47 = $523.41
Storage, 1,000 GB gp3$115.00$230.00$230.00 + $115.00 = $345.00
4,000 IOPS above the 12,000 baseline4,000 × $0.02 = $80.004,000 × $0.04 = $160.00$160.00 + $80.00 = $240.00
Backup storage, 600 GB$57.00$57.00$57.00
Internet egress, 200 GB$18.00$18.00$18.00
Total per month$444.47$813.94$1,183.41
Instance share of the bill39%43%44%

Multi-AZ doubles three lines. Storage and extra IOPS bill at twice the Single-AZ rate, like the instance, so the step from Single-AZ to Multi-AZ adds $369.47, of which only $174.47 is compute. The read replica is billed as a standard DB instance with its own storage, and we gave it the same volume and IOPS as the primary.

The instance is under half the bill here. That depends on the shape: a database with 100 GB of gp3 and no extra IOPS would be mostly instance. The point is that the split is a property of each database, and you have to measure it to know which lever matters.

Multi-AZ DB cluster: about the same price as Multi-AZ plus a replica

The third RDS deployment option, a Multi-AZ DB cluster, runs one writer and two readable standbys in three Availability Zones. It only runs on the classes AWS lists for it, such as db.r6gd, db.m6gd and db.r8gd. Price list rates for RDS for PostgreSQL, assuming the same 12,000 IOPS gp3 baseline:

LineMulti-AZ DB cluster, db.r6gd.largeMulti-AZ db.r7g.large plus replica
Instance730 × $0.722 = $527.06$523.41
Storage, 1,000 GB gp31,000 × $0.345 = $345.00$345.00
4,000 extra IOPS4,000 × $0.06 = $240.00$240.00
Subtotal$1,112.06$1,108.41

At list price the two layouts land within $4 a month of each other. The cluster's two readers are automatic failover targets that also serve reads; a read replica serves reads and becomes a standalone instance only when you promote it. RDS sets cluster storage throughput itself from the IOPS you provision, so a throughput charge may apply that we did not model.

Stacked bar chart of the worked RDS for PostgreSQL bill at US East list prices. Single-AZ costs $444.47 a month, Multi-AZ $813.94, and Multi-AZ with one read replica $1,183.41. In each bar the instance hours segment is under half the total; storage, IOPS, backups and egress make up the rest, and those lines are outside any Reserved Instance or Database Savings Plan discount.

What Reserved Instances and the Database Savings Plan cover

Both commitments discount instance hours and nothing else. The Database Savings Plan is a one-year, no-upfront commitment in dollars per hour that "automatically appl[ies] to eligible serverless and provisioned instance usage regardless of engine, instance family, size, deployment option, or AWS Region". The Savings Plans FAQ adds two limits: it covers "Generation 7 and newer instances", and it "cannot be combined with Reserved Instances" on the same workload.

In the US East Database Savings Plan rate file, every RDS rate is for instance hours or Aurora Serverless capacity: no storage, IOPS, backup or transfer line appears. Applied to the instance lines of the third column above:

Pricing modelInstance lines per monthSaving on instancesSaving on the $1,183.41 bill
On-demand$523.41
Database Savings Plan, 1 year, no upfront$418.7320.0%8.8%
Reserved Instances, 1 year, no upfront$403.1823.0%10.2%
Reserved Instances, 3 years, all upfront ($9,990)$277.50 amortized47.0%20.8%

On a steady Graviton fleet, a one-year Reserved Instance beats the Savings Plan. The plan's value is flexibility across engines, sizes and Regions, which matters during a migration or a consolidation. It does not cover a db.m6i, db.r6g or db.r6gd at all: none appears in the rate file. PostgreSQL Reserved Instances are size-flexible within a family, which removes part of the reason to prefer the plan.

Neither touches $660 of this bill. Storage, IOPS, backups and egress stay at list price under every commitment, and Extended Support is billed on top. If this deployment ran PostgreSQL 13, billed for Extended Support since March 1, 2026 (dates and exits in RDS Extended Support pricing), it would add $0.10 × 2 vCPUs × 730 hours = $146 per instance. AWS charges it on "all instances in a Multi-AZ deployment" and on read replicas, so $438 a month across the three here.

See your own RDS bill per database

Start with usage types. They name the meter:

aws ce get-cost-and-usage \
  --time-period Start=2026-09-01,End=2026-10-01 \
  --granularity MONTHLY --metrics UnblendedCost \
  --filter '{"Dimensions":{"Key":"SERVICE","Values":["Amazon Relational Database Service"]}}' \
  --group-by Type=DIMENSION,Key=USAGE_TYPE

The lines to look for, as the US East price list names them, are InstanceUsage: and Multi-AZUsage: for compute, RDS:GP3-Storage and RDS:Multi-AZ-GP3-Storage, RDS:GP3-PIOPS, RDS:ChargedBackupUsage, and ExtendedSupport: entries. That shows which meter is growing, but not which database.

For that, a CUR 2.0 export with resource IDs gives one row per resource and usage type:

SELECT line_item_resource_id,
       line_item_usage_type,
       SUM(line_item_unblended_cost) AS cost
FROM cur2  -- your CUR 2.0 table in Athena
WHERE line_item_product_code = 'AmazonRDS'
  AND bill_billing_period_start_date = TIMESTAMP '2026-09-01 00:00:00'
GROUP BY 1, 2
ORDER BY cost DESC;

Three gaps stop that query from being cost per database:

  1. Snapshots bill under their own ARN. AWS states that for backup storage "the ResourceId field shows the snapshot ARN instead of the DB instance ARN". Map them back with aws rds describe-db-snapshots --query 'DBSnapshots[].[DBSnapshotArn,DBInstanceIdentifier]'. The free allowance is applied across all snapshots, so per-snapshot totals will not match older instance-level totals.
  2. Data transfer has no owner. line_item_resource_id "is blank for usage types that aren't associated with an instantiated host, such as data transfers", per the same CUR dictionary.
  3. Reservations zero the rate. For RDS rows with a Reserved Instance applied, "the UnblendedRate is 0", so read the amortized reservation columns, not unblended cost, to price a reserved database.

Cost Explorer can group by resource too, but only for the past 14 days at daily granularity. Tags then turn resources into owners; RDS cost optimization covers tagging and what to cut once each database has a number.

Why the RDS bill grows when nobody changes anything

The case against pricing every line

The strongest objection: compute is the line that moves, storage is a fixed cost of keeping data, so commitments and right-sizing are where the money is. That holds for small volumes with default IOPS. It weakens as data accumulates, because storage cannot shrink, provisioned IOPS are a choice someone made once, and the Multi-AZ step doubles both. In our example, 56% of the bill sits outside every commitment.

The limits of this post: prices are US East list prices for RDS for PostgreSQL, read on October 27, 2026; other Regions, engines and negotiated discounts differ. The worked bill is hypothetical, not a measurement of a real account. We did not model gp3 throughput above the baseline, Database Insights retention charges, or cross-Region replicas at $0.02 per GB.

Where Datapace fits

Pricing a database means reading its instance, volume, IOPS, snapshots and transfer together, and the bill files them under different IDs. Datapace is building one map of your data estate with usage and cost attached, and agents that propose changes as pull requests your team reviews and merges. To work out which lines to cut once you can see them, read RDS cost optimization: measure each instance before you cut.

Sources

  1. AWS, Price List API offer file for Amazon RDS, US East (N. Virginia), publication of October 26, 2026, read October 27, 2026 (instance, Multi-AZ, Multi-AZ DB cluster, storage, IOPS, throughput, backup, snapshot export, Extended Support, RDS Proxy and Reserved Instance rates).
  2. AWS, Price List API rate file for Database Savings Plans, US East, publication of October 26, 2026 (plan rates for db.r7g.large; usage types covered).
  3. AWS, Price List API offer files for AWS Data Transfer and Amazon CloudWatch, US East (internet egress tiers; Database Insights per vCPU-hour).
  4. AWS, Amazon RDS for PostgreSQL pricing (per-second billing, free backup allowance, snapshot export example, Free Tier, Extended Support on Multi-AZ and replicas).
  5. AWS, Database Savings Plans pricing and Savings Plans FAQ.
  6. AWS, Amazon RDS FAQs (Reserved Instance size flexibility).
  7. AWS, Amazon RDS DB instance storage, storage autoscaling, read replicas, Multi-AZ DB clusters and deleting a DB instance.
  8. AWS, DB instance billing for Amazon RDS and Tagging Amazon RDS resources (snapshot ARN attribution).
  9. AWS, Release calendar for Amazon RDS for PostgreSQL (PostgreSQL 13 Extended Support year 1 pricing from March 1, 2026).
  10. AWS, CUR 2.0 line item columns and Cost Explorer resource-level data.
  11. AWS Architecture Blog, Exploring Data Transfer Costs for AWS Managed Databases.