INSIGHTS

Your dev VMs are off. Azure is still billing them.

Shutting a virtual machine down from inside the guest operating system does not stop the compute charge. Only deallocation does, and from the desk the two look identical.

Patrick Rezende

·

Two states that both say off

Azure gives a virtual machine two ways to not be running, and only one of them stops the compute meter. A machine in the Stopped state, which Microsoft also calls PoweredOff or Stopped (Allocated), still holds its lease on the underlying hardware. Microsoft’s own power state table marks that state as billed.

The Deallocated state releases the lease. That is the one that stops the compute charge. In the portal it reads as Stopped (deallocated), and the word in brackets is the entire difference.

The mistake is easy and invisible

Shutting the machine down from inside the guest operating system, the way anyone would shut down a laptop, leaves it in Stopped. So does calling the PowerOff operation. The machine looks off in every sense that matters to the person who shut it down. Nothing responds, nothing runs, the session is gone. And it bills at the full rate all night.

Nothing in the experience corrects the assumption. There is no warning and no colour that reads as expensive. The only signal arrives on an invoice a month later, mixed in with everything else.

What still bills after deallocation

Deallocating stops the compute charge, not the bill. Microsoft notes that some resources keep incurring charges regardless, disks and networking among them. A deallocated machine keeps its managed disks, and those are billed on provisioned capacity rather than on use. A static public IP address keeps costing whether or not anything answers on it.

So a fleet of dev and test machines that is properly deallocated every night still carries a floor. It is a far lower floor and well worth having, but off never means zero.

The fix is a schedule, not a habit

Azure has a per-machine auto-shutdown setting in the portal, under Operations, with an optional notification before it fires. It can also be applied across a whole resource group from the command line. It is not hidden and it is not new.

The trap is the time zone. Auto-shutdown defaults to Coordinated Universal Time. A team in North America setting six in the evening without changing that field has just scheduled a shutdown for the middle of the working afternoon. That is worth re-checking on the machines you configured months ago and never looked at again.

Why it survives every cleanup

Dev and test machines are the easiest waste to find and the hardest waste to keep gone. Somebody spins one up for a week of work, it outlives the week, and no schedule ever gets attached because attaching one was nobody’s job.

Finding them is a query anyone can run. Keeping them off needs an owner and a habit. That is the part a report does not do for you.

See where your Azure money is leaking.

Start with the free Score: ten questions, no tenant access. Or go straight to the 20-minute call.