Skip to main content
emnode
Site Reliability

Deploy App Service plans as zone-redundant

One capability across every web app, API and function on the plan: make sure the plan spreads its instances across availability zones, so the loss of a single datacentre does not take the workload offline.

14 min·10 sections·AZURE

Last reviewed

Zone-redundant App Service: the basics

What does a single-zone App Service plan actually look like?

An App Service plan is the compute that every web app, API and function app on it runs on, and by default a plan can sit entirely inside one availability zone. An availability zone is a physically separate group of datacentres within an Azure region, each with its own power, cooling and network. When a plan is not zone-redundant, all of its instances can land in the same zone, so a power or network fault in that one zone takes every app on the plan down at once, even though the region as a whole is healthy.

Azure Advisor surfaces this as a reliability recommendation, 'Use zone-supported App Service Plan', because the fix is a property on the plan rather than a code change. Setting 'zoneRedundant' to true tells Azure to distribute the plan's instances across the availability zones the region offers, so the failure of any single zone leaves the workload running on the others. With two or more instances spread this way, the plan carries a 99.99% uptime SLA; without it, a single zone is a single point of failure.

Most single-zone plans are not a deliberate choice. They are a plan created before zone redundancy was easy to toggle, a module that never set the flag, or a plan left at one instance because it was cheaper and nobody revisited it once the app went to production. The work is to find every plan that runs production traffic on a single zone, decide which genuinely need resilience, and turn redundancy on, which is now a near-instant, in-place change with no redeploy.

In this lesson you will learn how an App Service plan expresses zone redundancy, how to find every plan running production traffic on a single zone, and how to turn redundancy on without a redeploy or downtime. You will see the exact Advisor recommendation behind the finding, the az CLI to inventory and fix it, and the Bicep that bakes resilience into every future plan so the gap does not come back.

Fun fact

The healthy region that still went dark

Cloud outages are rarely a whole region failing at once. Far more often a single availability zone has a bad day: a cooling failure, a power event, a network fault in one set of datacentres while the rest of the region runs normally. The teams that stayed up through those events were the ones whose compute was already spread across zones, so traffic simply shifted to the healthy ones. The teams that went down were running everything in the zone that happened to fail. Azure now lets you flip an App Service plan to zone-redundant in place, almost instantly and with no redeploy, so the cost of being on the wrong side of that line has never been lower.

Finding single-zone plans across a subscription

Priya is the platform lead at a scale-up whose checkout traffic runs on App Service. Azure Advisor has started flagging 'Use zone-supported App Service Plan' across several plans in the production subscription, and she wants to know which of them actually carry customer traffic before changing anything.

Rather than work the recommendations one by one, Priya starts by listing which plans are not zone-redundant and how many instances each runs, so the customer-facing plans can be separated from internal tooling before any change goes in.

Start by listing the plans that are not zone-redundant, with their SKU and instance count. These are the single points of failure.

$ az appservice plan list --query "[?!properties.zoneRedundant].{name:name, sku:sku.name, instances:sku.capacity}" -o table
Name Sku Instances
---------------- ----- ---------
checkout-prod P1v3 1
internal-admin B1 1
# checkout-prod carries customer traffic on ONE instance in ONE zone. Fix it first.

A Premium plan carrying customer traffic on a single instance is the highest-value target. The Basic internal tool is a separate, lower-priority decision.

How a plan becomes zone-redundantdeep dive

Zone redundancy resolves to two things on the plan. The first is the 'zoneRedundant' property: when it is true, Azure distributes the plan's instances across the availability zones the region offers rather than placing them all in one zone. The second is the instance count, 'sku.capacity' or the number of workers: zone redundancy requires a minimum of two instances, because spreading a single instance across zones is meaningless. With two or more instances spread across zones, the plan carries a 99.99% SLA. Each scale unit exposes a 'maximumNumberOfZones' of 1, 2 or 3, and Azure spreads your instances as evenly as it can across the zones available, so even a two-instance plan lands in two distinct zones.

Zone redundancy is supported on the Premium v2 and Premium v3 tiers for multi-tenant App Service, and on Isolated v2 for App Service Environments. Basic and Standard plans cannot be made zone-redundant, so a plan flagged by Advisor on one of those tiers has to move up a tier first. The setting is now mutable for the life of the plan: you can toggle 'zoneRedundant' on or off in place, and the change takes effect almost instantly with no downtime and no redeploy, which is a recent improvement over the old behaviour where redundancy could only be set at creation time.

The strongest position combines the per-plan setting with a Bicep or policy standard: every production plan template sets 'zoneRedundant' to true with a capacity of at least two. That turns 'we remembered to make the important plans redundant' into 'no production plan ships single-zone in the first place', which is the difference between checking the estate is resilient today and guaranteeing the next plan is resilient by default.

What is the impact of leaving a plan single-zone?

The direct impact is downtime you did not have to take. When all of a plan's instances sit in one availability zone, a power, cooling or network fault in that single zone takes every app on the plan offline, even though the rest of the region is healthy and serving other customers normally. The overwhelming majority of cloud incidents that hit a single workload are exactly this shape: not a whole region down, but one zone having a bad day while a single-zone plan happened to be living in it.

The second-order impact is the blast radius of a plan. Every web app, API and function app on a single-zone plan shares its fate, so one unprotected plan can be the single point of failure behind a whole product surface. Spreading the plan across zones turns a hard outage into a transparent failover: instances in the healthy zones keep serving while the affected zone recovers, and the 99.99% SLA reflects that the platform expects to ride through a single-zone loss.

On the reliability side, resilience targets, customer SLAs and internal error budgets all assume that a single datacentre fault is survivable. A production plan that is not zone-redundant quietly breaks that assumption, and it is the kind of gap that stays invisible until the day the wrong zone fails. A passing set of zone-redundancy recommendations across the plans that matter is the cheapest evidence you can offer that your most important services are not one datacentre away from an outage.

How do you make a plan zone-redundant safely?

Work the capability as one loop rather than chasing individual recommendations. The order matters: find the plans that actually carry customer or revenue traffic before you spend on instances, so you protect what matters and do not over-provision what does not.

1. Inventory every plan by redundancy and instance count

List the plans where 'zoneRedundant' is false, with their SKU and instance count. Treat this inventory as the source of truth, not the Advisor count, because the right response differs sharply between a single-instance revenue plan and a one-instance dev plan that does not matter.

2. Separate the plans that matter from the ones that do not

For each plan, decide what an hour of its downtime actually costs. Plans carrying customer or revenue traffic earn resilience; internal tools and dev plans where a brief outage is harmless can be left single-zone as a documented decision. Resilience is a choice you make per plan, not a blanket mandate.

3. Turn redundancy on, highest cost-of-downtime first

For each plan you are protecting, confirm it is on a supported tier (Premium v2, Premium v3, or Isolated v2 for an App Service Environment), ensure it runs at least two instances, and set 'zoneRedundant' to true. The change is in place, near-instant and needs no redeploy, so there is no outage window to plan around. Protect the highest cost-of-downtime plans first.

4. Make it the default with Bicep or policy

Bake 'zoneRedundant' true with a capacity of at least two into the Bicep or template that every production plan is created from, and audit for it with Azure Policy. That way new plans ship resilient by default, so the gap is prevented at creation rather than caught later on the Advisor report.

# Make an existing production plan zone-redundant in place (no redeploy, no downtime).
# Premium v2/v3 (multi-tenant) or Isolated v2 (ASE) only; minimum two instances.
az appservice plan update \
  --name checkout-prod \
  --resource-group rg-prod \
  --set zoneRedundant=true sku.capacity=2

# Bake resilience into every future plan so the gap does not come back (deploy.bicep):
# resource plan 'Microsoft.Web/serverfarms@2024-11-01' = {
#   name: planName
#   location: location
#   sku: {
#     name: 'P1v3'
#     capacity: 2          // minimum two instances for zone redundancy
#   }
#   properties: {
#     zoneRedundant: true  // spread instances across availability zones
#   }
# }

Quick quiz

Question 1 of 5

Azure Advisor flags 'Use zone-supported App Service Plan' on several plans. What does the recommendation actually mean?

You can now treat App Service zone redundancy as one capability rather than a scatter of recommendations: inventory which plans run on a single zone, separate the ones whose downtime is expensive, turn redundancy on in place highest cost-of-downtime first, and make it the Bicep default so new plans ship resilient. A single-zone plan is a single point of failure; a zone-redundant one absorbs the loss of a datacentre and stays up.

Back to the library