azurecost-optimizationfinopsplaybook

How to cut your Azure bill: a sequenced reduction playbook

Azure reductions come from a different shape of waste than AWS: premium disks, orphaned NICs and public IPs, oversized VMs, and Log Analytics ingestion. Here is the ordered playbook with real meter prices and expected savings.

The C3X Team··8 min read

Quick answer

Work the Azure levers in order. Step 1, delete orphans: unattached managed disks (a 128 GB P10 premium disk is about $19.71 a month even detached), orphaned NICs, idle standard public IPs at $0.005/hr, and empty App Service plans: 5 to 10 percent. Step 2, downgrade storage tiers where performance allows (P10 premium to E10 standard SSD is about $19.71 to $9.60, roughly half): 3 to 8 percent. Step 3, right-size VMs on 14 day p95 metrics: 10 to 20 percent of compute. Step 4, auto-shutdown non-production: 60 to 70 percent of its compute. Step 5, buy reservations or a savings plan over the new baseline: 1 year reservations typically save around 40 percent, 3 year around 60 percent.

Azure waste has a different profile from AWS waste. The recurring offenders are premium managed disks chosen by default, orphaned network interfaces and public IPs left behind by deleted VMs, App Service plans running at a tier nobody sized, oversized VMs, and Log Analytics ingesting far more than anyone queries. The sequence below works those in the order that maximises the base each later step operates on.

The sequence

StepLeverTypical saving
1Delete orphaned disks, NICs, IPs, empty plans5 to 10% of total
2Downgrade over-specified disk and storage tiers3 to 8% of total
3Right-size VMs and managed databases10 to 20% of compute
4Auto-shutdown non-production60 to 70% of dev/test compute
5Reservations and savings plan40% (1yr) to 60% (3yr) on steady compute

Step 1: the orphan sweep

Deleting an Azure VM does not delete its managed disk, its NIC, or its public IP by default, which is why almost every long lived subscription has a drift of billing leftovers. A detached 128 GB P10 premium SSD bills around $19.71 a month forever. A standard static public IP bills $0.005 per hour, about $3.65 a month. An App Service plan with no apps still bills its tier, and an S1 plan is roughly $73 a month. Query Azure Resource Graph for disks where diskState equals Unattached, NICs with no virtualMachine, and public IPs with no ipConfiguration. This is the same discipline as any orphaned resource cleanup, and on a neglected subscription it returns 5 to 10 percent immediately.

Step 2: stop paying premium for standard workloads

Premium SSD is the default in many templates and is frequently unnecessary. A P10 (128 GB) is about $19.71 a month; the equivalent E10 standard SSD is about $9.60. Across a hundred disks that is roughly $1,000 a month for a tier change most non-production and many production workloads will not notice. Apply the same logic to blob storage: hot tier is about $0.018 per GB-month, cool about $0.01, cold about $0.0036, archive about $0.00099. Lifecycle rules that move data older than 30 days to cool and older than 180 days to archive typically cut blob spend 40 to 60 percent, as covered in blob lifecycle cost. Watch the risk: cool and cold tiers carry early deletion penalties and higher transaction and retrieval charges, so churning data belongs in hot.

Step 3: right-size VMs on real telemetry

Pull 14 days of metrics and flag VMs whose p95 CPU is under 25 percent. A D8s v5 at roughly $0.384 per hour stepping down to a D4s v5 at roughly $0.192 saves about $140 a month per VM. Azure Advisor will propose candidates, but validate memory separately, because the default VM metrics do not include memory unless the diagnostic extension is installed, and resizing a memory bound VM on CPU alone is how you cause an incident. The process discipline is in the Azure VM right-sizing guide.

Step 4: auto-shutdown everything non-production

Azure has native auto-shutdown on VMs and DevTest Labs schedules, so this is the cheapest step to implement. A dev VM running 168 hours a week that only needs 50 drops to about 30 percent of its compute cost. Deallocate rather than stop, because a stopped but allocated VM still bills compute. Managed disks keep billing either way, which is why step 2 comes first.

Step 5: commit against the reduced baseline

Only now size reservations. One year reserved VM instances typically discount around 40 percent against pay as you go, three year around 60 percent, and the Azure savings plan for compute trades a few points of discount for the flexibility to move across VM families and regions. Cover the steady 70 to 80 percent and leave the variable top on pay as you go. The trade off is laid out in reservations versus savings plans. If you run Windows Server or SQL Server, apply Azure Hybrid Benefit first, since it can remove the licence component entirely and changes which reservation size is correct.

Expected outcome and what can go wrong

A first pass over an untouched subscription of $80,000 a month typically lands 25 to 35 percent. The failure modes are predictable: deleting a disk that held a backup, downgrading a disk tier under a latency sensitive database and causing IOPS throttling (premium tiers carry provisioned IOPS that standard SSD does not match), deallocating a VM that a nightly batch depended on, and over-reserving before the right-sizing finished. Each is prevented by sequencing and a 14 day observation window. To stop the drift returning, price Azure changes from Terraform before merge against the resource catalog, and keep reading the invoice with understanding your Azure bill.

FAQ

What is the fastest way to cut an Azure bill?

The orphan sweep. Deleting an Azure VM leaves its managed disk, NIC, and public IP billing. A detached 128 GB P10 premium SSD costs about $19.71 a month, a standard static public IP about $3.65, and an App Service plan with no apps still bills its tier (an S1 is roughly $73 a month). Query Azure Resource Graph for unattached disks, NICs without a virtualMachine, and public IPs without an ipConfiguration.

How much does downgrading Azure premium disks save?

Roughly half. A P10 premium SSD (128 GB) is about $19.71 a month against about $9.60 for the equivalent E10 standard SSD. Across a hundred disks that is around $1,000 a month. The risk is IOPS: premium tiers carry provisioned IOPS that standard SSD does not match, so latency sensitive databases should stay on premium while non-production and many general workloads will not notice the change.

Does stopping an Azure VM stop the charges?

Only if it is deallocated. A VM in the stopped but allocated state still bills compute. Use the native auto-shutdown feature or DevTest Labs schedules to deallocate. Managed disks continue to bill in either state, which is why downgrading over-specified disk tiers should happen before you rely on scheduling for savings on non-production environments.

How much do Azure reservations save?

One year reserved VM instances typically discount around 40 percent against pay as you go and three year terms around 60 percent. The Azure savings plan for compute gives up a few points of discount in exchange for flexibility across VM families and regions. Cover the steady 70 to 80 percent of compute and leave the variable top slice on pay as you go so you are never paying for capacity you stopped using.

Should I apply Azure Hybrid Benefit before buying reservations?

Yes. Azure Hybrid Benefit can remove the Windows Server or SQL Server licence component from a VM's rate entirely, which changes the compute price a reservation is sized against. Applying it after purchase means you reserved against an inflated baseline. Licence optimisation always precedes commitment sizing, the same way deletion and right-sizing precede it.

How do I keep Azure costs from drifting back up?

Put a cost estimate in front of every infrastructure change. Orphaned disks, premium tiers chosen by default, and oversized VM SKUs mostly enter through templates and modules that nobody priced. C3X reads Terraform and prices Azure resources against a live catalog in the pull request, so a premium disk or an oversized VM SKU shows its monthly cost before merge rather than appearing on next month's invoice.

What to do next

Catch Azure cost before the invoice. C3X prices your Terraform against a live resource catalog. Start with the quickstart.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.