Availability zones: the basics
What does a single-instance virtual machine actually risk?
An availability zone is a physically separate group of datacentres inside an Azure region, with its own power, cooling and networking. A region that supports zones has at least three of them, far enough apart that one local fault, a power event, a cooling failure, a flooded datacentre, is unlikely to take out more than one, and close enough that the round-trip latency between them stays under two milliseconds. The point of a zone is isolation: if one fails, the others keep running.
A single virtual machine placed in one zone, or worse, placed regionally with no zone pinning at all, gets none of that isolation. When that zone has a problem, the workload is down until the zone comes back, because there is nowhere for it to fail over to. This is the shape Azure Advisor flags in its reliability recommendation 'Use Availability zones for better resiliency and availability': single-instance virtual machines that carry a real workload but have no zone redundancy behind them.
Most of this exposure is history, not intent. A virtual machine spun up quickly for a proof of concept that quietly became production, a lift-and-shift that recreated an on-premises single server one for one, a template written before the team thought about zones. The work is to find the workloads that genuinely need to survive a zone fault, and move them from one machine in one zone to a zone-aware model: either multiple zonal virtual machines behind a load balancer, or a Virtual Machine Scale Set in Flexible orchestration spread across zones one, two and three.
In this lesson you will learn how Azure expresses zone placement for virtual machines, why a single-instance machine has no protection against a zone fault, and how to move a workload that matters onto a zone-redundant model without rebuilding it from scratch. You will see how to inventory which machines are zone-aware and which are not, and how to choose between zonal virtual machines behind a load balancer and a Virtual Machine Scale Set in Flexible orchestration.
The two-millisecond moat
Azure availability zones are deliberately engineered to a strange-sounding constraint: far enough apart that a single flood, fire or power event is unlikely to hit more than one, but close enough that a network round trip between them stays under two milliseconds. That two-millisecond budget is what lets you run a workload synchronously across zones, replicating state in near real time, without the latency penalty you would pay spreading across regions hundreds of miles apart. It is the reason zone redundancy can give you datacentre-fault tolerance while still behaving, to the application, like one fast local network.
Finding single-instance workloads across a subscription
Priya is the reliability lead at a scale-up whose payments service has grown one virtual machine at a time. Azure Advisor's reliability tab shows the recommendation 'Use Availability zones for better resiliency and availability' against several machines that started as experiments and quietly became load-bearing.
Rather than react to the Advisor list directly, Priya starts by inventorying which virtual machines are pinned to a zone and which are not, so the genuinely critical workloads can be separated from the scratch machines before anything is rebuilt or doubled in cost.
List every virtual machine alongside the zone it sits in. A blank zone means the machine is regional, with no zone isolation at all.
A single machine pinned to one zone survives nothing if that zone fails; a regional machine with a blank zone has no isolation either. Critical workloads in either state are the targets.
How Azure decides a workload survives a zone faultdeep dive
Zone placement for a virtual machine comes down to one property: the 'zones' value on the machine. When it is set to a single zone, the machine and its disks are pinned there, isolated from faults in other zones but with nowhere to fail over if its own zone goes down. When it is empty, the machine is regional, placed somewhere in the region with no zone guarantee at all. Neither single-instance state survives a zone outage, because surviving a zone fault requires running instances in more than one zone at the same time.
That is why the fix is never 'pin this one machine to a zone'; it is 'run this workload across zones.' Two models deliver that. A set of zonal virtual machines, one in zone one, one in zone two, one in zone three, sitting behind a Standard load balancer that is itself zone-redundant. Or a Virtual Machine Scale Set in Flexible orchestration with 'zones' set to ['1','2','3'], which spreads its instances across the selected zones automatically and adds instances to the surviving zones if one fails. For zone-spanning scale sets the fault-domain count is constrained: 'platformFaultDomainCount' must be 1 (max spreading, recommended) or 5, and fixed spreading with 2 or 3 is not supported across zones.
The reason this matters commercially as well as technically is the SLA. Microsoft documents a higher availability SLA for instances spread across multiple availability zones than for a regional, nonzonal deployment, and a single virtual machine on its own does not get the multi-instance SLA at all. Spreading across zones is both the technical route to surviving a datacentre fault and the route to the stronger contractual commitment behind it.
What is the impact of leaving a critical workload single-instance?
The direct impact is downtime you cannot prevent. A single virtual machine in a single zone is down for the full duration of any fault in that zone, planned or unplanned, with no failover path. For a workload on the revenue or customer path, that is lost transactions, missed SLAs and the support and goodwill cost of an outage, all triggered by an event entirely outside your control.
The second-order impact is that the risk is invisible until the bad day. A single-instance machine runs perfectly well, indistinguishable from a resilient one, right up until the zone it lives in has a problem. Advisor flagging it is the only warning you get before the outage that proves the point, which is exactly why the recommendation is worth triaging rather than ignoring.
On the assurance side, customers and contracts increasingly ask not just whether a service is up but whether it can survive infrastructure failure. Being able to show that critical workloads run across multiple availability zones, and therefore carry the higher documented SLA, is a far stronger answer to a customer's resilience questionnaire than 'it has not gone down yet.'
How do you move a workload across zones safely?
Work this as a tiering exercise, not a blanket remediation. The order matters: decide which workloads earn redundancy before you spend, because making everything zone-redundant doubles cost without doubling value.
1. Inventory which machines are zone-aware
List every virtual machine with the zone it sits in. A single zone means pinned-but-not-redundant; a blank zone means regional with no isolation at all. Cross-reference this against the Advisor 'Use Availability zones' recommendation so you are working from the real placement, not just the finding list.
2. Tier workloads by the cost of their downtime
For each single-instance machine, decide what an hour of downtime actually costs: lost revenue, breached SLAs, idle staff, or nothing meaningful. Only the workloads where downtime has a real cost justify the doubled compute of zone redundancy. The rest stay single-instance as a recorded, deliberate choice.
3. Move the critical workloads to a zone-aware model
For the workloads that earn it, choose between zonal virtual machines behind a Standard, zone-redundant load balancer, or a Virtual Machine Scale Set in Flexible orchestration spread across zones one, two and three. The scale set is usually the cleaner path because it spreads instances automatically and re-balances into surviving zones during a fault. Migrate state and cut traffic over before retiring the original single machine.
4. Make zone-awareness the default for new critical workloads
Bake the zone-spanning pattern into the deployment templates the team reuses, so new revenue-path workloads start resilient rather than being retrofitted after Advisor flags them. The Bicep below stands up a Flexible scale set across three zones with max spreading, ready to drop into a module.
# Inventory: which machines are zone-aware and which are single points of failure?
az vm list --show-details \
--query "[].{name:name, zone:zones[0], size:hardwareProfile.vmSize}" -o table
# Confirm the Advisor reliability finding directly from the CLI.
az advisor recommendation list --category HighAvailability \
--query "[?contains(shortDescription.solution, 'Availability zone')].{resource:impactedValue, problem:shortDescription.problem}" \
-o table
# Stand up the replacement: a Flexible scale set spread across three zones (Bicep).
cat > vmss-zones.bicep <<'BICEP'
param location string = resourceGroup().location
param adminUsername string
@secure()
param adminPassword string
resource vmss 'Microsoft.Compute/virtualMachineScaleSets@2024-03-01' = {
name: 'payments-prod-vmss'
location: location
zones: [ '1', '2', '3' ]
sku: {
name: 'Standard_D2s_v5'
capacity: 3
}
properties: {
orchestrationMode: 'Flexible'
platformFaultDomainCount: 1
virtualMachineProfile: {
osProfile: {
computerNamePrefix: 'pay'
adminUsername: adminUsername
adminPassword: adminPassword
}
}
}
}
BICEP
az deployment group create \
--resource-group payments-rg \
--template-file vmss-zones.bicep \
--parameters adminUsername='azureuser' Quick quiz
Question 1 of 5Azure Advisor flags a virtual machine under 'Use Availability zones for better resiliency and availability'. Why does pinning that single machine to one zone not resolve the underlying risk?
You scored
0 / 5
Keep learning
Go deeper on how Azure expresses zone placement and how to move workloads onto a zone-aware model.
- Reliability in Azure Virtual Machines Why a single zonal VM is not resilient on its own, and how to spread across zones.
- Create an Azure scale set that uses availability zones Zone-spanning versus zonal scale sets, fault-domain counts and the CLI and template syntax.
- Reliability recommendations in Azure Advisor The full set of Advisor reliability recommendations, including availability-zone guidance.
You can now treat single-instance virtual machines as one capability rather than a scatter of Advisor findings: inventory which machines are zone-aware, tier the workloads by what their downtime actually costs, move the critical ones onto a zone-spanning model such as a Flexible scale set across zones one, two and three, and record the machines you deliberately leave single-instance. Resilience becomes a costed decision rather than an accident.
Back to the library