Skip to content

Commit 0cb77da

Browse files
committed
Merge branch 'main' of https://github.com/microsoftdocs/azure-docs-pr into thiago-quickstart-fixup
2 parents ad9233b + 6773c9c commit 0cb77da

309 files changed

Lines changed: 4599 additions & 2680 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/api-management/private-endpoint.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ms.service: azure-api-management
55
author: dlepow
66
ms.author: danlep
77
ms.topic: how-to
8-
ms.date: 11/17/2025
8+
ms.date: 03/17/2026
99
ms.custom:
1010
- build-2025
1111
- sfi-image-nochange
@@ -32,7 +32,9 @@ You can configure an inbound [private endpoint](../private-link/private-endpoint
3232
* Only the API Management instance's **Gateway endpoint** supports inbound Private Link connections.
3333
* Each API Management instance supports at most 100 Private Link connections.
3434
* Connections aren't supported on the [self-hosted gateway](self-hosted-gateway-overview.md) or on a [workspace gateway](workspaces-overview.md#workspace-gateway).
35-
* In the classic API Management tiers, private endpoints aren't supported in instances injected in an internal or external virtual network.
35+
* In the classic API Management tiers, private endpoints aren't supported in instances injected in an internal or external virtual network.
36+
> [!NOTE]
37+
> In the Standard v2 and Premium v2 tiers, private endpoints are supported in instances with any supported virtual network configuration when fronted with [Azure Front Door Premium](../frontdoor/standard-premium/how-to-enable-private-link-apim.md).
3638
3739
## Typical scenarios
3840

@@ -43,9 +45,6 @@ Supported configurations include:
4345
* Pass client requests through a firewall and configure rules to route requests privately to the API Management gateway.
4446
* Configure Azure Front Door (or Azure Front Door with Azure Application Gateway) to receive external traffic and then route traffic privately to the API Management gateway. For example, see [Connect Azure Front Door Premium to an Azure API Management with Private Link](../frontdoor/standard-premium/how-to-enable-private-link-apim.md).
4547

46-
> [!NOTE]
47-
> Currently, routing traffic privately from Azure Front Door to an API Management Premium v2 instance isn't supported.
48-
4948
## Prerequisites
5049

5150
- An existing API Management instance. [Create one if you haven't already](get-started-create-service-instance.md).

articles/app-service/app-service-plan-manage.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ms.assetid: 4859d0d5-3e3c-40cc-96eb-f318b2c51a3d
66
ms.topic: how-to
77
ms.author: msangapu
88
author: msangapu-msft
9-
ms.date: 11/17/2025
9+
ms.date: 03/19/2026
1010
ms.update-cycle: 1095-days
1111
ms.custom: "UpdateFrequency3"
1212

@@ -102,6 +102,19 @@ When creating or manually scaling out an App Service Plan you may experience sit
102102

103103
The preview of App Service Plan Asynchronous enables you to request your target number of instances and the platform scales out to the target number, without you having to modify your original request and retrying. The platform scales to the number of available instances and then triggers the underlying platform to make more instances available. You can make use of this functionality during scale-out operations or at plan creation time. This functionality is supported for all Basic, Standard, and Premium pricing plans.
104104

105+
> [!NOTE]
106+
> This behavior is NOT configurable for App Service Plans created in App Service Environments. App Service Environments create and scale App Service Plans asynchronously by default.
107+
108+
### Scaling up or down App Service Plan SKUs
109+
110+
When using asynchronous scaling, it's possible to scale up or down to a larger or smaller SKU. During this type of operation, no other properties of the App Service Plan can be changed. Scaling up or down to a new SKU may fail if there aren't enough App Service Plan instances available to fully satisfy the request, this is to prevent your App Service Plan having fewer workers than requested.
111+
112+
If a scale up or down operation fails, you can either scale in or out within the current SKU or perform the operation with the minim number of acceptable workers and then scale out asynchronously to the desired target.
113+
114+
### Cancelling an asynchronous scaling operation
115+
116+
An in-progress asynchronous scale operation is canceled only when you explicitly change the TargetWorkerCount property. Changes to other App Service Plan properties don't cancel the operation, including changes to the SKU, or App Service Plan instance count. App Service Plan instance count changes that can't be completed synchronously are ignored unless the TargetWorkerCount is also changed. To explicitly cancel the scale operation, set the TargetWorkerCount to 0.
117+
105118
### [Scale-out (CLI)](#tab/asyncscaleout)
106119
```azurecli-interactive
107120
az appservice plan update -g <resourceGroupName> -n <App Service Plan Name> --async-scaling-enabled true --number-of-workers <number of workers to scale out to>
@@ -111,7 +124,6 @@ az appservice plan update -g <resourceGroupName> -n <App Service Plan Name> --as
111124
```azurecli-interactive
112125
az appservice plan create -g asyncasp -n asyncasplinuxexample --number-of-workers 25 --sku p1v3 --async-scaling-enabled true --location northeurope
113126
```
114-
115127
---
116128

117129
<a name="delete"></a>

articles/app-service/tutorial-nodejs-mongodb-app.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ ms.custom:
2525

2626
# Tutorial: Deploy a Node.js + MongoDB web app to Azure
2727

28-
This tutorial shows how to create a secure Node.js app in [Azure App Service](overview.md) that's connected to an [Azure Cosmos DB for MongoDB](/azure/cosmos-db/mongodb/mongodb-introduction) database. Azure App Service provides a highly scalable, self-patching web hosting service using the Linux operating system. When you're finished, you have an Express.js app running on Azure App Service on Linux.
28+
This tutorial shows how to create a secure Node.js app in [Azure App Service](overview.md) that's connected to an [Azure DocumentDB](https://learn.microsoft.com/azure/documentdb/) database. Azure App Service provides a highly scalable, self-patching web hosting service using the Linux operating system. When you're finished, you have an Express.js app running on Azure App Service on Linux.
2929

3030
:::image type="content" source="./media/tutorial-nodejs-mongodb-app/azure-portal-browse-app-2.png" alt-text="Screenshot of Node.js application storing data in Cosmos DB.":::
3131

@@ -125,7 +125,7 @@ Having issues? Check the [Troubleshooting section](#troubleshooting).
125125

126126
## Create App Service and Azure Cosmos DB
127127

128-
In this step, you create the Azure resources. The steps used in this tutorial create a set of secure-by-default resources that include App Service and Azure Cosmos DB for MongoDB. For the creation process, you specify:
128+
In this step, you create the Azure resources. The steps used in this tutorial create a set of secure-by-default resources that include App Service and Azure DocumentDB. For the creation process, you specify:
129129

130130
- The **Name** for the web app. It's part of the DNS name for your app.
131131
- The **Region** to run the app physically in the world. It's also part of the DNS name for your app.
@@ -171,7 +171,7 @@ Sign in to the [Azure portal](https://portal.azure.com/) and follow these steps
171171
- **Virtual network** &rarr; Integrated with the App Service app and isolates back-end network traffic.
172172
- **Private endpoint** &rarr; Access endpoint for the database resource in the virtual network.
173173
- **Network interface** &rarr; Represents a private IP address for the private endpoint.
174-
- **Azure Cosmos DB for MongoDB** &rarr; Accessible only from behind the private endpoint. A database and a user are created for you on the server.
174+
- **Azure DocumentDB** &rarr; Accessible only from behind the private endpoint. A database and a user are created for you on the server.
175175
- **Private DNS zone** &rarr; Enables DNS resolution of the Azure Cosmos DB server in the virtual network.
176176

177177
:::column-end:::
110 KB
Loading

articles/application-gateway/migrate-v1-v2.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,8 @@ For the legacy cloning script, version 1.0.11 is the new version of the migratio
385385
### Public IP retention script
386386
387387
After you successfully migrate the configuration and thoroughly test your new V2 gateway, this step focuses on redirecting live traffic.
388-
389-
We provide an Azure PowerShell script that *retains the public IP address from V1*. Here are important considerations for the script:
388+
> [!NOTE]
389+
> The IP migration script does not support public IP address resources that have name beginning with a numeric character.
390390
391391
- The script reserves the Basic public IP from V1, converts it to Standard, and attaches it to the V2 gateway. This action effectively redirects all incoming traffic to the V2 gateway.
392392
- This IP swap operation typically results in a brief *downtime of approximately one to five minutes*. Plan accordingly.

articles/application-gateway/mutual-authentication-arm-template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,4 +388,4 @@ az deployment group create \
388388

389389
## Security notice
390390

391-
This solution is classified as **Microsoft Confidential**. Please ensure you follow your organization’s security and data handling best practices when deploying and managing this solution.
391+
Please ensure you follow your organization’s security and data handling best practices when deploying and managing this solution.

articles/application-gateway/tutorial-ingress-controller-add-on-new.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,27 @@ Deploying a new AKS cluster with the AGIC add-on enabled without specifying an e
5757
az aks create -n myCluster -g myResourceGroup --network-plugin azure --enable-managed-identity -a ingress-appgw --appgw-name myApplicationGateway --appgw-subnet-cidr "10.225.0.0/16" --generate-ssh-keys
5858
```
5959

60+
## Enable the add-on for the existing AKS cluster
61+
62+
You already have an existing AKS cluster and will enable the AGIC add-on. The add-on can be enabled either through the Azure portal or by using the Azure CLI.
63+
64+
# [Azure Portal](#tab/azure-portal)
65+
66+
In this page in the screenshot, you can create it simply by selecting the checkbox. If you want to specify a subnet prefix, select *Create new* and configure it manually.
67+
68+
:::image type="content" source="media/tutorial-ingress-controller-add-on-new/tutorial-ingress-controller-add-on-new.png" alt-text="Screenshot of enabling AGIC addon by Portal." lightbox="media/tutorial-ingress-controller-add-on-new/tutorial-ingress-controller-add-on-new.png":::
69+
70+
# [Azure CLI](#tab/azure-cli)
71+
72+
You can give the name of the application gateway as well as subnet CIDR by the command.
73+
appgw-subnet-cidr should be in the address prefixes in your virtual network. Please change *10.0.250.0/24* to your preferred application gateway subnet CIDR. This must always be within the address space range of your virtual network.
74+
75+
```azurecli
76+
$ az aks enable-addons --resource-group ${RG_NAME} --name ${CLUSTER_NAME} --addons ingress-appgw --appgw-subnet-cidr "10.0.250.0/24"
77+
```
78+
79+
In most cases, enabling the add-on automatically assigns the required permissions. However, depending on the environment, the permissions may not be granted automatically. In such cases, you should verify the permissions and assign them manually if necessary.
80+
6081
> [!NOTE]
6182
> Please ensure the identity used by AGIC has the proper permissions. A list of permissions needed by the identity can be found here: [Configure Infrastructure - Permissions](configuration-infrastructure.md#permissions). If a custom role is not defined with the required permissions, you may use the _Network Contributor_ role.
6283

articles/azure-functions/TOC.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@
279279
href: /security/benchmark/azure/baselines/functions-security-baseline?toc=/azure/azure-functions/toc.json&bc=/azure/azure-functions/breadcrumb/toc.json
280280
- name: Reliability
281281
items:
282-
- name: Availability zones and disaster recovery
282+
- name: Reliability in Azure Functions
283283
displayName: availability zones, high-availability, zone redundancy, disaster recovery
284284
href: /azure/reliability/reliability-functions?toc=/azure/azure-functions/toc.json&bc=/azure/azure-functions/breadcrumb/toc.json
285285
- name: Zone redundancy

articles/azure-functions/durable/durable-functions-diagnostics.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,32 @@ module.exports = df.orchestrator(function*(context){
240240
});
241241
```
242242

243+
<br>
244+
<details>
245+
<summary><b>Node.js programming model v4 apps (including TypeScript)</b></summary>
246+
247+
Use the same replay check pattern in your orchestration function:
248+
249+
```typescript
250+
import * as df from "durable-functions";
251+
252+
df.app.orchestration("FunctionChain", function* (context) {
253+
if (!context.df.isReplaying) context.log("Calling F1.");
254+
yield context.df.callActivity("F1");
255+
if (!context.df.isReplaying) context.log("Calling F2.");
256+
yield context.df.callActivity("F2");
257+
if (!context.df.isReplaying) context.log("Calling F3.");
258+
yield context.df.callActivity("F3");
259+
context.log("Done!");
260+
});
261+
```
262+
263+
> [!NOTE]
264+
> The `isReplaying` check suppresses duplicate logs caused by orchestrator replay. It doesn't suppress duplicate logs caused by full re-execution (for example, host restarts, long local debugging sessions, or queue message visibility timeouts). In those cases, you might still see repeated log lines with the same orchestration instance ID.
265+
266+
</details>
267+
<br>
268+
243269
# [Python](#tab/python)
244270

245271
```python
@@ -377,6 +403,25 @@ module.exports = df.orchestrator(function*(context){
377403
});
378404
```
379405

406+
<details>
407+
<summary><b>Node.js programming model v4 apps (including TypeScript)</b></summary>
408+
409+
```typescript
410+
import * as df from "durable-functions";
411+
412+
df.app.orchestration("FunctionChain", function* (context) {
413+
if (!context.df.isReplaying) context.log("Calling F1.");
414+
yield context.df.callActivity("F1");
415+
if (!context.df.isReplaying) context.log("Calling F2.");
416+
yield context.df.callActivity("F2");
417+
if (!context.df.isReplaying) context.log("Calling F3.");
418+
yield context.df.callActivity("F3");
419+
context.log("Done!");
420+
});
421+
```
422+
423+
</details>
424+
380425
# [Python](#tab/python)
381426

382427
```python
@@ -484,6 +529,25 @@ module.exports = df.orchestrator(function*(context) {
484529
});
485530
```
486531

532+
<details>
533+
<summary><b>Node.js programming model v4 apps (including TypeScript)</b></summary>
534+
535+
```typescript
536+
import * as df from "durable-functions";
537+
538+
df.app.orchestration("SetStatusTest", function* (context) {
539+
// ...do work...
540+
541+
// update the status of the orchestration with some arbitrary data
542+
const customStatus = { completionPercentage: 90.0, status: "Updating database records" };
543+
context.df.setCustomStatus(customStatus);
544+
545+
// ...do more work...
546+
});
547+
```
548+
549+
</details>
550+
487551
# [Python](#tab/python)
488552

489553
```python

articles/azure-functions/durable/durable-functions-dotnet-entities.md

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,65 @@ public class Counter : TaskEntity<int>
151151
152152
### Deleting entities in the isolated model
153153

154-
Deleting an entity in the isolated model is accomplished by setting the entity state to `null`, and this process depends on the entity implementation path used:
154+
Deleting an entity in the isolated model is accomplished by setting the entity state to `null`, and this process depends on the entity implementation path used.
155+
156+
#### Delete with ITaskEntity or function-based syntax
157+
158+
When deriving from `ITaskEntity` or using [function based syntax](#function-based-syntax), delete is accomplished by calling `TaskEntityOperation.State.SetState(null)`:
159+
160+
```csharp
161+
// Inside a function-based entity dispatch
162+
switch (operation.Name.ToLowerInvariant())
163+
{
164+
case "delete":
165+
operation.State.SetState(null);
166+
break;
167+
}
168+
```
169+
170+
#### Delete with TaskEntity\<TState\>
171+
172+
When deriving from `TaskEntity<TState>`, a delete operation is implicitly defined. However, it can be overridden by defining a method `Delete` on the entity. State can also be deleted from any operation via `this.State = null`.
173+
174+
- To delete by setting state to `null` requires `TState` to be nullable.
175+
- The implicitly defined delete operation deletes non-nullable `TState`.
176+
177+
The following example shows a `TaskEntity<int?>` with nullable state that overrides the default delete:
178+
179+
```csharp
180+
public class Counter : TaskEntity<int?>
181+
{
182+
public void Delete()
183+
{
184+
// Custom logic before deleting, such as logging
185+
this.State = null;
186+
}
187+
188+
[Function(nameof(Counter))]
189+
public static Task Run([EntityTrigger] TaskEntityDispatcher dispatcher)
190+
=> dispatcher.DispatchAsync<Counter>();
191+
}
192+
```
193+
194+
#### Delete with a POCO entity
195+
196+
When using a POCO as your state (not deriving from `TaskEntity<TState>`), a delete operation is implicitly defined. It's possible to override the delete operation by defining a method `Delete` on the POCO. However, there isn't a way to set state to `null` in the POCO route, so the implicitly defined delete operation is the only true delete.
197+
198+
```csharp
199+
public class Counter
200+
{
201+
public int Value { get; set; }
202+
203+
// The implicit delete operation handles state removal.
204+
// Defining a Delete method here overrides the implicit behavior,
205+
// but you cannot set state to null from within a POCO entity.
206+
207+
[Function(nameof(Counter))]
208+
public static Task Run([EntityTrigger] TaskEntityDispatcher dispatcher)
209+
=> dispatcher.DispatchAsync<Counter>();
210+
}
211+
```
155212

156-
- When deriving from `ITaskEntity` or using [function based syntax](#function-based-syntax), delete is accomplished by calling `TaskEntityOperation.State.SetState(null)`.
157-
- When deriving from `TaskEntity<TState>`, delete is implicitly defined. However, it can be overridden by defining a method `Delete` on the entity. State can also be deleted from any operation via `this.State = null`.
158-
- To delete by setting state to null requires `TState` to be nullable.
159-
- The implicitly defined delete operation deletes non-nullable `TState`.
160-
- When using a POCO as your state (not deriving from `TaskEntity<TState>`), delete is implicitly defined. It's possible to override the delete operation by defining a method `Delete` on the POCO. However, there isn't a way to set state to `null` in the POCO route, so the implicitly defined delete operation is the only true delete.
161213
::: zone-end
162214

163215
::: zone pivot="in-proc"

0 commit comments

Comments
 (0)