Quick Wins — Do These First
1. Delete unattached managed disks
Managed disks orphaned from deleted VMs continue billing at full price indefinitely. In the Azure portal: Disks → filter by "Unattached" → review and delete. At $0.04–$0.17/GB/month for Premium SSD, a 1TB unattached disk costs $40–$170/month doing nothing.
2. Stop idle VMs in dev/test subscriptions
Azure DevTest Labs and auto-shutdown policies can stop VMs on a schedule. For dev environments: configure auto-shutdown at 7pm, auto-start at 8am weekdays. A Standard_D4s_v5 ($0.192/hour) running 168h/week vs 55h/week saves 67% — $194/month per VM.
3. Remove unused public IP addresses
Static public IPs cost $0.004/hour (~$2.92/month) when unattached. Dynamic IPs are free when unattached but charged when allocated to a stopped VM. Run a monthly audit via Azure Policy.
Azure Advisor — Your Free FinOps Tool
Azure Advisor's Cost recommendations are genuinely useful and free. It identifies: right-sizing opportunities, unused ExpressRoute circuits, idle virtual network gateways, and Reserved Instance purchase recommendations. Check it monthly — new recommendations appear as your usage patterns change.
Key Advisor checks to prioritize: Shut down or resize underutilized VMs (typically saves 20–30% of compute), Buy reserved instances (30–72% savings on stable workloads), and Eliminate unprovisioned ExpressRoute circuits (often $55–$500/month each).
Reserved Instances & Azure Savings Plans
Azure offers two commitment models — mirroring AWS almost exactly:
| Option | Flexibility | Max Discount | Best For |
|---|---|---|---|
| 1-yr Reserved Instance | Instance family/region | 40% | Stable, known VM type |
| 3-yr Reserved Instance | Instance family/region | 65% | Long-term stable workloads |
| Compute Savings Plan (1yr) | Any VM, region, OS | 35% | Flexible compute |
| Compute Savings Plan (3yr) | Any VM, region, OS | 65% | Flexible long-term |
Strategy: cover your baseline (always-on production VMs) with 1-year RIs. Cover variable compute with Compute Savings Plans. Leave 20% as pay-as-you-go for burst and Spot workloads.
Azure Spot VMs: Up to 90% Off
Azure Spot VMs use excess capacity at 60–90% discount. Azure can evict them with 30 seconds notice (shorter than AWS's 2 minutes — plan accordingly). Best for: batch processing, CI/CD, ML training, stateless web tiers.
Use --eviction-policy Deallocate (not Delete) so the disk persists and the VM can be restarted when capacity is available. For Kubernetes on AKS, use Spot node pools with --priority Spot.
Right-Sizing Azure VMs
Azure Advisor's right-sizing recommendations analyze 7–14 days of CPU and memory metrics. The typical finding: 30–40% of VMs are over-provisioned by at least one size tier. Downsizing a Standard_D8s_v5 ($0.384/hr) to Standard_D4s_v5 ($0.192/hr) saves 50% — $140/month per VM.
Also evaluate generation upgrades: moving from v3 to v5 VMs often delivers 15–25% better performance at the same or lower price point — effectively a free optimization.
Storage Tier Optimization
Azure Blob Storage lifecycle management automatically moves data between tiers:
| Tier | Cost/GB/month | Retrieval Cost | Best For |
|---|---|---|---|
| Hot | $0.018 | Free | Frequently accessed |
| Cool | $0.01 | $0.01/GB | Accessed <30 days |
| Cold | $0.0045 | $0.03/GB | Accessed <90 days |
| Archive | $0.00099 | $0.02/GB + rehydration | Rarely accessed |
Implement lifecycle policies to automatically transition blobs: Hot → Cool after 30 days, Cool → Archive after 90 days. For log storage and backups, this alone typically saves 60–80% on storage costs.
Azure Hybrid Benefit
If you have existing Windows Server or SQL Server licenses with Software Assurance, Azure Hybrid Benefit lets you use them in Azure at significantly reduced rates. Windows Server licenses save up to 40% on VM costs. SQL Server licenses save up to 55% vs pay-as-you-go SQL pricing. Check eligibility in the Azure portal — many organizations leave this unclaimed.
Cost Governance with Azure Policy
Enforce cost hygiene with Azure Policy: require tags on all resources (deny creation without required tags), restrict VM SKUs to an approved list, enforce auto-shutdown on dev/test VMs, and alert on resource creation in non-standard regions. Combine with Management Groups for consistent policy across subscriptions.