Skip to content

Commit 5220c12

Browse files
Merge pull request #313987 from MicrosoftDocs/main
Auto Publish – main to live - 2026-03-31 06:00 UTC
2 parents 66a0c70 + 2423edc commit 5220c12

44 files changed

Lines changed: 1594 additions & 1314 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

articles/app-service/app-service-configuration-references.md

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Set up Azure App Service and Azure Functions to use App Configurati
44
author: muksvso
55

66
ms.topic: how-to
7-
ms.date: 05/08/2025
7+
ms.date: 03/30/2026
88
ms.author: mubatra
99

1010
#customer intent: As a developer, I want to use Azure App Configuration references so that I can make configuration key/value pairs available to code.
@@ -17,6 +17,20 @@ ms.custom: sfi-ropc-nochange
1717

1818
This article shows how to work with configuration data in Azure App Service or Azure Functions applications without making any code changes. [Azure App Configuration](../azure-app-configuration/overview.md) is an Azure service that you can use to centrally manage application configuration. It's also an effective tool for auditing your configuration values over time or across releases.
1919

20+
## Important notes for Azure Functions local development
21+
22+
App Configuration references (`@Microsoft.AppConfiguration(...)`) are resolved by the Azure App Service/Functions platform when your app runs in Azure.
23+
24+
- **Azure (supported):** Put the reference in your function app's **Application settings** (for example, in the Azure portal, ARM/Bicep, or other deployment tooling).
25+
- **Local (not supported):** The Functions host running on your development machine doesn't resolve `@Microsoft.AppConfiguration(...)` values from *local.settings.json*.
26+
- **User secrets (not supported):** The Functions user secrets store (*secrets.json*) is also not processed for `@Microsoft.AppConfiguration(...)` references.
27+
- **SDK code (not required for this feature):** Calling `AddAzureAppConfiguration()` configures the App Configuration SDK for in-process resolution, but it doesn't make the platform resolve `@Microsoft.AppConfiguration(...)` references locally.
28+
29+
If you want the same configuration values locally, use one of the following approaches:
30+
31+
- Add the values directly to *local.settings.json* (for example, set `MySetting` to the literal value you want locally).
32+
- Use the App Configuration SDK in your app code (for example, by configuring `AddAzureAppConfiguration()` and connecting to your store with a connection string or credentials appropriate for local dev). This approach is separate from platform references.
33+
2034
## Grant app access to App Configuration
2135

2236
To get started with using App Configuration references in App Service, first you create an App Configuration store. You then grant permissions to your app to access the configuration key/value pairs that are in the store.
@@ -78,20 +92,58 @@ An App Configuration reference has the form `@Microsoft.AppConfiguration({refere
7892
Here's an example of a complete reference that includes `Label`:
7993
8094
```json
81-
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey; Label=myKeyLabel)
95+
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey; Label=myKeyLabel)
8296
```
8397

8498
Here's an example that doesn't include `Label`:
8599

86100
```json
87-
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey)
101+
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey)
88102
```
89103

90104
Any configuration change to the app that results in a site restart causes an immediate refetch of all referenced key/value pairs from the App Configuration store.
91105

92106
> [!NOTE]
93107
> Automatic refresh and refetch of these values when the key/value pairs are updated in App Configuration isn't currently supported.
94108
109+
## Working example (Azure Functions)
110+
111+
The following example shows where the `@Microsoft.AppConfiguration(...)` syntax goes for an Azure Functions app.
112+
113+
### 1) Create a key/value in App Configuration
114+
115+
In your App Configuration store, create a key/value pair:
116+
117+
- **Key:** `Demo:Color`
118+
- **Label:** (optional) `dev`
119+
- **Value:** `Blue`
120+
121+
### 2) Add an application setting to your function app in Azure
122+
123+
In your Function App (in Azure), add an application setting named `Demo__Color` and set its value to an App Configuration reference.
124+
125+
> [!NOTE]
126+
> Use double underscores (`__`) if you want .NET configuration binding to map to `Demo:Color`.
127+
128+
**Application setting name**
129+
130+
```text
131+
Demo__Color
132+
```
133+
134+
**Application setting value**
135+
136+
```text
137+
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=Demo:Color; Label=dev)
138+
```
139+
140+
### 3) Read the setting in your function code
141+
142+
At runtime, your code reads `Demo:Color` like any other app setting.
143+
144+
> [!TIP]
145+
> You don't need to call `AddAzureAppConfiguration()` for platform references. Use `AddAzureAppConfiguration()` only when you want to load configuration directly via the SDK.
146+
95147
## Source application settings from App Configuration
96148

97149
You can use App Configuration references as values for [application settings](configure-common.md#configure-app-settings) so you can keep configuration data in App Configuration instead of in the site configuration settings. Application settings and App Configuration key/value pairs are both securely encrypted at rest. If you need centralized configuration management capabilities, add configuration data to App Configuration.
@@ -162,8 +214,8 @@ Here's a sample template for a function app that has App Configuration reference
162214
"[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]"
163215
],
164216
"properties": {
165-
"WEBSITE_FONTNAME": "[concat('@Microsoft.AppConfiguration(Endpoint=', reference(resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))).endpoint,'; Key=',variables('FontNameKey'),'; Label=',variables('myLabel'), ')')]",
166-
"WEBSITE_FONTCOLOR": "[concat('@Microsoft.AppConfiguration(Endpoint=', reference(resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))).endpoint,'; Key=',variables('FontColorKey'),'; Label=',variables('myLabel'), ')')]",
217+
"WEBSITE_FONTNAME": "[concat('@Microsoft.AppConfiguration(Endpoint=', reference(resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))).endpoint,'; Key=',variables('FontNameKey'),'; Label=',variables('myLabel'), ')]",
218+
"WEBSITE_FONTCOLOR": "[concat('@Microsoft.AppConfiguration(Endpoint=', reference(resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))).endpoint,'; Key=',variables('FontColorKey'),'; Label=',variables('myLabel'), ')]",
167219
"WEBSITE_ENABLE_SYNC_UPDATE_SITE": "true"
168220
//...
169221
}
@@ -202,7 +254,6 @@ Here's a sample template for a function app that has App Configuration reference
202254
//...
203255
"dependsOn": [
204256
"[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]"
205-
206257
],
207258
"properties": {
208259
"value": "Calibri",
@@ -216,7 +267,6 @@ Here's a sample template for a function app that has App Configuration reference
216267
//...
217268
"dependsOn": [
218269
"[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]"
219-
220270
],
221271
"properties": {
222272
"value": "Blue",
@@ -226,8 +276,8 @@ Here's a sample template for a function app that has App Configuration reference
226276
]
227277
},
228278
{
229-
"scope": "[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]",
230-
"type": "Microsoft.Authorization/roleAssignments",
279+
"scope": "[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName')]
280+
,"type": "Microsoft.Authorization/roleAssignments",
231281
"apiVersion": "2020-04-01-preview",
232282
"name": "[parameters('roleNameGuid')]",
233283
"properties": {

articles/app-service/scripts/terraform-secure-backend-frontend.md

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,45 @@ description: Learn how to use terraform provider for App Service to deploy two w
44
author: ericgre
55
ms.assetid: 3e5d1bbd-5581-40cc-8f65-bc74f1802156
66
ms.topic: sample
7-
ms.date: 12/06/2022
7+
ms.date: 03/30/2026
88
ms.author: ericg
99
ms.service: azure-app-service
1010
ms.custom: devx-track-terraform
1111
---
1212

1313
# Create two web apps connected securely with Private Endpoint and VNet integration
1414

15-
This article illustrates an example use of [Private Endpoint](../networking/private-endpoint.md) and regional [VNet integration](../overview-vnet-integration.md) to connect two web apps (frontend and backend) securely with the following terraform configuration:
16-
- Deploy a VNet
17-
- Create the first subnet for the integration
18-
- Create the second subnet for the private endpoint, you have to set a specific parameter to disable network policies
19-
- Deploy one App Service plan of type Basic, Standard, PremiumV2, PremiumV3, IsolatedV2, Functions Premium (sometimes referred to as the Elastic Premium plan), required for Private Endpoint feature
20-
- Create the frontend web app with specific app settings to consume the private DNS zone, [more details](../overview-vnet-integration.md#azure-dns-private-zones)
21-
- Connect the frontend web app to the integration subnet
22-
- Create the backend web app
23-
- Create the DNS private zone with the name of the private link zone for web app privatelink.azurewebsites.net
24-
- Link this zone to the VNet
25-
- Create the private endpoint for the backend web app in the endpoint subnet, and register DNS names (website and SCM) in the previously created DNS private zone
15+
This article illustrates an example use of [Private Endpoint](../networking/private-endpoint.md) and regional [VNet integration](../overview-vnet-integration.md) to connect two web apps (frontend and backend) securely with the following Terraform configuration:
16+
17+
1. Deploy a VNet
18+
1. Create the first subnet for the integration
19+
1. Create the second subnet for the private endpoint, and disable subnet network policies for private endpoints (set `private_endpoint_network_policies_enabled = false`)
20+
1. Deploy one App Service plan of type Basic, Standard, PremiumV2, PremiumV3, IsolatedV2, Functions Premium (sometimes referred to as the Elastic Premium plan), required for the Private Endpoint feature
21+
1. Create the frontend web app with specific app settings to consume the private DNS zone. For more information, see [Azure DNS private zones](../overview-vnet-integration.md#azure-dns-private-zones).
22+
1. Connect the frontend web app to the integration subnet
23+
1. Create the backend web app
24+
1. Create the DNS private zone with the name of the private link zone for web apps (`privatelink.azurewebsites.net`)
25+
1. Link this zone to the VNet
26+
1. Create the private endpoint for the backend web app in the endpoint subnet, and register DNS names (site and SCM) in the previously created DNS private zone
2627

2728
## How to use terraform in Azure
2829

2930
Browse to the [Azure documentation](/azure/developer/terraform/) to learn how to use terraform with Azure.
3031

3132
## The complete terraform file
3233

33-
To use this file, replace the placeholders _\<unique-frontend-app-name>_ and _\<unique-backend-app-name>_ (app name is used to form a unique DNS name worldwide).
34+
To use this file, replace the placeholders _\<unique-frontend-app-name>_ and _\<unique-backend-app-name>_ (app name is used to form a unique DNS name worldwide).
3435

3536
```hcl
3637
terraform {
3738
required_providers {
3839
azurerm = {
39-
source = "hashicorp/azurerm"
40-
version = "~>3.0"
40+
source = "hashicorp/azurerm"
41+
version = "~> 3.0"
4142
}
4243
}
4344
}
45+
4446
provider "azurerm" {
4547
features {}
4648
}
@@ -62,8 +64,10 @@ resource "azurerm_subnet" "integrationsubnet" {
6264
resource_group_name = azurerm_resource_group.rg.name
6365
virtual_network_name = azurerm_virtual_network.vnet.name
6466
address_prefixes = ["10.0.1.0/24"]
67+
6568
delegation {
6669
name = "delegation"
70+
6771
service_delegation {
6872
name = "Microsoft.Web/serverFarms"
6973
}
@@ -75,7 +79,8 @@ resource "azurerm_subnet" "endpointsubnet" {
7579
resource_group_name = azurerm_resource_group.rg.name
7680
virtual_network_name = azurerm_virtual_network.vnet.name
7781
address_prefixes = ["10.0.2.0/24"]
78-
private_endpoint_network_policies_enabled = true
82+
83+
private_endpoint_network_policies_enabled = false
7984
}
8085
8186
resource "azurerm_service_plan" "appserviceplan" {
@@ -90,25 +95,26 @@ resource "azurerm_windows_web_app" "frontwebapp" {
9095
name = "<unique-frontend-app-name>"
9196
location = azurerm_resource_group.rg.location
9297
resource_group_name = azurerm_resource_group.rg.name
93-
service_plan_id = azurerm_service_plan.appserviceplan.id
98+
service_plan_id = azurerm_service_plan.appserviceplan.id
9499
95100
site_config {}
101+
96102
app_settings = {
97-
"WEBSITE_DNS_SERVER": "168.63.129.16",
98-
"WEBSITE_VNET_ROUTE_ALL": "1"
103+
"WEBSITE_DNS_SERVER" = "168.63.129.16"
104+
"WEBSITE_VNET_ROUTE_ALL" = "1"
99105
}
100106
}
101107
102108
resource "azurerm_app_service_virtual_network_swift_connection" "vnetintegrationconnection" {
103-
app_service_id = azurerm_windows_web_app.frontwebapp.id
104-
subnet_id = azurerm_subnet.integrationsubnet.id
109+
app_service_id = azurerm_windows_web_app.frontwebapp.id
110+
subnet_id = azurerm_subnet.integrationsubnet.id
105111
}
106112
107113
resource "azurerm_windows_web_app" "backwebapp" {
108114
name = "<unique-backend-app-name>"
109115
location = azurerm_resource_group.rg.location
110116
resource_group_name = azurerm_resource_group.rg.name
111-
service_plan_id = azurerm_service_plan.appserviceplan.id
117+
service_plan_id = azurerm_service_plan.appserviceplan.id
112118
113119
site_config {}
114120
}
@@ -119,10 +125,10 @@ resource "azurerm_private_dns_zone" "dnsprivatezone" {
119125
}
120126
121127
resource "azurerm_private_dns_zone_virtual_network_link" "dnszonelink" {
122-
name = "dnszonelink"
123-
resource_group_name = azurerm_resource_group.rg.name
128+
name = "dnszonelink"
129+
resource_group_name = azurerm_resource_group.rg.name
124130
private_dns_zone_name = azurerm_private_dns_zone.dnsprivatezone.name
125-
virtual_network_id = azurerm_virtual_network.vnet.id
131+
virtual_network_id = azurerm_virtual_network.vnet.id
126132
}
127133
128134
resource "azurerm_private_endpoint" "privateendpoint" {
@@ -132,20 +138,19 @@ resource "azurerm_private_endpoint" "privateendpoint" {
132138
subnet_id = azurerm_subnet.endpointsubnet.id
133139
134140
private_dns_zone_group {
135-
name = "privatednszonegroup"
141+
name = "privatednszonegroup"
136142
private_dns_zone_ids = [azurerm_private_dns_zone.dnsprivatezone.id]
137143
}
138144
139145
private_service_connection {
140-
name = "privateendpointconnection"
146+
name = "privateendpointconnection"
141147
private_connection_resource_id = azurerm_windows_web_app.backwebapp.id
142-
subresource_names = ["sites"]
143-
is_manual_connection = false
148+
subresource_names = ["sites"]
149+
is_manual_connection = false
144150
}
145151
}
146152
```
147153

148154
## Next steps
149155

150-
151156
> [Learn more about using Terraform in Azure](/azure/developer/terraform/)

articles/application-gateway/configuration-infrastructure.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,13 @@ Depending on whether you're creating new resources or using existing ones, add t
8484

8585
| Resource | Resource status | Required Azure permissions |
8686
| --- | --- | --- |
87-
| Subnet | Create new | `Microsoft.Network/virtualNetworks/subnets/write` <br> 'Microsoft.Network/virtualNetworks/subnets/join/action` |
88-
| Subnet | Use existing | `Microsoft.Network/virtualNetworks/subnets/read` <br> `Microsoft.Network/virtualNetworks/subnets/join/action` |
89-
| IP addresses | Create new | `Microsoft.Network/publicIPAddresses/write` <br> `Microsoft.Network/publicIPAddresses/join/action` |
90-
| IP addresses | Use existing | `Microsoft.Network/publicIPAddresses/read` <br> `Microsoft.Network/publicIPAddresses/join/action` |
91-
| ApplicationGatewayWebApplicationFirewallPolicies | Create new / Update existing | `Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/write` <br> `Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/read` <br> `Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/join/action` |
87+
| Subnet | Create new | - Microsoft.Network/virtualNetworks/subnets/write<br>- Microsoft.Network/virtualNetworks/subnets/join/action|
88+
| Subnet | Use existing | - Microsoft.Network/virtualNetworks/subnets/read<br>- Microsoft.Network/virtualNetworks/subnets/join/action|
89+
| IP addresses | Create new |- Microsoft.Network/publicIPAddresses/write<br>- Microsoft.Network/publicIPAddresses/join/action|
90+
| IP addresses | Use existing |- Microsoft.Network/publicIPAddresses/read<br>- Microsoft.Network/publicIPAddresses/join/action|
91+
| ApplicationGatewayWebApplicationFirewallPolicies | Create new / Update existing |- Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/write<br>-Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/read<br>- Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/join/action|
9292

93-
For more information, see [Azure permissions for Networking](../role-based-access-control/permissions/networking.md) and [Virtual network permissions](../virtual-network/virtual-network-manage-subnet.md#permissions).
93+
For mo re information, see [Azure permissions for Networking](../role-based-access-control/permissions/networking.md) and [Virtual network permissions](../virtual-network/virtual-network-manage-subnet.md#permissions).
9494

9595
> [!NOTE]
9696
> When deploying an Application Gateway as part of an [Azure Managed Application](../azure-resource-manager/managed-applications/overview.md), ensure that any deny assignments do not conflict with the RBAC Owner role assignment, as deny assignments take precedence over RBAC permissions.

articles/container-apps/opentelemetry-agents.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Learn to record and query data collected using OpenTelemetry in Azu
44
services: container-apps
55
author: craigshoemaker
66
ms.service: azure-container-apps
7-
ms.date: 12/09/2025
7+
ms.date: 03/30/2026
88
ms.author: cshoe
99
ms.topic: how-to
1010
ms.custom:
@@ -756,14 +756,15 @@ In the event of a messaging inturruptions to an endpoint, the OpenTelemetry agen
756756

757757
The OpenTelemetry agent automatically injects a set of environment variables into your application at runtime.
758758

759-
The first two environment variables follow standard OpenTelemetry exporter configuration and are used in OTLP standard software development kits. If you explicitly set the environment variable in the container app specification, your value overwrites the automatically injected value.
759+
The first three environment variables follow standard OpenTelemetry configuration and are used in OTLP standard software development kits. If you explicitly set the environment variable in the container app specification, your value overwrites the automatically injected value.
760760

761761
Learn about the OTLP exporter configuration see, [OTLP Exporter Configuration](https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/).
762762

763763
| Name | Description |
764764
|---|---|
765765
| `OTEL_EXPORTER_OTLP_ENDPOINT` | A base endpoint URL for any signal type, with an optionally specified port number. This setting is helpful when you’re sending more than one signal to the same endpoint and want one environment variable to control the endpoint. Example: `http://otel.service.k8se-apps:4317/` |
766766
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Specifies the OTLP transport protocol used for all telemetry data. The managed agent only supports `grpc`. Value: `grpc`. |
767+
| `OTEL_RESOURCE_ATTRIBUTES` | A comma-separated list of key-value pairs that define [resource attributes](https://opentelemetry.io/docs/specs/otel/resource/sdk/) attached to all telemetry data. The managed agent populates this variable with container app attributes such as the app name and environment. Some OpenTelemetry SDK implementations require you to explicitly enable environment-based resource detection to use these attributes. If you set this variable in the container app specification, your value overwrites the automatically injected value. |
767768

768769
The other three environment variables are specific to Azure Container Apps, and are always injected. These variables hold agent’s endpoint URLs for each specific data type (logs, metrics, traces).
769770

0 commit comments

Comments
 (0)