What it is
An Azure reservation approaching the end of its one- or three-year term with no renewal decision made. Expiry isn't an error state: the reservation simply stops applying, and every resource it covered starts billing at pay-as-you-go rates from that hour. The workloads keep running, the deployment is untouched, and the only symptom is a bigger invoice weeks later.
Why it happens
Auto-renewal isn't the safety net it sounds like. Portal purchases default renewal on, but CLI and API purchases default it off, older reservations predate the on-by-default behavior, and anyone can switch it off along the way — so a fleet accumulates a mix, and nobody knows which reservations will actually renew. Azure sends expiry emails, but they go to the reservation's owners and purchasers — routinely a person who has changed teams, a shared mailbox nobody reads, or a service account. Three years is long enough for the purchase to outlive the purchaser.
There is also no forced decision point. An expiring certificate breaks something; an expiring reservation breaks nothing. The infrastructure keeps working at the exact moment the discount disappears, so the first detectable signal is a cost anomaly on the next invoice — and by then you've paid weeks of pay-as-you-go rates on workloads you'd already decided deserved a commitment.
What it costs / blast radius
The reservation discount is commonly 30–60% off list price depending on term and SKU (illustrative; your contract may differ) — and losing it cuts the other way harder: a workload billed $10,000/month under a 40% discount comes back at roughly $16,700/month at list the day after the term ends.
The governance failure compounds the cost one: the lapse also erases a deliberate purchasing decision. Someone once concluded this workload was stable enough to commit to — silent expiry discards that conclusion without anyone re-examining it.
See it
az reservations reservation-order list \
--query "[].{name:displayName, orderId:name, term:term,
expires:expiryDate, state:provisioningState}" \
-o table
# Anything expiring inside your budget cycle needs a decision,
# not a surprise# If the workload is staying: turn on auto-renewal before the term ends
az reservations reservation update \
--reservation-order-id <order-id> --reservation-id <reservation-id> \
--renew true
# If it isn't: let it lapse deliberately, with the PAYG rate difference
# budgeted — or exchange it for a commitment that matches current usage.How StratoLens helps
StratoLens watches every reservation and savings plan across your subscriptions and flags anything approaching expiry well before the term ends, alongside its utilization history so the renew-or-lapse call is informed. The warning reaches your team inside your own tenant — not a purchaser mailbox from three years ago.