Explanation
Why the waste happens and who it affects.
In exchange, Spot VMs have no SLA and can be evicted, with up to 30 seconds of best-effort notice through Scheduled Events, whenever Azure needs the capacity back or the price rises above a set maximum. Microsoft positions them for batch processing, dev/test environments, large compute jobs and other workloads that can handle interruptions.
Many workloads that fit that description, such as CI and build agents, rendering and simulation farms, queue workers and ephemeral test environments, still run on standard-priority VMs and scale sets. The Spot setting can only be chosen when a VM is created and existing VMs cannot be converted, so deployments built before anyone evaluated Spot keep paying full price until they are rebuilt. Microsoft's FinOps best practices for compute include a Resource Graph query that reports scale set priority and priority mix settings specifically to find these opportunities.
Billing model
The pricing dimensions that drive this cost.
Spot and standard VMs of the same size are billed differently.
- Standard priority
- Billed at the pay-as-you-go (or committed) rate with normal availability guarantees
- Spot price
- A variable rate by region and SKU, charged instead of the pay-as-you-go rate while the VM runs
- Max price -1
- The VM is not evicted for price reasons and is never charged above the standard price
- Deallocate eviction policy
- Evicted VMs stop compute charges but keep billing for their disks and count against quota
- Delete eviction policy
- Evicted VMs are deleted with their disks, so no storage charges continue
How to detect
5 checks to find it in your estate.
- Run the FinOps best practices Resource Graph query on microsoft.compute/virtualmachinescalesets that projects properties.virtualMachineProfile.priority and properties.priorityMixPolicy, and list scale sets with no Spot priority
- Identify VMs and scale sets that run stateless, restartable or queue-driven work (CI agents, batch, rendering, test environments) by tag, image or naming convention, and confirm with owners that interruptions are acceptable
- Use the FinOps hub coverage query or cost data to see Spot usage (PricingCategory Dynamic) versus on-demand for these workloads
- Query the SpotResources table in Azure Resource Graph for 90-day Spot price history and 28-day eviction rates for the SKUs and regions in use, to rank where Spot is most viable
- Exclude sizes Spot does not support: B-series and promo sizes
How to fix
5 ways to remove the waste.
- Recreate eligible VMs or scale sets with Spot priority, since Spot cannot be enabled on existing VMs and Spot VMs cannot be converted back to standard
- For scale sets, use Spot Priority Mix (Flexible orchestration only) with baseRegularPriorityCount and regularPriorityPercentageAboveBase to keep a standard-priority base that is never evicted while adding Spot capacity above it
- Set the eviction policy to Delete for ephemeral workers so evicted instances do not leave billable disks, or keep Deallocate when state must survive and budget for the disk cost
- Handle Azure Scheduled Events eviction notices, checkpoint long-running jobs, and pick SKUs and regions with lower eviction rates from the portal pricing history or SpotResources
- Keep standard-priority fallback capacity for work that must run on time, because Azure allocates Spot only when capacity is available
Documentation
Vendor references for pricing and configuration.