Martin Rylko
  • Services
  • Blog
  • About
  • Contact
  • Get in Touch
Martin Rylko

Senior Cloud Architect & DevOps Engineer. Specializing in Microsoft Azure, IaC, Cloud Security and AI.

Navigation

  • Services
  • Blog
  • About
  • Contact

Collaboration

Looking for an experienced architect for your Azure project? Get in touch.

rylko@cloudmasters.cz

© 2026 Martin Rylko. All rights reserved.

Built in the cloud. Deployed via Azure Static Web Apps.

Home/Blog/Azure Reserved Instances and Savings Plans: A Fiscal Year-End Strategy
All articlesČíst česky

Azure Reserved Instances and Savings Plans: A Fiscal Year-End Strategy

12/15/2025 5 min
#Azure#FinOps#Cost Optimization#Reserved Instances

Azure Reserved Instances and Savings Plans: A Fiscal Year-End Strategy

The December week between Christmas freeze and New Year is a busy one in every serious FinOps team. Not because of incidents – because of reservations. When the CFO at Christie's came to me with "we still have USD 180k of unused CAPEX, what should we do?", the answer was clear: figure out which Reserved Instances and Savings Plans make sense and buy them before 31 December.

This article is the distilled version of what I work through with clients every December.

1. Start With Coverage Analysis, Not the Catalog

The most common mistake is opening Cost Management → Reservations → Recommendations and buying whatever Azure suggests. Microsoft calculates recommendations from the last 30 days of usage and assumes an identical pattern going forward. That often overshoots for workloads you are about to migrate or shut down.

A better starting point:

# Current coverage – percentage of usage covered by reservations
az consumption reservation summary list \
  --grain monthly \
  --start-date 2025-11-01 \
  --end-date 2025-11-30 \
  --query "[].{ReservationId:reservationOrderId, UtilizedPercentage:avgUtilizationPercentage, ReservedHours:reservedHours, UsedHours:usedHours}" \
  --output table

Look for two numbers:

  • Utilization < 95% = you are paying for unused capacity, time to exchange for a better SKU
  • Coverage < 70% on a stable workload = room for a new reservation

In one retail environment where I ran the audit, this single query led me to 14 unused Standard_D8s_v4 reservations left over from last year's consolidation onto D4s_v5. Exchanging for the smaller SKU returned USD 38 000 per year.

2. Reserved Instance vs Savings Plan: a Decision Table

CriterionReserved InstanceSavings Plan
Maximum discount72% (3 years)45% (3 years)
Bound toVM family + regionHourly spend in USD
CoversVMs, SQL DB, Cosmos, StorageCompute only (VMs, AKS, Container Instances, Functions Premium)
Region flexibilityRegion or "Shared scope"Global
VM size changeOnly within the same instance flexibility groupUnrestricted
ExchangeYes (compute only since 2024)No
Cancellation/refundUp to USD 50 000/year/accountSame

Practical decision rule: if you know the exact VM SKU and that it will run 24/7 for at least 12 months, buy an RI. If you know the budget but not the exact compute mix, buy a Savings Plan.

3. Scope: Where to Pin the Reservation

This is the area where the most savings get left on the table without anyone noticing. Three options:

ScopeUse caseExample
Single subscriptionIsolated workloadsOne production subscription
Resource groupVery specific workloadsAlmost never
Shared (MG/billing scope)Enterprise environmentsRecommended

Shared scope means the reservation floats across all subscriptions under a billing account or MG and applies wherever the best match exists at that moment. In an environment like Nespresso, where we run across dozens of subscriptions and countries, single-subscription reservations would be a logistics nightmare – Shared scope lets you buy centrally and let Azure handle distribution.

# Change scope of an existing reservation to Shared
az reservations reservation update \
  --reservation-order-id <ORDER_ID> \
  --reservation-id <RESERVATION_ID> \
  --applied-scope-type Shared

4. The Math: Three-Year vs One-Year

Classic scenario: you want to buy RIs for Standard_D4s_v5 in West Europe for 10 VMs.

Pay-as-you-go price: ~USD 141 / VM / month = USD 16 920 / year / 10 VMs
1-year Reserved:     ~USD 98  / VM / month = USD 11 760 / year / 10 VMs  (30% saving)
3-year Reserved:     ~USD 62  / VM / month = USD 7 440  / year / 10 VMs  (56% saving)

The three-year reservation saves USD 9 480 per year vs PAYG. Over 36 months that is USD 28 440 in savings.

But: if you plan an AKS migration in year 18 and those VMs disappear, you have 14 months of stranded commitment. Microsoft only refunds up to USD 50 000 per year, so a large enterprise hit cannot be fully absorbed. Always think in break-even months:

  • 1-year RI: break-even ~7 months
  • 3-year RI: break-even ~13 months

If you do not have 95% certainty the workload will run at least to break-even, go Savings Plan instead.

5. Concrete CLI Purchase

The GUI is fine for the first reservation. For 50 SKUs you need a script.

# Quote for Standard_D4s_v5, 10 instances, West Europe, 3 years, monthly billing
az reservations catalog show \
  --subscription-id <SUB_ID> \
  --reserved-resource-type VirtualMachines \
  --location westeurope \
  --query "[?skuProperties[?name=='cores' && value=='4']].{Name:name, Tier:size, BillingPlan:terms[0].billingPlan}"
 
# Actual purchase (after quoting)
az reservations reservation-order purchase \
  --reservation-order-id <NEW_ORDER_UUID> \
  --sku Standard_D4s_v5 \
  --location westeurope \
  --reserved-resource-type VirtualMachines \
  --billing-scope-id /providers/Microsoft.Billing/billingAccounts/<BA_ID> \
  --term P3Y \
  --quantity 10 \
  --billing-plan Monthly \
  --applied-scope-type Shared \
  --display-name "RI-D4s-v5-Prod-3Y-Dec2025"

Always use --billing-plan Monthly. The upfront payment buys you 0.5–1% extra discount but locks up cashflow.

6. What to Do With an Underutilized Reservation: Exchange Playbook

When utilization drops below 70% for more than 14 days, act:

  1. Identify underutilized SKUs:
    az consumption reservation detail list \
      --reservation-order-id <ORDER_ID> \
      --start-date 2025-11-01 \
      --end-date 2025-11-30 \
      --query "[?reservationUtilization < \`70\`]"
  2. Compute remaining value (remaining commitment × RI price)
  3. Find a target SKU of equal or higher value
  4. Exchange via the Portal: Reservations → Select reservation → Exchange. The new reservation must be of equal or higher value. The remaining value of the old one is fully refunded and applied to the new one.

Heads up: since summer 2024 Microsoft has disabled exchanges for database reservations (SQL DB, Cosmos DB, MariaDB). You can only refund them. If you hold a three-year SQL DB RI and the workload changes SKU, you are stuck – so buy these in smaller chunks.

7. Year-End Checklist

StepTimingOwner
Coverage analysis of last 90 days-6 weeksFinOps lead
Identify underutilized reservations-5 weeksFinOps lead
Exchange proposals with approval-4 weeksFinOps + Finance
Purchase new RIs/SPs-2 weeksProcurement
Audit applied scope + utilization+2 weeksFinOps lead
Annual review in Cost Management ReservationsJanuaryCTO + CFO

Conclusion

Reserved Instances and Savings Plans are not just an accounting trick. Applied correctly, one three-year reservation alone can save more than a whole annual FinOps audit costs. But like any financial instrument, they can also be misused – an over-reserved 3-year commitment costs more than PAYG when the workload disappears.

The rule I repeat to every team: buy slowly, exchange aggressively, refund only as a last resort. And give yourself at least six weeks of proper analysis before year-end, not six days of panic.

Need help with a fiscal year-end FinOps strategy? Check out our cloud architecture services or reach out for a free consultation.

Tags:#Azure#FinOps#Cost Optimization#Reserved Instances
LinkedInX / Twitter

About the author

Martin Rylko

Martin Rylko

Senior Cloud Architect & DevOps Engineer

14+ years in IT – from on-premises datacenters and Hyper-V clustering to cloud infrastructure on Microsoft Azure. I specialize in Landing Zones, IaC automation, Kubernetes and security compliance.

Email LinkedInFull profile

Frequently Asked Questions

When is the best time to buy Azure Reserved Instances?▾
The optimal window is 4–6 weeks before your fiscal year-end, when you have enough data to evaluate stable consumption. For a calendar FY that means late November through mid-December. Later purchases only pay off if you are spending unused CAPEX budget – Microsoft invoices a reservation immediately, not on the redemption date.
What is the difference between a Reserved Instance and a Savings Plan in Azure?▾
A Reserved Instance pins a specific VM family, region, and size with a 30–72% discount. A Savings Plan commits to an hourly dollar spend and applies a 15–45% discount to any compute across regions and VM families. RIs deliver larger discounts on stable workloads; Savings Plans give you flexibility on variable demand.
Can I exchange or refund an Azure Reserved Instance?▾
Yes, but with rules. Microsoft allows refunds up to USD 50 000 per year per account, plus an unlimited number of exchanges (swapping for another reservation of equal or higher value). Since summer 2024, exchanges are restricted to compute reservations only – databases and Cosmos DB can only be refunded. Always model the scenarios up front.
Should I buy a three-year or one-year reservation?▾
Rule of thumb from my practice: for core infrastructure (domain controllers, SQL Always On primaries, Kubernetes API servers) go three-year. For production app servers go one-year so you can react to re-platforming. For everything else, a 1-year Savings Plan. The three-year discount is roughly 25% larger, but 36 months is forever in cloud terms, and a re-architecture mid-flight means a "stranded" commitment.

You might also like

Azure Cosmos DB Cost Optimization: 8 Levers to Cut Your RU/s Bill

A practical guide to reducing Azure Cosmos DB costs. Provisioned vs Serverless, autoscale tuning, indexing policy, TTL, and multi-region trade-offs with real numbers from running CostSentry.AI.

Read

Azure FinOps: 7 Steps to Cut Cloud Costs by 30%

Practical Azure FinOps guide – from Cost Management through VM right-sizing to Reserved Instances and auto-scaling. Real savings from enterprise projects.

Read

Azure Functions Flex Consumption: When to Replace the Premium Plan in 2026

Flex Consumption is the third path between the Consumption and Premium plans for Azure Functions. A practical breakdown of the pricing model, VNet integration, and when to switch off the Premium plan.

Read