Understanding Azure App Service Plans and Pricing

Updated March 2019!

Like many things in Azure, Azure App Service has a multitude of consumption options available that can sometimes make it hard to determine what option suits your use. This post was updated in February 2019 to reflect the current state of services. Any questions? Leave a comment!

In this post I’m going to walk through App Service, and for simplicity’s sake, I’m going to stick to deploying just Web Apps.

So, what do we have available and how does it best fit what I want to do?

Firstly, you can deploy more than a single app into a Plan at no additional cost. New apps will be deployed alongside existing apps and share the resource allocation available in Plan Tier (this is how the old Azure Websites worked, so not much has changed here).

Beyond this there are nuances that it’s worth exploring.

2019 update: the App Services team has published a useful filtering page that shows the full set of service tiers and features, along with a detailed list of restrictions.

Probably the biggest change since this post was originally published is the introduction of Linux and Container support. If you have solutions that can run on Linux or in a Container then it’s worth looking at using Linux in place of Windows – you get the majority of the features the Windows instances do at a slightly lower price point.

Free Tier (F1)

Charge Model: free

Does what it says on the tin – gives you some Azure App Service capacity for free.

Your application runs on shared infrastructure. You can deploy up to 10 apps into a single Free Plan.

As with anything free, there is a trade-off – with this tier you get a maximum of 60 minutes CPU daily, with 1 GB RAM, 1 GB disk space and no SLA. You also can’t use a custom domain, SSL or run 64 bit solutions here.

2019 update: this tier doesn’t offer Linux or Web Apps for Containers support – you need to run on the Basic tier to access these capabilities.

Suitable for Proof-of-Concepts (PoCs) or simple dev/test. Recommendation to avoid for production use as there is no SSL or support (SLA) in place.

Shared (D1)

Charge Model: fixed per-hour charge.

Provides you with a small step up from the Free tier, but still not really aimed at production workloads.

Your application runs on shared infrastructure. You can deploy up to 100 apps into a single Shared Plan. The Shared tier supports only 32 bit applications that can use CPU cycles for up to 240 minutes per day.

2019 update: this tier doesn’t offer Linux or Web Apps for Containers support – you need to run on the Basic tier to access these capabilities. There’s a new Shared tier in preview at time of writing – I’ll update this post once it is Generally Available.

While still not backed by an SLA, this tier may be more suited to simple non-critical workloads (such a smartlink redirect hosts) where they may only be used occasionally during any 24 hour period and that some service disruption isn’t impactful on anyone. A 302 redirect doesn’t burn many of those 240 minutes ;).

Basic (B1 – B3)

Charge Model: per-hour charge based on number of instances.

For example: B2 tier running Windows (in USD in US West) with 3 instances – 3 x $0.15/hr = $0.45/hr

This is where App Service Plans meets production workload hosting. You are now running on dedicated instances and benefit from a 99.9% availability SLA. You can deploy unlimited apps into a single Basic Plan (though you’ll likely hit resource limits before hitting “unlimited” 😉 ).

You also have access now to manual scale-out (increase number of instances) up to a maximum of three instances and scale-up (shift from B1 – B2 – B3 tiers) options. Traffic is automatically balanced between your instances.

2019 update: this tier is where Linux and Web Apps for Containers support starts.

If you have simple containerised workloads and don’t want or need the complexity of an orchestrator like Kubernetes then Web Apps for Containers is a great place to start.

Limitations at this tier includes support for only a single SSL certificate per Plan. If you can leverage SNI then you can run multiple web apps on SSL. If not, it’s one app per Plan then!

If you need to connect to a private Azure network or use Deployment Slots then this tier is also *not* suitable for you.

The Basic tier is a good starting place if you’re bringing an existing app into App Service, particularly if your current application is unlikely to support load balancing or auto-scale or does not require substantial resources to run.

Standard (S1 – S3)

Charge Model: per-hour charge based on number of instances.

For example: S3 tier with Windows (in USD in US West) with 5 instances – 5 x $0.40/hr = $2.00/hr

Standard tier provides everything Basic does (the instances are the same apart from increased disk space), but there are a few add-ons that make this a serious proposition for modern apps. Your availability SLA increases at this tier to 99.95%.

You gain additional SSL support (both SNI and IP address), additional scale-out support (up to 10 instances with auto-scale included), plus you can use automated daily backups, Deployment Slots and Azure Traffic Manager for geo-availability. If you want to use private data sources in Azure in your applications you can also use VNet integration with this tier to access them.

Slots (or “Staging Environments”), and how they apply when you deploy multiple apps into a plan are a bit of grey area too. Let me clarify that the “5” listed for this Tier means you get up to 5 Slots per deployed Web App (note each Slot shares the same pool of resources as your live site.. so don’t do stress / performance testing here 😉 ).

Premium (P1v2 – P3v2)

Charge Model: per-hour charge based on number of instances.

For example: P1v2 tier with Windows (in USD in US West) with 10 instances – 10 x $0.20/hr = $2.00/hr

2019 update: the biggest change here since my original post is the new v2 instances based on more modern underlying compute which offer better performance and pricing than the old v1 instances. Also changed is that the new Premium tier no longer supports App Service Environments which have now moved to their own dedicated tier which I’ll cover in its own section.

Beyond what Standard gives you, you now get support for up to 20 instances along with 50 daily backups and 20 slots. Your instances have higher spec CPU with more RAM and storage than at the Standard tier. The pricing at this tier is also not that much different from Standard, but if you need just that bit more grunt to run your application then a step up from Standard to Premium is worth considering.

Isolated Service Plan (I1 – I3)

2019 update: this is a completely new tier since my original post!

Charge Model: fixed per-hour cost with an additional per-hour charge based on number of instances.

For example: I1 tier with Windows (in USD in US West) with 10 instances – $1.546/hr + (10 x $0.40/hr) = $5.546/hr

Prior to the new Premium v2 offering if you wanted to use App Service Environments (ASEs) you provisioned a Premium-tier Plan. Clearly not everyone who wanted access to the performance or scale of Premium necessarily needed (or wanted) an ASE, so this dedicated Plan tier was created so people could specify it as a way to setup an ASE.

The compute for Isolated Service Plans is the same as the Premium tier, however you have several advantages over Premium when it comes to scale-out (up to 100 instances, with more available via support request), private network access and isolated hosting. Some high-compliance industries such as banking require separation of workloads from other customers and an ASE provides this guarantee. You can also access on-premises resources from within an ASE via VNet connectivity over a VPN or ExpressRoute.

You will select this tier if you have a compliance-driven environment but want to use public cloud PaaS, or if you have substantial scale-out needs. I’d definitely recommend reading the documentation and watching some of the videos on ASEs (specifically the “v2” flavour which runs on Isolated Plans) to understand the benefits you get for the money you’re paying.

Summary

As you can see, there is a lot of flexibility available when hosting Web Apps in App Service. If you have lots of small web apps that can coexist on the same machines (a fairly typical model in traditional web hosting) then you should look closely at App Service as a solution to your needs in Azure.

Finally, Microsoft has even developed some tooling that can even help you figure out how to move – check out https://www.movemetothecloud.net/.

Happy days! 😎

15 thoughts on “Understanding Azure App Service Plans and Pricing

  1. what happens when my free trial expires but I have created the app service with F1(Free Tier)?it will all get’ s expired or it still exists?

    1. Kam,

      They are still mostly correct, but I will put it on my list for early 2018 to write an updated one that includes the upgraded ASE’s and the Linux App Service offering too. Thanks for checking in!

      Simon.

  2. I was wondering if you could help me understand something. On the app services pricing page in the top paragraph they also quote a per second charge. ‘App Service plans are billed on a per second basis.’ Is this in addition to the hourly charge they quote for the various service plans?

    1. This is a good question (and it’s certainly confusing!)

      The reason that the prices are shown per-hour is because that’s a fairly standard way to represent cloud service costs across the various Azure services (some of which only support per-hour billing) as well as across cloud providers (other providers typically list usage costs per-hour even if they bill in per-second blocks).

      To answer your specific question though: you will pay for the App Service Plan by the second. How this works based on the details on the pricing page (costs in US Dollars):

      Standard S3 – Australia Southeast – hourly cost of $0.504.

      If you use this Service Plan for, say, 30 minutes and 40 seconds, after which you delete it, you would be billed ~ $0.258 (1,840 seconds * $0.00014/sec).

      Hope this helps.

  3. Hi Simon,

    What should we enter for the number of instances while entering the details of the App service plan.

    suppose a Web App i depolyed in azure using a free account does not use any Virtual Machine..then does it mean the web apps do not need any Virtual Machines even when moved to production also

    1. Hi Bharathy,

      Web Apps run on App Service Plans which are just a layer that abstracts away the underlying compute resources that run your Web App. You don’t manage the underlying compute directly, but you do have control over Instances, where an Instance can be thought of as a VM.

      The Free Tier for App Services utilises shared Instances, but once you move to a paid tier you can select how many Instances you want to run.

      There is some good documentation on Instances and their purpose on the Azure Documentation site: https://docs.microsoft.com/en-us/azure/app-service/azure-web-sites-web-hosting-plans-in-depth-overview

      Hope this helps,
      Simon.

  4. I’m still not clear on what actually gets paid for. If I have a Standard plan costing say £0.15 per hour for 1 instance, does it not make any difference if I host 1 or 1000 apps in it? If I host an say 1 API in that app service, do I then pay the standard £0.15 per hour for the plan then for all the egress data the API spits out on top of that?

    1. Hi Mo – sorry for not replying earlier! You are correct – as long as your apps can utilise the resources of the instance size you selected then you can run any number on an instance and not pay an additional cost. This is a great way to host lots of smaller apps in a single location.

      So, 1 app on S1 (Windows) in West US = $0.10/hr. 10 apps is the same, 1000 apps is the same…

      If collectively your deployed apps cause resource exhaustion on the instance you may hit an auto-scale event at which point your cost will double to $0.20/hr. If you were seeing this regularly you’d likely just move to an S2 plan and live with the baseline $0.20/hr cost.

      Egress data is charge separately and is charged as a collective value coming from the instance (i.e. it isn’t charged at a per-app level).

      Hope this makes sense.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s