You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/application-gateway/migrate-v1-v2.md
+32-32Lines changed: 32 additions & 32 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ author: mbender-ms
6
6
ms.service: azure-application-gateway
7
7
ms.custom: devx-track-azurepowershell
8
8
ms.topic: how-to
9
-
ms.date: 11/3/2025
9
+
ms.date: 11/4/2025
10
10
ms.author: mbender
11
11
# Customer intent: As an DevOps engineer, I want to migrate my Azure Application Gateway and Web Application Firewall from V1 to V2, so that I can leverage the improved features and performance while ensuring minimal downtime during the transition.
12
12
---
@@ -84,7 +84,7 @@ To run the script:
84
84
4. Install the script by following the steps-[Install Script](../application-gateway/migrate-v1-v2.md#installing-the-script)
85
85
5. Run the script using the appropriate parameters. It may take five to seven minutes to finish.
* After script completion, review the V2 gateway configuration in the Azure portal and test connectivity by sending traffic directly to the V2 gateway’s IP.
@@ -144,7 +143,7 @@ The legacy script takes below parameters:
144
143
> Ensure that there's no existing Application gateway with the provided AppGW V2 Name and Resource group name in V1 subscription. This rewrites the existing resources.
145
144
146
145
147
-
* **sslCertificates: [PSApplicationGatewaySslCertificate]: Optional**. A comma-separated list of PSApplicationGatewaySslCertificate objects that you create to represent the TLS/SSL certs from your V1 gateway must be uploaded to the new V2 gateway. For each of your TLS/SSL certs configured for your Standard V1 or WAF V1 gateway, you can create a new PSApplicationGatewaySslCertificate object via the `New-AzApplicationGatewaySslCertificate` command shown here. You need the path to your TLS/SSL Cert file and the password.
146
+
* **sslCertificates: [PSApplicationGatewaySslCertificate]: Optional**. A comma-separated list of PSApplicationGatewaySslCertificate objects that you create to represent the TLS/SSL certs from your V1 gateway must be uploaded to the new V2 gateway. For each of your TLS/SSL certs configured for your Standard V1 or WAF V1 gateway, you can create a new PSApplicationGatewaySslCertificate object via the `New-AzApplicationGatewaySslCertificate` command shown here. You need the path to your TLS/SSL Cert file and the password.
148
147
149
148
This parameter is only optional if you don't have HTTPS listeners configured for your V1 gateway or WAF. If you have at least one HTTPS listener setup, you must specify this parameter.
150
149
```azurepowershell
@@ -185,7 +184,7 @@ The legacy script takes below parameters:
185
184
```
186
185
To create a list of PSApplicationGatewayTrustedRootCertificate objects, see [New-AzApplicationGatewayTrustedRootCertificate](/powershell/module/Az.Network/New-AzApplicationGatewayTrustedRootCertificate).
187
186
188
-
***privateIpAddress: [String]: Optional**. A specific private IP address that you want to associate to your new V2 gateway. This must be from the same VNet that you allocate for your new V2 gateway. If this isn't specified, the script allocates a private IP address for your V2 gateway.
187
+
***privateIpAddress: [String]: Optional**. A specific private IP address that you want to associate to your new V2 gateway. This must be from the same VNet that you allocate for your new V2 gateway. If this isn't specified, the script allocates a private IP address for your V2 gateway.
189
188
190
189
***publicIpResourceId: [String]: Optional**. The resourceId of existing public IP address (standard SKU) resource in your subscription that you want to allocate to the new V2 gateway. If public Ip resource name is provided, ensure that it exists in succeeded state.
191
190
If this isn't specified, the script allocates a new public IP address in the same resource group. The name is the V2 gateway's name with *-IP* appended. If AppGWResourceGroupName is provided and a public IP address isn't provided, ensure that public IP resource with name AppGWV2Name-IP doesn’t exist in a resource group with the name AppGWResourceGroupName in the V1 subscription.
@@ -206,21 +205,21 @@ To run the script:
206
205
4. Install the script by following the steps-[Install Script](../application-gateway/migrate-v1-v2.md#installing-the-script)
207
206
5. Run `Get-Help AzureAppGWMigration.ps1` to examine the required parameters:
208
207
6. Run the script using the appropriate parameters. It may take five to seven minutes to finish.
209
-
```
210
-
AzureAppGWMigration.ps1
211
-
-resourceId <V1 application gateway Resource ID>
212
-
-subnetAddressRange <subnet space you want to use>
213
-
-appgwName <string to use to append>
214
-
-AppGWResourceGroupName <resource group name you want to use>
215
-
-sslCertificates <comma-separated SSLCert objects as above>
216
-
-trustedRootCertificates <comma-separated Trusted Root Cert objects as above>
217
-
-privateIpAddress <private IP string>
218
-
-publicIpResourceId <public IP name string>
219
-
-validateMigration -enableAutoScale
208
+
```Azurepowershell
209
+
./AzureAppGWMigration.ps1
210
+
-resourceId <V1 application gateway Resource ID>
211
+
-subnetAddressRange <subnet space you want to use>
212
+
-appgwName <string to use to append>
213
+
-AppGWResourceGroupName <resource group name you want to use>
214
+
-sslCertificates <comma-separated SSLCert objects as above>
215
+
-trustedRootCertificates <comma-separated Trusted Root Cert objects as above>
Once the IP swap is complete, customers should check control and data plane operations on the V2 gateway. All control plane actions except Delete will be disabled on the V1 gateway.
327
327
> [!NOTE]
@@ -332,14 +332,14 @@ AzureAppGWIPMigrate.ps1
332
332
333
333
### Traffic Migration recommendations
334
334
335
-
The following are a few scenarios where your current application gateway (Standard) may receive client traffic, and our recommendations for each one:
335
+
The following are a few scenarios where your current application gateway (Standard) can receive client traffic, and our recommendations for each one:
336
336
***A custom DNS zone (for example, contoso.com) that points to the frontend IP address (using an A record) associated with your Standard V1 or WAF V1 gateway**.
337
-
You can update your DNS record to point to the frontend IP or DNS label associated with your Standard_V2 application gateway. Depending on the TTL configured on your DNS record, it may take a while for all your client traffic to migrate to your new V2 gateway.
337
+
You can update your DNS record to point to the frontend IP or DNS label associated with your Standard_V2 application gateway. Depending on the TTL configured on your DNS record, it can take a while for all your client traffic to migrate to your new V2 gateway.
338
338
***A custom DNS zone (for example, contoso.com) that points to the DNS label (for example: *myappgw.eastus.cloudapp.azure.com* using a CNAME record) associated with your V1 gateway**.
339
339
You have two choices:
340
340
* If you use public IP addresses on your application gateway, you can do a controlled, granular migration using a Traffic Manager profile to incrementally route traffic (weighted traffic routing method) to the new V2 gateway.
341
341
You can do this by adding the DNS labels of both the V1 and V2 application gateways to the [Traffic Manager profile](../traffic-manager/traffic-manager-routing-methods.md#weighted-traffic-routing-method), and CNAMEing your custom DNS record (for example, `www.contoso.com`) to the Traffic Manager domain (for example, contoso.trafficmanager.net).
342
-
* Or, you can update your custom domain DNS record to point to the DNS label of the new V2 application gateway. Depending on the TTL configured on your DNS record, it may take a while for all your client traffic to migrate to your new V2 gateway.
342
+
* Or, you can update your custom domain DNS record to point to the DNS label of the new V2 application gateway. Depending on the TTL configured on your DNS record, it can take a while for all your client traffic to migrate to your new V2 gateway.
343
343
***Your clients connect to the frontend IP address of your application gateway**.
344
344
Update your clients to use the IP address associated with the newly created V2 application gateway. We recommend that you don't use IP addresses directly. Consider using the DNS name label (for example, yourgateway.eastus.cloudapp.azure.com) associated with your application gateway that you can CNAME to your own custom DNS zone (for example, contoso.com).
345
345
@@ -364,7 +364,7 @@ There are five variants available in V1 SKU based on the Tier and Size - Standar
364
364
| WAF Large | 654.08 | 262.8 |Same as for Standard Large |
365
365
366
366
> [!NOTE]
367
-
> The calculations shown here are based on East US and for a gateway with 2 instances in V1. The variable cost in V2 is based on one of the 3 dimensions with highest usage: New connections (50/sec), Persistent connections (2500 persistent connections/min), Throughput (1 CU can handle 2.22 Mbps). <br>
367
+
> The calculations shown here are based on East US and for a gateway with two instances in V1. The variable cost in V2 is based on one of the three dimensions with highest usage: New connections (50/sec), Persistent connections (2500 persistent connections/min), Throughput (one CU can handle 2.22 Mbps). <br>
368
368
> <br>
369
369
> The scenarios described here are examples and are for illustration purposes only. For pricing information according to your region, see the [Pricing page](https://azure.microsoft.com/pricing/details/application-gateway/).
Copy file name to clipboardExpand all lines: articles/azure-functions/durable/durable-functions-eternal-orchestrations.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,6 +26,9 @@ When *continue-as-new* is called, the orchestration instance restarts itself wit
26
26
> [!NOTE]
27
27
> The Durable Task Framework maintains the same instance ID but internally creates a new *execution ID* for the orchestrator function that gets reset by *continue-as-new*. This execution ID is not exposed externally, but it may be useful to know about when debugging orchestration execution.
28
28
29
+
> [!IMPORTANT]
30
+
> If during execution the orchestration encounters an uncaught exception, then the orchestration enters a "failed" state and execution will complete. In particular, this means that a call to *continue-as-new*, even in a `finally` block, will *not* restart the orchestration in the case of an uncaught exception.
31
+
29
32
## Periodic work example
30
33
31
34
One use case for eternal orchestrations is code that needs to do periodic work indefinitely.
Copy file name to clipboardExpand all lines: articles/azure-functions/functions-bindings-mcp.md
+8-1Lines changed: 8 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -86,6 +86,9 @@ You can use the `extensions.mcp` section in `host.json` to define MCP server inf
86
86
"encryptClientState": true,
87
87
"messageOptions": {
88
88
"useAbsoluteUriForEndpoint": false
89
+
},
90
+
"system": {
91
+
"webhookAuthorizationLevel": "System"
89
92
}
90
93
}
91
94
}
@@ -100,6 +103,8 @@ You can use the `extensions.mcp` section in `host.json` to define MCP server inf
100
103
|**encryptClientState**| Determines if client state is encrypted. Defaults to true. Setting to false may be useful for debugging and test scenarios but isn't recommended for production. |
101
104
|**messageOptions**| Options object for the message endpoint in the SSE transport. |
102
105
|**messageOptions.UseAbsoluteUriForEndpoint**| Defaults to `false`. Only applicable to the server-sent events (SSE) transport; this setting doesn't affect the Streamable HTTP transport. If set to `false`, the message endpoint is provided as a relative URI during initial connections over the SSE transport. If set to `true`, the message endpoint is returned as an absolute URI. Using a relative URI isn't recommended unless you have a specific reason to do so.|
106
+
|**system**| Options object for system-level configuration. |
107
+
|**system.webhookAuthorizationLevel**| Defines the authorization level required for the webhook endpoint. Defaults to "System". Allowed values are "System" and "Anonymous". When you set the value to "Anonymous", an access key is no longer required for requests. Regardless of if a key is required or not, you can use [built-in MCP server authorization][authorization] as an identity-based access control layer.<br/>This setting is only available when running on Functions host version 4.1045.0 or later.|
103
108
104
109
## Connect to your MCP server
105
110
@@ -112,7 +117,9 @@ To connect to the MCP server exposed by your function app, you need to provide a
112
117
113
118
<sup>1</sup> Newer protocol versions deprecated the Server-Sent Events transport. Unless your client specifically requires it, you should use the Streamable HTTP transport instead.
114
119
115
-
When hosted in Azure, the endpoints exposed by the extension also require the [system key](./function-keys-how-to.md) named `mcp_extension`. If it isn't provided in the `x-functions-key` HTTP header or in the `code` query string parameter, your client receives a `401 Unauthorized` response. You can retrieve the key using any of the methods described in [Get your function access keys](./function-keys-how-to.md#get-your-function-access-keys). The following example shows how to get the key with the Azure CLI:
120
+
When hosted in Azure, by default, the endpoints exposed by the extension also require the [system key](./function-keys-how-to.md) named `mcp_extension`. If it isn't provided in the `x-functions-key` HTTP header or in the `code` query string parameter, your client receives a `401 Unauthorized` response. You can remove this requirement by setting the `system.webhookAuthorizationLevel` property in `host.json` to `Anonymous`. For more information, see the [host.json settings](#hostjson-settings) section.
121
+
122
+
You can retrieve the key using any of the methods described in [Get your function access keys](./function-keys-how-to.md#get-your-function-access-keys). The following example shows how to get the key with the Azure CLI:
116
123
117
124
```azurecli
118
125
az functionapp keys list --resource-group <RESOURCE_GROUP> --name <APP_NAME> --query systemKeys.mcp_extension --output tsv
0 commit comments