Azure Reserved VM Instances & Hybrid Benefit: A Savings Playbook
Understand Azure Reserved VM Instances
Azure Reserved VM Instances (RIs) let you pre‑pay for a VM family, region, and term (1‑ or 3‑year) in exchange for a discount of up to 72% compared with pay‑as‑you‑go pricing. The reservation is scope‑bound: - Single subscription – applies only to resources in that subscription. - Shared (tenant‑wide) – applies across all subscriptions in the same Azure AD tenant.
Key points before you buy: - Instance size flexibility – within the same VM family (e.g., Dsv3) you can apply the reservation to any size, and Azure will automatically allocate the discount to the highest‑priced matching VM. - Regional vs Zonal – a regional RI covers any zone in the region; a zonal RI is tied to a specific availability zone and offers a slightly higher discount. - Exchange & refund – you can exchange a reservation for a different size, family, or term, or receive a partial refund within the first 30 days.
Leverage Azure Hybrid Benefit
The Azure Hybrid Benefit (AHB) lets you reuse existing Windows Server or SQL Server licenses with Software Assurance (or qualifying subscription licenses) to pay only for the underlying compute. When combined with an RI, the discount stacks: - Windows VMs – you pay the Reserved Instance price minus the on‑prem license cost, often resulting in >80% total savings. - SQL Server on Azure VMs – same stacking applies, but you must enable AHB at the VM level.
When AHB makes sense
- You have active Software Assurance or eligible subscription licenses.
- Your workloads are stable (e.g., production web tiers, batch processing) and will run for the next 1‑3 years.
- You need predictable capacity; you’re not planning frequent instance type changes.
Calculate Expected Savings Before Purchase
- Inventory current VMs
bash az vm list --show-details --query "[?powerState=='VM running'].{Name:name, Size:hardwareProfile.vmSize, Region:location, OS:storageProfile.osDisk.osType}" -o table - Export pricing – use the Azure Retail Prices API:
bash curl -s "https://prices.azure.com/api/retail/prices?currencyCode=USD&serviceName=Virtual Machines" | jq '.Items[] | select(.armRegionName=="eastus" and .skuName=="Standard_D2s_v3" and .productName=="Virtual Machines Dsv3 Series")' > pricing.json - Compute on‑demand cost (e.g., 730 hrs/month):
python import json, math data=json.load(open('pricing.json')) price=data[0]['retailPrice'] on_demand=price*730 print(f"On‑demand monthly: ${on_demand:.2f}") - Apply RI discount – look up the reservation price in the same API (
reservationTermfield) or in the Azure portal under Reservations > Price. - Add Hybrid Benefit – subtract the per‑core Windows license cost (e.g., $0.02/hr for Windows Server with SA). The final monthly cost is:
final = (ri_price/12) - (license_per_core * cores) - Compare – if the final cost is < 70% of on‑demand, the purchase is justified.
Purchase and Manage Reservations
Via Azure Portal
- Navigate to Cost Management > Reservations.
- Click Add → Reserve.
- Choose Virtual Machines, select Region, Instance family, Term, and Scope (shared or single subscription).
- Tick Apply Azure Hybrid Benefit if you have eligible licenses.
- Review the price, then Purchase.
Via Azure CLI
# Example: 3‑year reservation for Standard_D2s_v3 in East US, shared scope
az reservation order purchase \
--reserved-resource-type VirtualMachines \
--sku Standard_D2s_v3 \
--term P3Y \
--location eastus \
--applied-scope-type Shared \
--billing-plan Upfront \
--quantity 1
Enable Hybrid Benefit on an existing VM
az vm update \
--resource-group MyRG \
--name MyWinVM \
--license-type WindowsServer
The --license-type flag tells Azure to apply the on‑prem license you already own.
Ongoing Optimization: Exchange, Refund, and Scope Adjustments
- Exchange: If your workload shifts to a different VM size within the same family, run:
bash az reservation exchange \ --reservation-order-id <order-id> \ --reservation-id <reservation-id> \ --new-sku Standard_D4s_v3 - Refund: Within 30 days you can request a partial refund (up to 100% of the unused term). Use the portal’s Refund button; CLI support is limited.
- Scope change: Move a reservation from a single subscription to shared scope (or vice‑versa) without repurchasing:
bash az reservation order update \ --reservation-order-id <order-id> \ --applied-scope-type Shared - Monitor utilization: Set up an Azure Monitor alert on the metric
ReservationUtilizationPercentage. A threshold below 70% signals over‑reservation.bash az monitor metrics alert create \ --name "LowRIUtilization" \ --resource-group MyRG \ --scopes /providers/Microsoft.Capacity/reservationOrders/<order-id> \ --condition "ReservationUtilizationPercentage < 70" \ --description "Reservation utilization fell below 70%"
Automate Detection with CloudBudgetMaster
CloudBudgetMaster continuously scans your Azure subscriptions, matches running VMs against active Reserved Instances and Hybrid Benefit eligibility, and surfaces the exact dollar impact of each optimization opportunity—so you can act on savings before the next billing cycle.
CloudBudgetMaster