Billing in Azure Container Apps

Billing in Azure Container Apps is based on your plan type.

Plan type Description
Consumption plan Serverless compute option where you're only billed for the resources your apps use as they're running.
Dedicated plan Customized compute options where you're billed for instances allocated to each workload profile.
  • Your plan selection determines billing calculations.
  • Different applications in an environment can use different plans.

This article describes how to calculate the cost of running your container app. For pricing details in your account's currency, see Azure Container Apps Pricing.

Consumption plan

Billing for apps running in the Consumption plan consists of two types of charges:

  • Resource consumption: The amount of resources allocated to your container app on a per-second basis, billed in vCPU-seconds and GiB-seconds.
  • HTTP requests: The number of HTTP requests your container app receives.

The following resources are free during each calendar month, per subscription:

  • The first 180,000 vCPU-seconds
  • The first 360,000 GiB-seconds
  • The first 2 million HTTP requests

Free usage doesn't appear on your bill. You're only charged as your resource usage exceeds the monthly free grants amounts.

Note

If you use Container Apps with your own virtual network or your apps utilize other Azure resources, additional charges may apply.

Resource consumption charges

Azure Container Apps runs replicas of your application based on the scaling rules and replica count limits you configure for each revision. Azure Container Apps jobs run replicas when job executions are triggered. You're charged for the amount of resources allocated to each replica while it's running.

There are 2 meters for resource consumption:

  • vCPU-seconds: The number of vCPU cores allocated to your container app on a per-second basis.
  • GiB-seconds: The amount of memory allocated to your container app on a per-second basis.
  • GPU-seconds: The number of GPUs allocated to your container apps on a per-second basis.

The first 180,000 vCPU-seconds and 360,000 GiB-seconds in each subscription per calendar month are free.

Container apps

The rate you pay for resource consumption depends on the state of your container app's revisions and replicas. By default, replicas are charged at an active rate. However, in certain conditions, a replica can enter an idle state. While in an idle state, resources are billed at a reduced rate.

No replicas are running

When a revision is scaled to zero replicas, no resource consumption charges are incurred.

Minimum number of replicas are running

Idle usage charges might apply when a container app's revision is running under a specific set of circumstances. To be eligible for idle charges, a revision must be:

Note

Idle usage charges don't apply to serverless GPU apps. They're always billed for active usage.

Usage charges are calculated individually for each replica. A replica is considered idle when all of the following conditions are true:

  • The replica is running in a revision that is currently eligible for idle charges.
  • All of the containers in the replica have started and are running.
  • The replica isn't processing any HTTP requests.
  • The replica is using less than 0.01 vCPU cores.
  • The replica is receiving less than 1,000 bytes per second of network traffic.

When a replica is idle, resource consumption charges are calculated at the reduced idle rates. When a replica isn't idle, the active rates apply.

More than the minimum number of replicas are running

When a revision is scaled above the minimum replica count, all of its running replicas are charged for resource consumption at the active rate.

Jobs

In the Consumption plan, resources consumed by Azure Container Apps jobs are charged the active rate. Idle charges don't apply to jobs because executions stop consuming resources once the job completes.

Request charges

In addition to resource consumption, Azure Container Apps also charges based on the number of HTTP requests received by your container app. Only requests that come from outside a Container Apps environment are billable.

  • The first 2 million requests in each subscription per calendar month are free.
  • Health probe requests aren't billable.

Request charges don't apply to Azure Container Apps jobs because they don't support ingress.

Dedicated plan

You're billed based on workload profile instances, not by individual applications.

Billing for apps and jobs running in the Dedicated plan is based on workload profile instances, not by individual applications. The charges are as follows:

Fixed management costs Variable costs
If you have one or more dedicated workload profiles in your environment, you're charged a Dedicated plan management fee. You aren't billed any plan management charges unless you use a Dedicated workload profile in your environment. As profiles scale out, extra costs apply for the extra instances; as profiles scale in, billing is reduced.

Make sure to optimize the applications you deploy to a dedicated workload profile. Evaluate the needs of your applications so that they can use the most amount of resources available to the profile.

Dynamic sessions

Dynamic sessions has two types of session pools: code interpreter and custom container. Each session type has its own billing model.

Code interpreter

Code interpreter sessions are billed based on running duration for the number allocated sessions. For each allocated session, you're billed from the time it's allocated until it's deallocated in increments of one hour.

Custom container

Custom container sessions are billed using the Dedicated plan, based on the amount of compute resources used to run the session pool and active sessions.

Each custom container session pool runs on dedicated E16 compute instances. The number of instances allocated to the session pool is based on the number of active and ready sessions in the pool. To view the number of instances currently allocated to a session pool, use the following Azure CLI command to retrieve the pool's nodeCount property. Replace the <PLACEHOLDERS> with your values.

az containerapp sessionpool show --resource-group <RESOURCE_GROUP> --name <POOL_NAME> --query "properties.nodeCount"

General terms