Skip to content

Commit f3b3451

Browse files
Merge pull request #231804 from craigshoemaker/aca/dedicated
[Container Apps] Dedicated Plan docs
2 parents 4f9429c + f62be24 commit f3b3451

16 files changed

+1086
-78
lines changed

articles/container-apps/TOC.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
href: deploy-visual-studio-code.md
2828
- name: Concepts
2929
items:
30+
- name: Plans
31+
href: plans.md
3032
- name: Environment
3133
href: environment.md
3234
- name: Containers
@@ -71,6 +73,8 @@
7173
href: alerts.md
7274
- name: Authentication
7375
href: authentication.md
76+
- name: Workload profiles
77+
href: workload-profiles-overview.md
7478
- name: Dapr integration
7579
href: dapr-overview.md
7680
- name: Azure Arc-enabled Kubernetes clusters
@@ -91,6 +95,8 @@
9195
href: managed-identity-image-pull.md
9296
- name: Manage revisions
9397
href: revisions-manage.md
98+
- name: Manage workload profiles
99+
href: workload-profiles-manage-cli.md
94100
- name: Ingress
95101
items:
96102
- name: Configure ingress
@@ -110,6 +116,12 @@
110116
href: custom-domains-certificates.md
111117
- name: Set up environment custom DNS suffix
112118
href: environment-custom-dns-suffix.md
119+
- name: Network security
120+
items:
121+
- name: Configure WAF Application Gateway
122+
href: waf-app-gateway.md
123+
- name: Enable User Defined Routes (UDR)
124+
href: user-defined-routes.md
113125
- name: Connect to a cloud service using Service Connector
114126
items:
115127
- name: .NET app with Blob Storage

articles/container-apps/billing.md

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,24 @@ author: craigshoemaker
66
ms.service: container-apps
77
ms.custom: event-tier1-build-2022
88
ms.topic: conceptual
9-
ms.date: 03/09/2022
9+
ms.date: 03/30/2023
1010
ms.author: cshoe
1111
---
1212

1313
# Billing in Azure Container Apps
1414

15-
Azure Container Apps billing consists of two types of charges:
15+
Billing in Azure Container apps is based on your [plan type](plans.md).
16+
17+
| Plan type | Description |
18+
|--|--|
19+
| [Consumption](#consumption-plan) | Serverless environment where you're only billed for the resources your apps use when they're running. |
20+
| [Consumption + Dedicated workload profiles plan structure](#consumption-dedicated) | A fully managed environment that supports both Consumption-based apps and Dedicated workload profiles that offer customized compute options for your apps. You're billed for each node in each [workload profile](workload-profiles-overview.md).
21+
22+
Charges apply to resources allocated to each running replica. |
23+
24+
## Consumption plan
25+
26+
Azure Container Apps consumption plan billing consists of two types of charges:
1627

1728
- **[Resource consumption](#resource-consumption-charges)**: The amount of resources allocated to your container app on a per-second basis, billed in vCPU-seconds and GiB-seconds.
1829
- **[HTTP requests](#request-charges)**: The number of HTTP requests your container app receives.
@@ -28,7 +39,7 @@ This article describes how to calculate the cost of running your container app.
2839
> [!NOTE]
2940
> If you use Container Apps with [your own virtual network](networking.md#managed-resources) or your apps utilize other Azure resources, additional charges may apply.
3041
31-
## Resource consumption charges
42+
### Resource consumption charges
3243

3344
Azure Container Apps runs replicas of your application based on the [scaling rules and replica count limits](scale-app.md) you configure for each revision. You're charged for the amount of resources allocated to each replica while it's running.
3445

@@ -41,16 +52,16 @@ The first 180,000 vCPU-seconds and 360,000 GiB-seconds in each subscription per
4152

4253
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.
4354

44-
### No replicas are running
55+
#### No replicas are running
4556

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

48-
### Minimum number of replicas are running
59+
#### Minimum number of replicas are running
4960

50-
Idle usage charges may apply when a revision is running under a specific set of circumstances. To be eligible for idle charges, a revision must meet the following criteria.
61+
Idle usage charges may apply when a revision is running under a specific set of circumstances. To be eligible for idle charges, a revision must be:
5162

52-
- It is configured with a [minimum replica count](scale-app.md) greater than zero.
53-
- It is scaled to the minimum replica count.
63+
- Configured with a [minimum replica count](scale-app.md) greater than zero
64+
- Scaled to the minimum replica count
5465

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

@@ -60,14 +71,35 @@ Usage charges are calculated individually for each replica. A replica is conside
6071
- The replica is using less than 0.01 vCPU cores.
6172
- The replica is receiving less than 1,000 bytes per second of network traffic.
6273

63-
When a replica is idle, resource consumption charges are calculated at the reduced idle rates. When a replica is not idle, the active rates apply.
74+
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.
6475

65-
### More than the minimum number of replicas are running
76+
#### More than the minimum number of replicas are running
6677

6778
When a revision is scaled above the [minimum replica count](scale-app.md), all of its running replicas are charged for resource consumption at the active rate.
6879

69-
## Request charges
80+
### Request charges
7081

7182
In addition to resource consumption, Azure Container Apps also charges based on the number of HTTP requests received by your container app.
7283

7384
The first 2 million requests in each subscription per calendar month are free.
85+
86+
<a id="consumption-dedicated"></a>
87+
88+
## Consumption + Dedicated workload profiles plan structure (preview)
89+
90+
Azure Container Apps Consumption + Dedicated plan structure consists of two plans withing a single environment, each with their own billing model.
91+
92+
The billing for apps running in the Consumption plan within the Consumption + Dedicated plan structure is the same as the Consumption plan.
93+
94+
The billing for apps running in the Dedicated plan within the Consumption + Dedicated plan structure is as follows:
95+
96+
- **Dedicated workload profiles**: You're billed on a per-second basis for vCPU-seconds and GiB-seconds resources in all the workload profile instances in use. As profiles scale out, extra costs apply for the extra instances; as profiles scale in, billing is reduced.
97+
98+
- **Dedicated plan management**: You're billed a fixed cost for the Dedicated management plan when using Dedicated workload profiles. This cost is the same regardless of how many Dedicated workload profiles in use.
99+
100+
For instance, you are not billed any charges for Dedicated unless you use a Dedicated workload profile in your environment.
101+
102+
103+
For pricing details in your account's currency, see [Azure Container Apps Pricing](https://azure.microsoft.com/pricing/details/container-apps/).
104+
105+
For best results, maximize the use of your allocated resources by calculating the needs of your container apps. Often you can run multiple apps on a single instance of a workload profile.

articles/container-apps/containers.md

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,9 @@ Azure Container Apps supports:
2424
Features include:
2525

2626
- There's no required base container image.
27-
- Changes to the `template` ARM configuration section trigger a new [container app revision](application-lifecycle-management.md).
27+
- Changes to the `template` configuration section trigger a new [container app revision](application-lifecycle-management.md).
2828
- If a container crashes, it automatically restarts.
2929

30-
> [!NOTE]
31-
> The only supported protocols for a container app's fully qualified domain name (FQDN) are HTTP and HTTPS through ports 80 and 443 respectively.
32-
3330
## Configuration
3431

3532

@@ -110,12 +107,12 @@ The following code is an example of the `containers` array in the [`properties.t
110107
| `command` | The container's startup command. | Equivalent to Docker's [entrypoint](https://docs.docker.com/engine/reference/builder/) field. |
111108
| `args` | Start up command arguments. | Entries in the array are joined together to create a parameter list to pass to the startup command. |
112109
| `env` | An array of key/value pairs that define environment variables. | Use `secretRef` instead of the `value` field to refer to a secret. |
113-
| `resources.cpu` | The number of CPUs allocated to the container. | Values must adhere to the following rules: the value must be greater than zero and less than or equal to 2, and can be any decimal number, with a maximum of two decimal places. For example, `1.25` is valid, but `1.555` is invalid. The default is 0.5 CPU per container. |
114-
| `resources.memory` | The amount of RAM allocated to the container. | This value is up to `4Gi`. The only allowed units are [gibibytes](https://simple.wikipedia.org/wiki/Gibibyte) (`Gi`). Values must adhere to the following rules: the value must be greater than zero and less than or equal to `4Gi`, and can be any decimal number, with a maximum of two decimal places. For example, `1.25Gi` is valid, but `1.555Gi` is invalid. The default is `1Gi` per container. |
110+
| `resources.cpu` | The number of CPUs allocated to the container. | With the Consumption plan, values must adhere to the following rules:<br><br>• greater than zero<br>• less than or equal to 2<br>• can be any decimal number (with a max of two decimal places)<br><br> For example, `1.25` is valid, but `1.555` is invalid.<br> The default is 0.25 CPU per container.<br><br>When using the Consumption workload profile in the Consumption + Dedicated plan structure, the same rules apply except CPU must be less than or equal to 4.<br><br>When using a Dedicated workload profile in the Consumption + Dedicated plan structure, the maximum CPU must be less than or equal to the number of cores available in the profile. |
111+
| `resources.memory` | The amount of RAM allocated to the container. | With the Consumption plan, values must adhere to the following rules:<br><br>• greater than zero<br>• less than or equal to `4Gi`<br>• can be any decimal number (with a max of two decimal places)<br><br>For example, `1.25Gi` is valid, but `1.555Gi` is invalid.<br>The default is `0.5Gi` per container.<br><br>When using the Consumption workload profile in the Consumption + Dedicated plan structure, the same rules apply except memory must be less than or equal to `8Gi`.<br><br>When using a dedicated workload profile in the Consumption + Dedicated plan structure, the maximum memory must be less than or equal to the amount of memory available in the profile. |
115112
| `volumeMounts` | An array of volume mount definitions. | You can define a temporary volume or multiple permanent storage volumes for your container. For more information about storage volumes, see [Use storage mounts in Azure Container Apps](storage-mounts.md).|
116113
| `probes`| An array of health probes enabled in the container. | This feature is based on Kubernetes health probes. For more information about probes settings, see [Health probes in Azure Container Apps](health-probes.md).|
117114

118-
The total CPU and memory allocations requested for all the containers in a container app must add up to one of the following combinations.
115+
In the Consumption plan, the total CPU and memory allocations requested for all the containers in a container app must add up to one of the following combinations.
119116

120117
| vCPUs (cores) | Memory |
121118
|---|---|
@@ -128,9 +125,32 @@ The total CPU and memory allocations requested for all the containers in a conta
128125
| `1.75` | `3.5Gi` |
129126
| `2.0` | `4.0Gi` |
130127

128+
Alternatively, the Consumption workload profile in the Consumption + Dedicated plan structure, the total CPU and memory allocations requested for all the containers in a container app must add up to one of the following combinations.
129+
130+
| vCPUs (cores) | Memory |
131+
|---|---|
132+
| `0.25` | `0.5Gi` |
133+
| `0.5` | `1.0Gi` |
134+
| `0.75` | `1.5Gi` |
135+
| `1.0` | `2.0Gi` |
136+
| `1.25` | `2.5Gi` |
137+
| `1.5` | `3.0Gi` |
138+
| `1.75` | `3.5Gi` |
139+
| `2.0` | `4.0Gi` |
140+
| `2.25` | `4.5Gi` |
141+
| `2.5` | `5.0Gi` |
142+
| `2.75` | `5.5Gi` |
143+
| `3.0` | `6.0Gi` |
144+
| `3.25` | `6.5Gi` |
145+
| `3.5` | `7.0Gi` |
146+
| `3.75` | `7.5Gi` |
147+
| `4.0` | `8.0Gi` |
148+
131149
- The total of the CPU requests in all of your containers must match one of the values in the vCPUs column.
132150
- The total of the memory requests in all your containers must match the memory value in the memory column in the same row of the CPU column.
133151

152+
When you use a Dedicated workload profile in the Consumption + Dedicated plan structure, the total CPU and memory allocations requested for all the containers in a container app must be less than or equal to the cores and memory available in the profile.
153+
134154
## Multiple containers
135155

136156
You can define multiple containers in a single container app to implement the [sidecar pattern](/azure/architecture/patterns/sidecar). The containers in a container app share hard disk and network resources and experience the same [application lifecycle](./application-lifecycle-management.md).

articles/container-apps/environment.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ Settings relevant to the Azure Container Apps environment API resource.
4444

4545
## Billing
4646

47-
Billing is relevant only to individual container apps and their resource usage. There are no base charges associated with the Container Apps environment.
47+
Azure Container Apps has two different pricing structures.
48+
49+
- If you're using the Consumption only plan, or only the Consumption workload profile in the Consumption + Dedicated plan structure then billing is relevant only to individual container apps and their resource usage. There's no cost associated with the Container Apps environment.
50+
- If you're using any Dedicated workload profiles in the Consumption + Dedicated plan structure, there's a fixed cost for the Dedicated plan management. This cost is for the entire environment regardless of how many Dedicated workload profiles you're using.
4851

4952
## Next steps
5053

articles/container-apps/firewall-integration.md

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,29 @@
22
title: Securing a custom VNET in Azure Container Apps
33
description: Firewall settings to secure a custom VNET in Azure Container Apps
44
services: container-apps
5-
author: JennyLawrance
5+
author: CaryChai
66
ms.service: container-apps
77
ms.custom: event-tier1-build-2022
88
ms.topic: reference
9-
ms.date: 07/15/2022
10-
ms.author: jennylaw
9+
ms.date: 03/29/2023
10+
ms.author: cachai
1111
---
1212

13-
# Securing a custom VNET in Azure Container Apps
13+
# Securing a custom VNET in Azure Container Apps with Network Security Groups
1414

1515
Network Security Groups (NSGs) needed to configure virtual networks closely resemble the settings required by Kubernetes.
1616

17-
You can lock down a network via NSGs with more restrictive rules than the default NSG rules to control all inbound and outbound traffic for the Container App Environment.
17+
You can lock down a network via NSGs with more restrictive rules than the default NSG rules to control all inbound and outbound traffic for the Container Apps environment at the subscription level.
1818

19-
Using custom user-defined routes (UDRs) or ExpressRoutes, other than with UDRs of selected destinations that you own, are not yet supported for Container App Environments with VNETs. Therefore, securing outbound traffic with a firewall is not yet supported.
19+
In the workload profiles architecture, user-defined routes (UDRs) and securing outbound traffic with a firewall are supported. Learn more in the [networking concepts document](./networking.md#user-defined-routes-udr---preview).
20+
21+
In the Consumption only architecture, custom user-defined routes (UDRs) and ExpressRoutes aren't supported.
2022

2123
## NSG allow rules
2224

2325
The following tables describe how to configure a collection of NSG allow rules.
24-
2526
>[!NOTE]
26-
> The subnet associated with a Container App Environment requires a CIDR prefix of `/23` or larger.
27+
> The subnet associated with a Container App Environment on the Consumption only architecture requires a CIDR prefix of `/23` or larger. On the workload profiles architecture (preview), a `/27` or larger is required.
2728
2829
### Inbound
2930

@@ -32,16 +33,30 @@ The following tables describe how to configure a collection of NSG allow rules.
3233
| Any | \* | Infrastructure subnet address space | Allow communication between IPs in the infrastructure subnet. This address is passed as a parameter when you create an environment. For example, `10.0.0.0/21`. |
3334
| Any | \* | AzureLoadBalancer | Allow the Azure infrastructure load balancer to communicate with your environment. |
3435

35-
### Outbound with ServiceTags
36+
### Outbound with service tags
37+
38+
The following service tags are required when using NSGs on the Consumption only architecture:
3639

3740
| Protocol | Port | ServiceTag | Description
3841
|--|--|--|--|
3942
| UDP | `1194` | `AzureCloud.<REGION>` | Required for internal AKS secure connection between underlying nodes and control plane. Replace `<REGION>` with the region where your container app is deployed. |
4043
| TCP | `9000` | `AzureCloud.<REGION>` | Required for internal AKS secure connection between underlying nodes and control plane. Replace `<REGION>` with the region where your container app is deployed. |
4144
| TCP | `443` | `AzureMonitor` | Allows outbound calls to Azure Monitor. |
4245

46+
The following service tags are required when using NSGs on the workload profiles architecture:
47+
48+
>[!Note]
49+
> If you are using Azure Container Registry (ACR) with NSGs configured on your virtual network, create a private endpoint on your ACR to allow Container Apps to pull images through the virtual network.
50+
51+
| Protocol | Port | Service Tag | Description
52+
|--|--|--|--|
53+
| TCP | `443` | `MicrosoftContainerRegistry` | This is the service tag for container registry for microsoft containers. |
54+
| TCP | `443` | `AzureFrontDoor.FirstParty` | This is a dependency of the `MicrosoftContainerRegistry` service tag. |
55+
4356
### Outbound with wild card IP rules
4457

58+
The following IP rules are required when using NSGs on both the Consumption only architecture and the workload profiles architecture:
59+
4560
| Protocol | Port | IP | Description |
4661
|--|--|--|--|
4762
| TCP | `443` | \* | Allowing all outbound on port `443` provides a way to allow all FQDN based outbound dependencies that don't have a static IP. |
@@ -52,5 +67,5 @@ The following tables describe how to configure a collection of NSG allow rules.
5267

5368
#### Considerations
5469

55-
- If you are running HTTP servers, you might need to add ports `80` and `443`.
70+
- If you're running HTTP servers, you might need to add ports `80` and `443`.
5671
- Adding deny rules for some ports and protocols with lower priority than `65000` may cause service interruption and unexpected behavior.

articles/container-apps/log-options.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ You can choose between these logs destinations:
2727
- Azure storage account to archive.
2828
- Azure event hub for data ingestion and analytic services. For more information, see [Azure Event Hubs](../event-hubs/event-hubs-about.md).
2929
- An Azure partner monitoring solution such as, Datadog, Elastic, Logz.io and others. For more information, see [Partner solutions](../partner-solutions/overview.md).
30-
- **None**: You can disable the storage of log data. You'll still be able to view real-time container logs via the **Logs stream** feature in your container app. For more information, see [Log streaming](log-streaming.md).
30+
- **None**: You can disable the storage of log data. When disabled, you can still view real-time container logs via the **Logs stream** feature in your container app. For more information, see [Log streaming](log-streaming.md).
31+
32+
> [!NOTE]
33+
> Azure Monitor is not currently supported in the Consumption + Dedicated plan structure.
3134
3235
When *None* or the *Azure Monitor* destination is selected, the **Logs** menu item providing the Log Analytics query editor in the Azure portal is disabled.
3336

@@ -43,7 +46,7 @@ Use these steps to configure the logging options for your Container Apps environ
4346
- **None**: This option disables the storage of log data.
4447
1. Select **Save**.
4548
:::image type="content" source="media/observability/log-opts-screenshot-page-save-button.png" alt-text="Screenshot Logging options page.":::
46-
1. If you have selected **Azure Monitor** as your logs destination, you must configure **Diagnostic settings**. The **Diagnostic settings** item will appear below the **Logging options** menu item.
49+
1. If you have selected **Azure Monitor** as your logs destination, you must configure **Diagnostic settings**. The **Diagnostic settings** item appears below the **Logging options** menu item.
4750

4851
### Diagnostic settings
4952

42.9 KB
Loading
47.6 KB
Loading

0 commit comments

Comments
 (0)