- The five separate meters that compose every RDS invoice
- Why Multi-AZ doubles the two biggest meters, and when that is worth it
- What the free tier actually includes and when it silently ends
- Two worked examples: a hobby single-AZ instance and a real production setup
- Reserved instances, and the cases where a simpler managed Postgres is the better spend
Amazon RDS is AWS's managed relational database service - it runs Postgres (and MySQL, MariaDB, SQL Server, Oracle) on instances AWS patches and monitors for you. Its pricing page is famously long because RDS does not have a price; it has five meters, and your invoice is whatever they add up to. The instance price everyone quotes is just the first meter, and on real production bills it is often barely half the total.
Meter 1: instance hours
Every RDS instance bills per hour it exists (running - stopped instances still bill for storage, and auto-restart after seven days). On-demand Postgres prices in us-east-1 look like this:
Instance | vCPU / RAM | ~Hourly | ~Monthly (730 h) |
|---|---|---|---|
db.t4g.micro | 2 vCPU / 1 GB | $0.016 | $12 |
db.t4g.small | 2 vCPU / 2 GB | $0.032 | $24 |
db.t4g.medium | 2 vCPU / 4 GB | $0.065 | $47 |
db.m6g.large | 2 vCPU / 8 GB | $0.187 | $137 |
db.r6g.large | 2 vCPU / 16 GB | $0.24 | $175 |
The t4g family is burstable: it earns CPU credits while idle and spends them under load. A t4g that runs hot around the clock either throttles or (with unlimited mode on) quietly bills for the extra CPU - a classic 'why did my bill grow' line item.
Meters 2 and 3: storage and IOPS
General-purpose gp3 storage bills at about $0.115 per GB-month and includes a baseline of 3,000 IOPS. Past that you pay for provisioned IOPS separately, and io1/io2 volumes for genuinely I/O-heavy databases bill dramatically more. For most small Postgres workloads storage is a modest line - 50 GB is under $6 - but it never shrinks: RDS volumes can grow, not contract, so over-provisioning is permanent.
Meter 4: backup storage
Automated backup storage equal to 100% of your provisioned database size is free. Past that - longer retention, manual snapshots that pile up, write-heavy databases whose daily change volume is large - it bills at about $0.095 per GB-month. Snapshot sprawl is one of the most common findings in any AWS cost audit.
Meter 5: data transfer
Traffic into RDS is free. Traffic out to the internet bills at $0.09/GB. The one that surprises people is cross-AZ traffic: if your app servers sit in a different availability zone than the database, every query's response pays $0.01/GB in each direction. At scale, chatty ORMs have generated four-figure cross-AZ line items. Traffic between the database and EC2 instances in the same availability zone is free, which is why 'put the app next to the database' is both a latency optimization and a billing one - the rare case where the fast thing and the cheap thing are the same thing.
The doubler: Multi-AZ
Multi-AZ is RDS's failover story: a synchronous standby replica in another zone, automatic promotion when the primary fails. It is genuinely good engineering and the correct choice for production. It also doubles the instance and storage meters, and the standby serves no read traffic - you pay full price for a database that waits. (Multi-AZ DB clusters with two readable standbys exist, at higher cost again.)
Two worked examples
Hobby project, single-AZ. db.t4g.small + 50 GB gp3 + default 7-day backups + light egress: roughly $24 + $6 + $0 + $2 = about $32/month. The 12-month free tier covers a micro version of this for new accounts - then it starts billing.
Small production SaaS. db.t4g.medium Multi-AZ + 100 GB gp3 (doubled) + 14-day retention on a write-heavy database + steady egress and some cross-AZ chatter: $94 + $23 + $10 + $10 = roughly $135 - 140/month. Nothing here is misconfigured; this is just what the five meters add up to.
The free tier, and its silent end
New AWS accounts get 12 months of a db.t4g.micro (or t3.micro) with 20 GB of storage and 20 GB of backups. It is a real free tier with two sharp edges: it applies to one instance's worth of hours (running two halves the covered time), and it ends silently at month 13, when the instance simply starts billing at on-demand rates. Set a billing alarm the day you create the account - it is the single highest-value minute in all of AWS cost management:
# a $15 budget alarm - the free-tier expiry tripwire
aws budgets create-budget --account-id <your-id> --budget '{
"BudgetName": "rds-tripwire", "BudgetLimit": {"Amount": "15", "Unit": "USD"},
"TimeUnit": "MONTHLY", "BudgetType": "COST"
}'
Reserved instances and the other discounts
A 1-year no-upfront reserved instance takes roughly 30 - 40% off the instance meter (3-year and upfront options go deeper). Reservations do nothing for the other four meters and lock the instance family for the term. Buy one after the workload stabilises, not before - a reservation on an instance you resize next month is money donated to AWS.
Keeping an RDS bill honest
Right-size with data, not vibes. CloudWatch's CPU and freeable-memory graphs tell you within a week whether the instance is oversized. Most are.
Put the app in the same AZ as the database (or accept Multi-AZ and connect to the primary's zone) to kill cross-AZ transfer charges.
Audit snapshots quarterly. Manual snapshots never expire on their own and bill forever.
Question Multi-AZ for non-production. Staging rarely needs a synchronous standby; that toggle alone halves the environment's cost.
Watch t-family credit burn. A burstable instance running hot 24/7 is the wrong instance - or, in unlimited mode, a quiet extra meter.
Is RDS the right spend?
RDS earns its bill when you are already inside AWS: IAM auth, VPC networking, read replicas, cross-region snapshots, compliance out of the box. If that describes your stack, price the five meters honestly and use the AWS pricing calculator with real numbers rather than the instance price alone.
If what you actually wanted was a production Postgres with backups and a connection string, the honest comparison - and full disclosure, this is our product - is Swyftstack's flat-priced managed Postgres: $19/month, backups and pooling included, one meter (none). The hobby example above costs $32 on RDS plus the VPC homework; the production example's $135 - 140 buys failover you must still configure and test. We have run the same five-meter teardown on S3's pricing if object storage is the other half of your AWS bill.
Prices quoted here were checked in July 2026. Vendors change them; treat the structure as the durable part and re-check the current numbers before you budget.
Frequently asked questions
How much does RDS for PostgreSQL actually cost per month?
A single-AZ db.t4g.small with 50 GB of gp3 storage runs about $30/month. The same setup Multi-AZ with realistic backup retention and some egress is $60 - 70. Production instances with Multi-AZ and provisioned IOPS commonly land in the hundreds.
Is there an RDS free tier?
Yes - 12 months of a db.t4g.micro (or t3.micro) with 20 GB of storage for new AWS accounts. It ends silently after a year and the instance starts billing at on-demand rates, which is a well-known source of surprise AWS bills.
Why is my RDS bill so much higher than the instance price?
Usually three stacked causes: Multi-AZ doubling instance and storage, backup storage beyond the free 100% of database size, and data transfer - especially cross-AZ traffic from your app servers, which bills in both directions.
Do reserved instances make RDS cheap?
A 1-year no-upfront reservation cuts the instance meter by roughly 30 - 40%. It does nothing for storage, IOPS, backups or transfer, and it locks the instance family for the term - fine for stable workloads, a trap while you are still resizing.