Reserving App Service capacity: the basics
Why does a web app that never scales to zero pay an on-demand premium?
An App Service plan is billed for the compute it reserves, not the requests it serves. A Premium v3 plan sized at P1v3 charges its hourly rate every hour it exists, whether traffic is heavy or the site is idle overnight. For a production web app that runs continuously, that means you are paying the full pay-as-you-go rate, 24 hours a day, for capacity whose size you already know months in advance. That is exactly the shape of spend a reservation is built for.
An App Service reserved instance is a billing commitment, not a different product. You promise Azure that you will keep running a given plan size, in a given region, for one or three years, and in return the matching instance hours bill at a discounted rate instead of pay-as-you-go. The application itself does not change: same plan, same SKU, same deployment, same scaling rules. Azure Advisor surfaces this as the cost recommendation 'Consider App Service reserved instance to save over the on-demand costs', because it has watched your usage and can see a baseline that never goes away.
Reservations apply to the Premium v3 plan (v3 and later) and the Isolated v2 plan (used with an App Service Environment). They do not apply to Basic, Standard, the older Premium v2 tier, or to Consumption and Free tiers. The mental model is simple: any App Service plan that runs a steady, predictable baseline of compute is overpaying on demand, and the fix is to pre-commit to the part of that baseline you are confident will still be there next year.
In this lesson you will learn how App Service billing makes steady web apps overpay on demand, how to read the Azure Advisor reservation recommendation and confirm the baseline yourself, how to buy the right quantity for the right scope, and how to keep the commitment safe with exchange and refund. The goal is a concrete decision: which plans to reserve, at what term, and what it saves against today's run rate.
The discount that needs nothing from your code
Almost every cost optimisation asks engineers to change something: right-size a VM, add autoscale, delete idle disks, refactor a query. App Service reservations are the rare exception that touches no code and no configuration at all. The plan keeps running exactly as it did the hour before; only the line item changes. Azure even applies the discount automatically to whichever matching instances are running, so you do not assign the reservation to a specific app. It is one of the few savings you can book from the billing blade alone, and it keeps paying back every hour for up to three years.
Finding the steady App Service baseline worth reserving
Priya runs the platform team at a SaaS company whose customer portal and API both sit on Premium v3 App Service plans that have run continuously for over a year. Azure Advisor has raised a cost recommendation to consider an App Service reserved instance, and she wants to confirm the baseline before committing.
Rather than trust the recommendation blindly, she starts by listing the production App Service plans, their SKUs and instance counts, so she can see exactly which capacity is steady enough to reserve and which is elastic and should stay on demand.
List the App Service plans with their SKU and current instance count. The steady Premium v3 plans are the reservation candidates.
Reserve the floor, not the peak. The two always-on plans give a steady baseline of four P1v3 instances in East US worth reserving; the bursty plan's variable top should stay on demand.
How an App Service reservation is matched and applieddeep dive
A reservation is defined by a small set of attributes: the reserved resource type (AppService), the plan size SKU such as P1v3, the Azure region, the term of one or three years, and a quantity of instances. Azure matches those attributes against your running instance usage each hour. For every hour a matching instance runs within the reservation's scope, that hour bills at the reserved rate instead of pay-as-you-go, automatically, with no need to attach the reservation to a particular app.
The discount is use-it-or-lose-it on an hourly basis. If you reserve four P1v3 instances but only three matching instances run in a given hour, the fourth reserved hour is simply lost, you cannot bank it for later. If five matching instances run, four are covered at the reserved rate and the fifth bills on demand. This is why you size a reservation to the floor you are confident about, never the peak: the goal is high utilisation of every reserved hour, not maximum coverage. Scope controls which subscriptions and resource groups the match considers: single resource group, single subscription, a management group, or shared across the whole billing context.
Two details matter for forecasting. First, the reservation covers the compute stamp; on a Windows plan the Windows licence is billed separately and is not part of the reservation discount, so a Linux plan and a Windows plan of the same size save different absolute amounts. Second, because the match is on region and SKU, a reservation in East US does nothing for an identical plan in West Europe, and a P1v3 reservation does not cover a P2v3 plan. Get the region and size right and the discount lands every hour; get them wrong and the reservation sits unused while the plan keeps paying on demand.
What is the impact of leaving steady capacity on demand?
The direct impact is a recurring overpayment. Every hour a steady, year-round App Service plan runs at the pay-as-you-go rate, it pays the gap between that rate and the reserved rate for capacity it was always going to keep. Multiplied across an always-on production plan and out over a year, that gap is one of the larger avoidable lines on an App Service bill, and it compounds quietly because nothing looks broken: the app works, the invoice just runs higher than it needs to.
The second-order impact is a distorted view of cost. When steady baseline and elastic burst are both billed on demand, the bill blurs the two together and makes the always-on floor look as variable as the spiky top. Reserving the floor separates the two: the committed baseline becomes a known, discounted fixed cost, and what remains on demand is genuinely the elastic part worth watching. That clarity is as valuable for planning as the saving itself.
On the financial-governance side, an always-on estate with no reservations is a standing flag in any cost review or FinOps maturity assessment. Azure Advisor raising 'Consider App Service reserved instance to save over the on-demand costs' is, in effect, Microsoft telling you that you are leaving money on the table on capacity you already run. Acting on it is the cheapest, most defensible cost win you can show: a saving booked from the billing blade, with no roadmap impact and a documented exit.
How do you buy the right App Service reservation safely?
Treat this as a sizing exercise followed by a purchase, not a guess. The order matters: confirm the durable baseline first so you commit to capacity you are sure you will keep, then buy at the scope and term that match how the estate is run.
1. Confirm the durable baseline
Read the Azure Advisor recommendation, then check it against your own usage. Identify the App Service plans on Premium v3 or Isolated v2 that have run a steady instance count for at least a quarter. Reserve the floor those plans never drop below, not their peak, so every reserved hour is used. Bursty or seasonal capacity stays on demand.
2. Pick the right scope and term
Choose single subscription or single resource group scope when one team owns the plans, or shared and management-group scope when matching instances are spread across subscriptions, so the discount finds them. Choose the term by confidence: three years saves the most and suits capacity you are certain of, one year suits a baseline you are slightly less sure about. Region and SKU must match the running plan exactly.
3. Calculate, then purchase
Use the calculate command to confirm the price before you commit, then purchase. Choose monthly billing to keep the cash profile flat, or upfront if you prefer. The discount applies automatically to matching instances from the moment the reservation is active; you do not attach it to an app.
4. Keep the commitment safe and review it
Reservations are not a one-way door. Azure offers self-service exchange within the same product family and self-service refund up to USD 50,000 of cancelled commitment in a rolling 12-month window, with no early-termination fee currently charged. Set a recurring review so utilisation stays high, exchange if the estate changes region or size, and re-check Advisor as the baseline grows.
# 1. Confirm the steady App Service plans worth reserving (Premium v3, fixed instance count).
az appservice plan list \
--query "[?sku.tier=='PremiumV3'].{name:name, sku:sku.name, instances:sku.capacity, region:location}" \
-o table
# 2. Price the commitment BEFORE buying. Set sub to the subscription that will be charged.
sub=$(az account show --query id -o tsv)
az reservations reservation-order calculate \
--reserved-resource-type AppService \
--sku P1v3 \
--location eastus \
--term P3Y \
--billing-plan Monthly \
--quantity 4 \
--applied-scope-type Single \
--billing-scope "$sub" \
--applied-scope "/subscriptions/$sub" \
--display-name appsvc-p1v3-eastus-3yr
# 3. Purchase once the calculated price is approved. reservationOrderId is a GUID you generate.
orderId=$(cat /proc/sys/kernel/random/uuid)
az reservations reservation-order purchase \
--reservation-order-id "$orderId" \
--reserved-resource-type AppService \
--sku P1v3 \
--location eastus \
--term P3Y \
--billing-plan Monthly \
--quantity 4 \
--applied-scope-type Single \
--billing-scope "$sub" \
--applied-scope "/subscriptions/$sub" \
--display-name appsvc-p1v3-eastus-3yr Quick quiz
Question 1 of 5Azure Advisor raises 'Consider App Service reserved instance to save over the on-demand costs' for a plan that has run two P1v3 instances continuously for a year. What is the most accurate way to think about it?
You scored
0 / 5
Keep learning
Go deeper on how App Service reservations are priced, applied and managed across the term.
- Save for Azure App Service with reserved capacity Eligibility, scope, term and the step-by-step purchase flow for Premium v3 and Isolated v2 plans.
- Reservation discounts for Azure App Service How the discount matches running instances hour by hour, including the use-it-or-lose-it behaviour.
- Self-service exchanges and refunds for Azure Reservations The exchange rules, the USD 50,000 rolling refund limit and the current position on early-termination fees.
You can now treat an always-on App Service plan as a savings opportunity rather than a fixed cost: read the Azure Advisor recommendation, confirm the durable baseline against real usage, reserve the floor at the scope and term that match how the estate is run, and keep the commitment safe with exchange and refund. The change touches no code and no configuration, yet it books a discount on every matching hour for up to three years.
Back to the library