The credit cliff hiding behind a $6/month bill
A migration ticket landed in my queue: move Postgres off self-managed RDS to a managed service. The motivation was operational — the person who’d inherit this stack isn’t going to babysit RDS. But before recommending a multi-day migration, I wanted to know if the money story made sense too.
The first pull was strange. Cost Explorer, unblended, last three months:
Feb 2026: $0.80
Mar 2026: $2.10
Apr 2026: $5.90
Two db.t4g.large instances in il-central-1 cannot cost six dollars a month. On-demand list price alone is ~$211/mo for compute. Something was eating the bill.
Switching the metric from UnblendedCost to AmortizedCost flipped the story:
RDS amortized cost: ~$229/mo
Credits applied: ~$260-356/mo (account-wide)
Net out-of-pocket: $1-6/mo
There it was. AWS credits were silently absorbing the entire RDS bill, plus more. The “RDS is basically free” feeling was an artifact of a credit balance nobody had checked.
So the real question wasn’t “is RDS cheap” — it was “when do the credits run out?”
This is where AWS gets annoying. There is no public API for credit balances. None. I checked:
aws ce get-cost-and-usagewithRECORD_TYPE=Credit— shows credits applied per month, not balance or expirationaws billing list-billing-views— exists, returns nothing useful for thisaws support describe-trusted-advisor-checks— Premium Support requiredaws billingconductor— different product entirely
Credit balance and expiration are console-only. You have to log into the Billing dashboard, click Credits, and read it with human eyes. For a platform that has APIs for almost everything, this feels like a deliberate choice — credits are a sales lever, not a managed resource.
The numbers, once retrieved manually:
Remaining: $1,927.52
Used: $7,072.48
Expires: 2026-08-31
Burn rate: ~$260-350/mo account-wide
Roughly 3.5 months to expiration. At current burn, only $900-1,200 of the remaining $1,927 actually gets consumed. **$700-1,000 of free money expires unused regardless of what I do.** And the day after the cliff, the full $229/mo lands on the company card.
That changed the framing entirely. Without the expiration date the math was:
Stay on RDS: ~$6/mo. Migrate: ~$25-50/mo. Why would you migrate?
With the expiration date:
12 months post-cliff on RDS: ~$2,750. On managed: ~$300-600. Savings ~$2,150/yr, recurring. Payback in a month or two.
Same workload, same providers, same prices. The decision pivoted entirely on one number that lives behind a login.
Two lessons I’m filing for next time:
- Always check amortized cost, not unblended. Unblended hides reservations, savings plans, and credits. If the number looks too good, it probably is — somebody’s underwriting it temporarily.
- Find the cliff before pricing the alternative. Comparing $6/mo against $30/mo is incoherent if the $6 is a melting ice cube. The real comparison was $229 vs $30, and that one’s not close.
Migration is happening.