Reserver.Reserve your spot →

Free tool · no signup

Your real renewal calendar. Right now.

Paste the output of one AWS CLI command and get back exact expiry dates, what a lapse costs per hour, per day and per year, and a full renewal calendar — priced from your own committed rates. Nothing leaves your browser.

Output of aws ec2 describe-reserved-instances,aws rds describe-reserved-db-instances, oraws elasticache describe-reserved-cache-nodes — a full response, a bare array, or several pasted one after another.

45%

Defaults to Reserver's blended discount model — the same assumption behind thesavings calculator. Drag to match your own rates.

Nothing you paste leaves this browser. No network request, nolocalStorage, no analytics — open DevTools' Network tab and watch it stay empty while you analyze. Disconnect your network; it still works.

Showing the sample fleet above — paste your own and hit Analyze to replace it.

13reservations parsed1 had no price in the payload1 retired or non-active reservation excluded from these totals
$11,584committed annual spend
expiring within$2,543 / 30d$3,629 / 60d$3,985 / 90d
1already endedbleeding $1.22/day right now from 1 lapse in the last 90 days
if the next expiry slips$0.05/hr$1.22/day · $444/yrm5.large · 9 days left

Next 12 months

  • Aug 20262$2,543
  • Sep 20261$1,086
  • Oct 20261$355
  • Nov 20261$620
  • Dec 20260
  • Jan 20271no price
  • Feb 20271$700
  • Mar 20270
  • Apr 20271$659
  • May 20271$1,489
  • Jun 20270
  • Jul 20271$1,600

Soonest expiries

The soonest reservations still to expire, from this paste
ReservationRegionEndsDays leftAnnual costLapse cost / dayLapse cost / yr
m5.largeEC2 · ri-2f8a1c0eus-east-1Aug 10, 20269 days left$543$1.22$444
cache.r6g.largeElastiCache · ri-ec-2d4b91 ×2us-west-2Aug 24, 202623 days left$2,000$4.48$1,636
m5.xlargeEC2 · ri-6b3d9a41us-east-1Sep 15, 202645 days left$1,086$2.43$889
db.t3.mediumRDS · ri-rds-8e21f4us-west-2Oct 15, 202675 days left$355$0.80$291
c5.largeEC2 · ri-91e7c2ab ×3us-east-1Nov 29, 2026120 days left$620$1.39$507
db.r6g.largeRDS · ri-rds-b70d52us-east-1Jan 8, 2027160 days leftno price in payload
cache.m6g.largeElastiCache · ri-ec-97a0c3us-west-2Feb 17, 2027200 days left$700$1.57$573
r5.largeEC2 · ri-04a8f7d3us-east-1Apr 8, 2027250 days left$659$1.48$539
db.m6g.largeRDS · ri-rds-1f6a8cus-east-1May 28, 2027300 days left$1,489$3.34$1,218
m5.2xlargeEC2 · ri-7c1b5e90us-west-2Jul 17, 2027350 days left$1,600$3.59$1,309
cache.r6g.xlargeElastiCache · ri-ec-5e8f14us-east-1Sep 5, 2027400 days left$1,988$4.46$1,627

By service & region

Reservations and committed annual cost by service and region
ServiceRegionReservationsUnitsAnnual cost
EC2us-east-157$3,452
ElastiCacheus-west-223$2,700
ElastiCacheus-east-111$1,988
EC2us-west-211$1,600
RDSus-east-122$1,489 · 1 unpriced
RDSus-west-211$355

How to get the numbers

Three commands. Any account, any region.

Each command needs only read access to describe reservations — the same Describe/List scope Reserver's own read-only role uses.

EC2 Reserved Instances
aws ec2 describe-reserved-instances --region us-east-1
RDS reserved DB instances
aws rds describe-reserved-db-instances --region us-east-1
ElastiCache reserved cache nodes
aws elasticache describe-reserved-cache-nodes --region us-east-1

Add --profile your-profile for a named credential profile, and repeat--region for every region you run in — Reserved Instances are always regional or zonal, never global.

Many accounts at once

This is the enterprise path: loop the three commands over every profile and region, and paste the whole run — the tool scans for each JSON document in the paste and aggregates everything it finds into one calendar.

for profile in prod-us prod-eu staging; do
  for region in us-east-1 us-west-2 eu-west-1; do
    aws ec2 describe-reserved-instances --profile "$profile" --region "$region"
    aws rds describe-reserved-db-instances --profile "$profile" --region "$region"
    aws elasticache describe-reserved-cache-nodes --profile "$profile" --region "$region"
  done
done

What the fields mean

A short glossary of what's in the payload.

FixedPrice
The upfront amount paid for the term (0 for No Upfront).
RecurringCharges / UsagePrice
The hourly rate billed on top of the upfront amount, whether or not the instance runs.
Duration
The term length in seconds — 31,536,000 for 1 year, 94,608,000 for 3 years.
OfferingType
The payment option: All Upfront, Partial Upfront, or No Upfront.
State
Whether the reservation is active, retired (its term ended), payment-pending, or payment-failed.

More definitions in the glossary, and the full story on why renewals slip in the renewal playbook.

What this can't do

An honest limit: this is a snapshot, not a watch.

This tool reads exactly what you paste, once. It's a manual pull, one account and region at a time, of reservations you already own — it can't see running capacity that was never reserved in the first place, and nobody re-runs it for you the day a date arrives. That's the gap between "checking a number" and Reserver: a read-only connection that scans continuously, matches reservations to what's actually running, and tells you — before a renewal is due, not after it's already lapsed.

Expiry check, answered

Questions about the tool.

Does anything get uploaded when I paste my reservations?

No. Parsing and analysis both run entirely in your browser — there's no fetch, no beacon, no analytics call, and nothing is written to localStorage or the URL. Open DevTools' Network tab before you paste: it stays empty through the whole analysis.

Why do RDS and ElastiCache show different end-date math than EC2?

AWS's own describe-reserved-instances response for EC2 includes an explicit End field. The RDS and ElastiCache equivalents don't — their end date is StartTime plus Duration in seconds, which is exactly how this tool derives it. All three are the same underlying commitment; only the field names differ.

I ran the loop across a dozen accounts and pasted it all at once — did it work?

Yes — paste as many aws ... describe-... outputs one after another as you like, in any order, mixing services and regions. The tool scans for each top-level JSON document and aggregates everything it recognizes into one calendar.

This only shows what I already own. What am I missing?

Exactly what it can't do: it's a manual snapshot, one paste at a time, of reservations you already have — it doesn't see the running capacity you never reserved, and nobody re-runs it for you when a date arrives. That's what Reserver does: it connects once, scans continuously, and tells you what to buy next as well as what's expiring.

My paste includes retired reservations. Are they counted?

No. The tool reads each reservation's own State field and excludes anything that isn't active — retired, retired-pending, payment-failed, or payment-pending — from committed annual spend, the exposure figures, the calendar, and the service & region table. It still tells you how many were excluded, so the count always reconciles against what you pasted. The "bleeding $/day" figure is further limited to lapses within the last 90 days, since an older lapse has almost certainly already been resolved. If you'd rather trim the paste yourself first, EC2, RDS, and ElastiCache's describe-reserved-* commands all accept --filters Name=state,Values=active — but it isn't required, since the tool handles unfiltered output correctly on its own.

Reserved

Stop overpaying for a steady fleet.

Reserver is in early access. Join the list and we'll onboard you as capacity opens up — first recommendation within minutes of connecting.

Reserve your spot →