Updates from: 10/16/2024 01:08:21
Service Microsoft Docs article Related commit history on GitHub Change details
application-gateway Ingress Controller Add Health Probes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-add-health-probes.md
Title: Add health probes to your AKS pods
-description: This article provides information on how to add health probes (readiness and/or liveness) to AKS pods with an Application Gateway.
+description: This article provides information on how to add readiness or liveness health probes to AKS pods by using Application Gateway.
Last updated 9/17/2024
-# Add Health Probes to your service
-By default, Ingress controller provisions an HTTP GET probe for the exposed pods.
-The probe properties can be customized by adding a [Readiness or Liveness Probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/) to your `deployment`/`pod` spec.
+# Add health probes to your AKS pods
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+By default, the Application Gateway Ingress Controller (AGIC) provisions an HTTP `GET` probe for exposed Azure Kubernetes Service (AKS) pods. You can customize the probe properties by adding a [readiness or liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/) to your deployment or pod specification.
+
+## Code for adding a readiness or liveness probe
-## With `readinessProbe` or `livenessProbe`
```yaml apiVersion: networking.k8s.io/v1 kind: Deployment
spec:
timeoutSeconds: 1 ```
-Kubernetes API Reference:
-* [Container Probes](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#httpgetaction-v1-core)
+For more information, see the [Kubernetes API reference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#httpgetaction-v1-core).
> [!NOTE]
-> * `readinessProbe` and `livenessProbe` are supported when configured with `httpGet`.
-> * Probing on a port other than the one exposed on the pod is currently not supported.
-> * `HttpHeaders`, `InitialDelaySeconds`, `SuccessThreshold` aren't supported.
+> - `readinessProbe` and `livenessProbe` are supported when you configure them with `httpGet`.
+> - Probing on a port other than the one exposed on the pod is currently not supported.
+> - `HttpHeaders`, `InitialDelaySeconds`, and `SuccessThreshold` aren't supported.
+
+If the code doesn't include a readiness or liveness probe, the ingress controller makes an assumption that the service is reachable on either:
+
+- The `Path` value that's specified for `backend-path-prefix` annotation
+- The `path` value that's specified in the `ingress` definition for the service
-## Without `readinessProbe` or `livenessProbe`
-If the above probes aren't provided, then the Ingress Controller makes an assumption that the service is reachable on the `Path` specified for `backend-path-prefix` annotation, or the `path` specified in the `ingress` definition for the service.
+## Default values for the health probe
-## Default Values for Health Probe
-For any property that can't be inferred by the readiness/liveness probe, default values are set.
+Any property that the readiness or liveness probe can't infer uses the following default values.
-| Application Gateway Probe Property | Default Value |
+| Application Gateway probe property | Default value |
|-|-|
-| `Path` | / |
-| `Host` | localhost |
-| `Protocol` | HTTP |
-| `Timeout` | 30 |
-| `Interval` | 30 |
-| `UnhealthyThreshold` | 3 |
+| `Path` | `/` |
+| `Host` | `localhost` |
+| `Protocol` | `HTTP` |
+| `Timeout` | `30` |
+| `Interval` | `30` |
+| `UnhealthyThreshold` | `3` |
+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Autoscale Pods https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-autoscale-pods.md
Title: Autoscale AKS pods with Azure Application Gateway metrics
-description: This article provides instructions on how to scale your AKS backend pods using Application Gateway metrics and Azure Kubernetes Metric Adapter
+description: This article provides instructions on how to scale your AKS back-end pods by using Application Gateway metrics and the Azure Kubernetes Metrics Adapter.
Last updated 9/17/2024
-# Autoscale your AKS pods using Application Gateway Metrics (Beta)
+# Autoscale your AKS pods by using Application Gateway metrics
As incoming traffic increases, it becomes crucial to scale up your applications based on the demand.
-In the following tutorial, we explain how you can use Application Gateway's `AvgRequestCountPerHealthyHost` metric to scale up your application. `AvgRequestCountPerHealthyHost` measures average requests sent to a specific backend pool and backend HTTP setting combination.
+This article explains how you can use the `AvgRequestCountPerHealthyHost` metric in Azure Application Gateway to scale up Azure Kubernetes Service (AKS) pods for an application. The `AvgRequestCountPerHealthyHost` metric measures average requests sent to a specific combination of a back-end pool and a back-end HTTP setting.
-Use following two components:
+Use the following two components:
-* [`Azure Kubernetes Metric Adapter`](https://github.com/Azure/azure-k8s-metrics-adapter) - We use the metric adapter to expose Application Gateway metrics through the metric server. The Azure Kubernetes Metric Adapter is an open source project under Azure, similar to the Application Gateway Ingress Controller.
-* [`Horizontal Pod Autoscaler`](/azure/aks/concepts-scale#horizontal-pod-autoscaler) - We use HPA to use Application Gateway metrics and target a deployment for scaling.
+- [Azure Kubernetes Metrics Adapter](https://github.com/Azure/azure-k8s-metrics-adapter): You use this component to expose Application Gateway metrics through the metric server. It's an open-source project under Azure, similar to the Application Gateway Ingress Controller.
+- [Horizontal Pod Autoscaler](/azure/aks/concepts-scale#horizontal-pod-autoscaler): You use this component to apply Application Gateway metrics and target a deployment for scaling.
> [!NOTE]
-> The Azure Kubernetes Metrics Adapter is no longer maintained. Kubernetes Event-driven Autoscaling (KEDA) is an alternative.<br>
-> Also see [Application Gateway for Containers](for-containers/overview.md).
+> The Azure Kubernetes Metrics Adapter is no longer maintained. Kubernetes Event-driven Autoscaling (KEDA) is an alternative.
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+## Set up the Azure Kubernetes Metrics Adapter
-## Setting up Azure Kubernetes Metric Adapter
-
-1. First, create a Microsoft Entra service principal and assign it `Monitoring Reader` access over Application Gateway's resource group.
+1. Create a Microsoft Entra service principal and assign it `Monitoring Reader` access over the Application Gateway instance's resource group:
```azurecli applicationGatewayGroupName="<application-gateway-group-id>"
Use following two components:
az ad sp create-for-rbac -n "azure-k8s-metric-adapter-sp" --role "Monitoring Reader" --scopes applicationGatewayGroupId ```
-1. Now, deploy the [`Azure Kubernetes Metric Adapter`](https://github.com/Azure/azure-k8s-metrics-adapter) using the Microsoft Entra service principal created previously.
+1. Deploy the Azure Kubernetes Metrics Adapter by using the Microsoft Entra service principal that you created previously:
```bash kubectl create namespace custom-metrics
Use following two components:
kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/Azure/azure-k8s-metrics-adapter/master/deploy/adapter.yaml -n custom-metrics ```
-1. Create an `ExternalMetric` resource with name `appgw-request-count-metric`. This resource instructs the metric adapter to expose `AvgRequestCountPerHealthyHost` metric for `myApplicationGateway` resource in `myResourceGroup` resource group. You can use the `filter` field to target a specific backend pool and backend HTTP setting in the Application Gateway.
+1. Create an `ExternalMetric` resource with the name `appgw-request-count-metric`. This resource instructs the metric adapter to expose the `AvgRequestCountPerHealthyHost` metric for the `myApplicationGateway` resource in the `myResourceGroup` resource group. You can use the `filter` field to target a specific back-end pool and back-end HTTP setting in the Application Gateway instance.
```yaml apiVersion: azure.com/v1alpha2
Use following two components:
spec: type: azuremonitor azure:
- resourceGroup: myResourceGroup # replace with your application gateway's resource group name
- resourceName: myApplicationGateway # replace with your application gateway's name
+ resourceGroup: myResourceGroup # replace with your Application Gateway instance's resource group name
+ resourceName: myApplicationGateway # replace with your Application Gateway instance's name
resourceProviderNamespace: Microsoft.Network resourceType: applicationGateways metric:
Use following two components:
filter: BackendSettingsPool eq '<backend-pool-name>~<backend-http-setting-name>' # optional ```
-You can now make a request to the metric server to see if our new metric is getting exposed:
+You can now make a request to the metric server to see if the new metric is being exposed:
+ ```bash kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/appgw-request-count-metric" # Sample Output
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/appg
# } ```
-## Using the new metric to scale up the deployment
+## Use the new metric to scale up the deployment
+
+After you expose `appgw-request-count-metric` through the metric server, you're ready to use the [Horizontal Pod Autoscaler](/azure/aks/concepts-scale#horizontal-pod-autoscaler) to scale up your target deployment.
-Once we're able to expose `appgw-request-count-metric` through the metric server, we're ready to use [`Horizontal Pod Autoscaler`](/azure/aks/concepts-scale#horizontal-pod-autoscaler) to scale up our target deployment.
+The following example targets a sample deployment named `aspnet`. You scale up pods when `appgw-request-count-metric` is `200` per pod, up to a maximum of `10` pods.
-In following example, we target a sample deployment `aspnet`. We scale up Pods when `appgw-request-count-metric` > 200 per Pod up to a max of `10` Pods.
+Replace your target deployment name and apply the following autoscale configuration:
-Replace your target deployment name and apply the following auto scale configuration:
```yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler
spec:
targetAverageValue: 200 ```
-Test your setup by using a load test tool like apache bench:
+Test your setup by using a load test tool like ApacheBench:
+ ```bash ab -n10000 http://<applicaiton-gateway-ip-address>/ ``` ## Next steps-- [**Troubleshoot Ingress Controller issues**](ingress-controller-troubleshoot.md): Troubleshoot any issues with the Ingress Controller.+
+- [Troubleshoot Application Gateway Ingress Controller issues](ingress-controller-troubleshoot.md)
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Cookie Affinity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-cookie-affinity.md
Title: Enable cookie based affinity with Application Gateway
-description: This article provides information on how to enable cookie-based affinity with an Application Gateway.
+ Title: Enable cookie-based affinity with Application Gateway
+description: This article provides information on how to enable cookie-based affinity with Application Gateway.
Last updated 9/17/2024
-# Enable Cookie based affinity with an Application Gateway
-As outlined in the [Azure Application Gateway Documentation](./application-gateway-components.md#http-settings), Application Gateway supports cookie based affinity, which means it can direct subsequent traffic from a user session to the same server for processing.
+# Enable cookie-based affinity with Application Gateway
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+As outlined in the [Azure Application Gateway documentation](./application-gateway-components.md#http-settings), Application Gateway supports cookie-based affinity. This support means that the service can direct subsequent traffic from a user session to the same server for processing.
## Example+ ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress
spec:
- backend: serviceName: frontend servicePort: 80
-```
+```
+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Disable Addon https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-disable-addon.md
Title: Disable and re-enable Application Gateway Ingress Controller add-on for Azure Kubernetes Service cluster
-description: This article provides information on how to disable and re-enable the AGIC add-on for your AKS cluster
+description: This article provides information on how to disable and re-enable the AGIC add-on for your AKS cluster.
Last updated 9/17/2024
-# Disable and re-enable AGIC add-on for your AKS cluster
-Application Gateway Ingress Controller (AGIC) deployed as an AKS add-on allows you to enable and disable the add-on with one line in Azure CLI. The life cycle of the Application Gateway differs when you disable the AGIC add-on, depending on if the Application Gateway was created by the AGIC add-on, or if it was deployed separately from the AGIC add-on. You can run the same command to re-enable the AGIC add-on if you ever disable it, or to enable the AGIC add-on using an existing AKS cluster and Application Gateway.
+# Disable and re-enable the AGIC add-on for your AKS cluster
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+When you deploy the Application Gateway Ingress Controller (AGIC) as an Azure Kubernetes Service (AKS) add-on, you can enable and disable the add-on with one line in the Azure CLI.
+
+The life cycle of the Azure Application Gateway instance differs when you disable the AGIC add-on, depending on whether you created the Application Gateway instance by using the AGIC add-on or you deployed it separately from the add-on. You can run the same command to re-enable the AGIC add-on if you ever disable it, or to enable the AGIC add-on by using an existing AKS cluster and Application Gateway instance.
+
+## Disable the AGIC add-on with an associated Application Gateway instance
-## Disabling AGIC add-on with associated Application Gateway
-If the AGIC add-on automatically deployed the Application Gateway for you when you first set up everything, then disabling the AGIC add-on will by default delete the Application Gateway based on a couple criteria. There are two criteria that the AGIC add-on looks for to determine if it should delete the associated Application Gateway when you disable it:
-- Is the Application Gateway that the AGIC add-on is associated with deployed in the MC_* node resource group? -- Does the Application Gateway that the AGIC add-on is associated with have the tag "created-by: ingress-appgw"? The tag is used by AGIC to determine if the Application Gateway was deployed by the add-on or not.
+If the AGIC add-on automatically deployed the Application Gateway instance for you when you first set up everything, then disabling the AGIC add-on might delete the Application Gateway instance by default. The AGIC add-on considers two criteria to determine if it should delete the associated Application Gateway instance:
-If both criteria are met, then the AGIC add-on will delete the Application Gateway it created when the add-on is disabled; however, it won't delete the public IP or the subnet in which the Application Gateway was deployed with/in. If the first criteria isn't met, then it won't matter if the Application Gateway has the "created-by: ingress-appgw" tag - disabling the add-on won't delete the Application Gateway. Likewise, if the second criteria isn't met, that is. The Application Gateway lacks that tag, then disabling the add-on won't delete the Application Gateway in the MC_* node resource group.
+- Is the Application Gateway instance deployed in the `MC_*` node resource group?
+- Does the Application Gateway instance have the tag `created-by: ingress-appgw`? AGIC uses the tag to determine whether or not the add-on deployed the Application Gateway instance.
-> [!TIP]
-> If you don't want the Application Gateway to be deleted when disabling the add-on, but it meets both criteria then remove the "created-by: ingress-appgw" tag to prevent the add-on from deleting your Application Gateway.
+If both criteria are met, the AGIC add-on deletes the Application Gateway instance when you disable the add-on. However, the AGIC add-on doesn't delete the public IP address or the subnet in which it deployed the Application Gateway instance.
+
+If the first criterion isn't met, disabling the add-on doesn't delete the Application Gateway instance, even if the instance has the `created-by: ingress-appgw` tag. Likewise, if the second criterion isn't met (that is, the Application Gateway instance lacks that tag), disabling the add-on doesn't delete the Application Gateway instance in the `MC_*` node resource group.
+
+> [!TIP]
+> If you don't want the add-on to delete your Application Gateway instance when you disable the add-on, but the instance meets both criteria, remove the `created-by: ingress-appgw` tag.
+
+To disable the AGIC add-on, run the following command:
-To disable the AGIC add-on, run the following command:
```azurecli-interactive az aks disable-addons -n <AKS-cluster-name> -g <AKS-resource-group-name> -a ingress-appgw ```
-## Enable AGIC add-on on existing Application Gateway and AKS Cluster
-If you ever disable the AGIC add-on and need to re-enable the add-on, or want to enable the add-on using an existing Application Gateway and AKS cluster, then run the following command:
+## Enable the AGIC add-on on an existing Application Gateway instance and AKS cluster
+
+If you ever disable the AGIC add-on and need to re-enable it, or you want to enable the add-on by using an existing Application Gateway instance and AKS cluster, run the following command:
```azurecli-interactive appgwId=$(az network application-gateway show -n <application-gateway-name> -g <resource-group-name> -o tsv --query "id") az aks enable-addons -n <AKS-cluster-name> -g <AKS-cluster-resource-group> -a ingress-appgw --appgw-id $appgwId ```
-## Next steps
-For more information on how to enable the AGIC add-on using an existing Application Gateway and AKS cluster, see [AGIC add-on brownfield deployment](tutorial-ingress-controller-add-on-existing.md).
+## Related content
+
+- For more information on how to enable the AGIC add-on by using an existing Application Gateway instance and AKS cluster, see [this tutorial](tutorial-ingress-controller-add-on-existing.md).
+- For information about Application Gateway for Containers, see [What is Application Gateway for Containers?](for-containers/overview.md).
application-gateway Ingress Controller Expose Service Over Http Https https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-expose-service-over-http-https.md
Title: Expose an AKS service over HTTP or HTTPS using Application Gateway
-description: This article provides information on how to expose an AKS service over HTTP or HTTPS using Application Gateway.
+description: This article provides information on how to expose an AKS service over HTTP or HTTPS by using Application Gateway.
Last updated 07/23/2023
-# Expose an AKS service over HTTP or HTTPS using Application Gateway
+# Expose an AKS service over HTTP or HTTPS by using Application Gateway
-These tutorials help illustrate the usage of [Kubernetes Ingress Resources](https://kubernetes.io/docs/concepts/services-networking/ingress/) to expose an example Kubernetes service through the [Azure Application Gateway](https://azure.microsoft.com/services/application-gateway/) over HTTP or HTTPS.
-
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+This article illustrates the usage of [Kubernetes ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/) to expose an example Azure Kubernetes Service (AKS) service through [Azure Application Gateway](https://azure.microsoft.com/services/application-gateway/) over HTTP or HTTPS.
## Prerequisites -- Installed `ingress-azure` helm chart.
- - [**Greenfield Deployment**](ingress-controller-install-new.md): If you're starting from scratch, refer to these installation instructions, which outlines steps to deploy an AKS cluster with Application Gateway and install application gateway ingress controller on the AKS cluster.
- - [**Brownfield Deployment**](ingress-controller-install-existing.md): If you have an existing AKS cluster and Application Gateway, refer to these instructions to install application gateway ingress controller on the AKS cluster.
-- If you want to use HTTPS on this application, you need an x509 certificate and its private key.
+- An installed `ingress-azure` Helm chart:
+ - [Greenfield deployment](ingress-controller-install-new.md): If you're starting from scratch, refer to these installation instructions, which outline steps to deploy an AKS cluster with Application Gateway and install the Application Gateway Ingress Controller (AGIC) on the AKS cluster.
+ - [Brownfield deployment](ingress-controller-install-existing.md): If you have an existing AKS cluster and Application Gateway instance, refer to these instructions to install AGIC on the AKS cluster.
+- An x509 certificate and its private key, if you want to use HTTPS on this application.
-## Deploy `guestbook` application
+## Deploy the guestbook application
-The guestbook application is a canonical Kubernetes application that composes of a Web UI frontend, a backend and a Redis database. By default, `guestbook` exposes its application through a service with name `frontend` on port `80`. Without a Kubernetes Ingress Resource, the service isn't accessible from outside the AKS cluster. We use the application and set up Ingress Resources to access the application through HTTP and HTTPS.
+The `guestbook` application is a canonical Kubernetes application that consists of a web UI front end, a back end, and a Redis database.
-Use the following instructions to deploy the guestbook application.
+By default, `guestbook` exposes its application through a service with the name `frontend` on port `80`. Without a Kubernetes ingress resource, the service isn't accessible from outside the AKS cluster. You use the application, and set up ingress resources to access the application, through HTTP and HTTPS.
-1. Download `guestbook-all-in-one.yaml` from [here](https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/all-in-one/guestbook-all-in-one.yaml)
-1. Deploy `guestbook-all-in-one.yaml` into your AKS cluster by running
+To deploy the `guestbook` application:
- ```bash
- kubectl apply -f guestbook-all-in-one.yaml
- ```
+1. Download `guestbook-all-in-one.yaml` from [this GitHub page](https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/all-in-one/guestbook-all-in-one.yaml).
+1. Deploy `guestbook-all-in-one.yaml` into your AKS cluster by running this command:
-Now, the `guestbook` application has been deployed.
+ ```bash
+ kubectl apply -f guestbook-all-in-one.yaml
+ ```
## Expose services over HTTP
-To expose the guestbook application, use the following ingress resource:
+To expose the `guestbook` application, use the following ingress resource:
```yaml apiVersion: networking.k8s.io/v1
spec:
servicePort: 80 ```
-This ingress exposes the `frontend` service of the `guestbook-all-in-one` deployment
-as a default backend of the Application Gateway.
+This ingress exposes the `frontend` service of the `guestbook-all-in-one` deployment as a default back end of the Application Gateway instance.
-Save the above ingress resource as `ing-guestbook.yaml`.
+Save the preceding ingress resource as `ing-guestbook.yaml`:
-1. Deploy `ing-guestbook.yaml` by running:
+1. Deploy `ing-guestbook.yaml` by running this command:
```bash kubectl apply -f ing-guestbook.yaml ```
-1. Check the log of the ingress controller for deployment status.
+1. Check the log of the ingress controller for the deployment status.
-Now the `guestbook` application should be available. You can check availability by visiting the public address of the Application Gateway.
+Now the `guestbook` application should be available. You can check the availability by visiting the public address of the Application Gateway instance.
## Expose services over HTTPS
-### Without specified hostname
+### Without a specified host name
-Without specifying hostname, the guestbook service is available on all the host-names pointing to the application gateway.
+If you don't specify a host name, the `guestbook` service is available on all the host names that point to the Application Gateway instance.
-1. Before deploying ingress, you need to create a kubernetes secret to host the certificate and private key. You can create a kubernetes secret by running
+1. Before you deploy the ingress resource, create a Kubernetes secret to host the certificate and private key:
```bash kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert> ```
-1. Define the following ingress. In the ingress, specify the name of the secret in the `secretName` section.
+1. Define the following ingress resource. In the `secretName` section, replace `<guestbook-secret-name>` with the name of your secret.
```yaml apiVersion: networking.k8s.io/v1
Without specifying hostname, the guestbook service is available on all the host-
servicePort: 80 ```
- > [!NOTE]
- > Replace `<guestbook-secret-name>` in the above Ingress Resource with the name of your secret. Store the above Ingress Resource in a file name `ing-guestbook-tls.yaml`.
+1. Store the ingress resource in a file named `ing-guestbook-tls.yaml`.
-1. Deploy ing-guestbook-tls.yaml by running
+1. Deploy `ing-guestbook-tls.yaml` by running this command:
```bash kubectl apply -f ing-guestbook-tls.yaml ```
-1. Check the log of the ingress controller for deployment status.
+1. Check the log of the ingress controller for the deployment status.
Now the `guestbook` application is available on both HTTP and HTTPS.
-### With specified hostname
+### With a specified host name
-You can also specify the hostname on the ingress in order to multiplex TLS configurations and services.
-By specifying hostname, the guestbook service is only available on the specified host.
+You can also specify the host name on the ingress resource to multiplex TLS configurations and services. When you specify a host name, the `guestbook` service is available only on the specified host.
-1. Define the following ingress.
- In the ingress, specify the name of the secret in the `secretName` section and replace the hostname in the `hosts` section accordingly.
+1. Define the following ingress resource. In the `secretName` section, replace `<guestbook-secret-name>` with the name of your secret. In the `hosts` and `host` sections, replace `<guestbook.contoso.com>` with your host name.
```yaml apiVersion: networking.k8s.io/v1
By specifying hostname, the guestbook service is only available on the specified
servicePort: 80 ```
-1. Deploy `ing-guestbook-tls-sni.yaml` by running
+1. Deploy `ing-guestbook-tls-sni.yaml` by running this command:
```bash kubectl apply -f ing-guestbook-tls-sni.yaml ```
-1. Check the log of the ingress controller for deployment status.
+1. Check the log of the ingress controller for the deployment status.
-Now the `guestbook` application is available on both HTTP and HTTPS only on the specified host (`<guestbook.contoso.com>` in this example).
+Now the `guestbook` application is available on both HTTP and HTTPS, only on the specified host.
## Integrate with other services
-The following ingress allows you to add other paths into this ingress and redirect those paths to other
+Use the following ingress resource to add paths and redirect those paths to other
```yaml apiVersion: networking.k8s.io/v1
spec:
serviceName: frontend servicePort: 80 ```+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Expose Websocket Server https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-expose-websocket-server.md
Title: Expose a WebSocket server to Application Gateway
-description: This article provides information on how to expose a WebSocket server to Application Gateway with ingress controller for AKS clusters.
+description: This article provides information on how to expose a WebSocket server to Application Gateway with an ingress controller for AKS clusters.
# Expose a WebSocket server to Application Gateway
-As outlined in the Application Gateway v2 documentation - it [provides native support for the WebSocket and HTTP/2 protocols](features.md#websocket-and-http2-traffic). Both Application Gateway and the Kubernetes Ingress don't have a user-configurable setting to selectively enable or disable WebSocket support.
+Azure Application Gateway v2 [provides native support for the WebSocket and HTTP/2 protocols](features.md#websocket-and-http2-traffic). Both Application Gateway and the Kubernetes ingress don't have a user-configurable setting to selectively enable or disable WebSocket support.
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+## YAML for WebSocket server deployment
+
+The following Kubernetes deployment YAML shows the minimum configuration for deploying a WebSocket server, which is the same as deploying a regular web server:
-The following Kubernetes deployment YAML shows the minimum configuration used to deploy a WebSocket server, which is the same as deploying a regular web server:
```yaml apiVersion: apps/v1 kind: Deployment
spec:
servicePort: 80 ```
-Given that all the prerequisites are fulfilled, and you have an Application Gateway controlled by a Kubernetes Ingress in your AKS, the deployment shown previously would result in a WebSockets server exposed on port 80 of your Application Gateway's public IP and the `ws.contoso.com` domain.
+Assuming that all the prerequisites are fulfilled, and you have an Application Gateway instance controlled by a Kubernetes ingress in Azure Kubernetes Service (AKS), the preceding deployment would result in a WebSocket server exposed on port 80 of your Application Gateway instance's public IP address and the `ws.contoso.com` domain.
The following cURL command would test the WebSocket server deployment:+ ```shell curl -i -N -H "Connection: Upgrade" \ -H "Upgrade: websocket" \
curl -i -N -H "Connection: Upgrade" \
http://1.2.3.4:80/ws ```
-## WebSocket Health Probes
+## WebSocket health probes
+
+If your deployment doesn't explicitly define health probes, Application Gateway attempts an HTTP `GET` operation on your WebSocket server endpoint.
+Depending on the server implementation (such as [this example](https://github.com/gorilla/websocket/blob/master/examples/chat/main.go)), you might need WebSocket-specific headers (`Sec-Websocket-Version`, for instance).
+
+Because Application Gateway doesn't add WebSocket headers, the Application Gateway health probe response from your WebSocket server is most likely `400 Bad Request`. Application Gateway then marks your pods as unhealthy. This status eventually results in a `502 Bad Gateway` error for the consumers of the WebSocket server.
+
+To avoid the `502 Bad Gateway` error, you might need to add an HTTP `GET` handler for a health check to your server. For example, `/health` returns `200 OK`.
+
+## Related content
-If your deployment doesn't explicitly define health probes, Application Gateway would attempt an HTTP GET on your WebSocket server endpoint.
-Depending on the server implementation ([here's one we love](https://github.com/gorilla/websocket/blob/master/examples/chat/main.go)) WebSocket specific headers may be required (`Sec-Websocket-Version` for instance).
-Since Application Gateway doesn't add WebSocket headers, the Application Gateway's health probe response from your WebSocket server is most likely `400 Bad Request`.
-As a result, Application Gateway marks your pods as unhealthy. This status eventually results in a `502 Bad Gateway` for the consumers of the WebSocket server.
-To avoid the bad gateway error, you might need to add an HTTP GET handler for a health check to your server (`/health` for instance, which returns `200 OK`).
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Install Existing https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-install-existing.md
Title: Create an ingress controller with an existing Application Gateway
-description: This article provides information on how to deploy an Application Gateway Ingress Controller with an existing Application Gateway.
+ Title: Create an ingress controller by using an existing Application Gateway instance
+description: This article provides information on how to deploy the Application Gateway Ingress Controller by using an existing Application Gateway instance.
Last updated 9/17/2024
-# Install an Application Gateway Ingress Controller (AGIC) using an existing Application Gateway
+# Install AGIC by using an existing Application Gateway instance
-The Application Gateway Ingress Controller (AGIC) is a pod within your Azure Kubernetes Service (AKS) cluster.
-AGIC monitors the Kubernetes [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/)
-resources, and creates and applies Application Gateway config based on the status of the Kubernetes cluster.
-
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
-
-## Outline
--- [Prerequisites](#prerequisites)-- [Azure Resource Manager authentication](#azure-resource-manager-authentication)
- - Option 1: [Set up Microsoft Entra Workload ID](#set-up-azure-ad-workload-identity) and create Azure Identity on ARMs
- - Option 2: [Set up a Service Principal](#using-a-service-principal)
-- [Install Ingress Controller using Helm](#install-ingress-controller-as-a-helm-chart)-- [Shared Application Gateway](#shared-application-gateway): Install AGIC in an environment, where Application Gateway is
-shared between one AKS cluster and/or other Azure components.
+The Application Gateway Ingress Controller (AGIC) is a pod within your Azure Kubernetes Service (AKS) cluster. AGIC monitors the Kubernetes [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) resources. It creates and applies an Azure Application Gateway configuration based on the status of the Kubernetes cluster.
## Prerequisites
-This document assumes you already have the following tools and infrastructure installed:
--- [An AKS cluster](/azure/aks/intro-kubernetes) with [Azure Container Networking Interface (CNI)](/azure/aks/configure-azure-cni)-- [Application Gateway v2](./tutorial-autoscale-ps.md) in the same virtual network as the AKS cluster-- [Microsoft Entra Workload ID](/azure/aks/workload-identity-overview) configured for your AKS cluster-- [Cloud Shell](https://shell.azure.com/) is the Azure shell environment, which has `az` CLI, `kubectl`, and `helm` installed. These tools are required for commands used to support configuring this deployment.
+This article assumes that you already installed the following tools and infrastructure:
-**Backup your Application Gateway's configuration** before installing AGIC:
+- [An AKS cluster](/azure/aks/intro-kubernetes) with [Azure Container Networking Interface (CNI)](/azure/aks/configure-azure-cni).
+- [Application Gateway v2](./tutorial-autoscale-ps.md) in the same virtual network as the AKS cluster.
+- [Microsoft Entra Workload ID](/azure/aks/workload-identity-overview) configured for your AKS cluster.
+- [Azure Cloud Shell](https://shell.azure.com/) as the Azure shell environment, which has `az` (Azure CLI), `kubectl`, and `helm` installed. These tools are required for commands that support configuring this deployment.
- 1. From the [Azure portal](https://portal.azure.com/), navigate to your Application Gateway instance.
- 2. Under the **Automation** section, select **Export template** and then select **Download**.
+## Add the Helm repository
-The zip file you downloaded contains JSON templates, bash, and PowerShell scripts you could use to restore App
-Gateway should that become necessary
+[Helm](/azure/aks/kubernetes-helm) is a package manager for Kubernetes. You use it to install the `application-gateway-kubernetes-ingress` package.
-## Install Helm
+If you use Cloud Shell, you don't need to install Helm. Cloud Shell comes with Helm version 3. Run the following commands to add the AGIC Helm repository for an AKS cluster that's enabled with Kubernetes role-based access control (RBAC):
-[Helm](/azure/aks/kubernetes-helm) is a package manager for Kubernetes, used to install the `application-gateway-kubernetes-ingress` package.
+```bash
+kubectl create serviceaccount --namespace kube-system tiller-sa
+kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa
+helm init --tiller-namespace kube-system --service-account tiller-sa
+```
-> [!NOTE]
-> If you use [Cloud Shell](https://shell.azure.com/), you don't need to install Helm. Azure Cloud Shell comes with Helm version 3.
+## Back up the Application Gateway instance
-Install [Helm](/azure/aks/kubernetes-helm) and run the following:
+Before you install AGIC, back up your Application Gateway instance's configuration:
- - *Kubernetes RBAC enabled* AKS cluster
+1. In the [Azure portal](https://portal.azure.com/), go to your Application Gateway instance.
+2. In the **Automation** section, select **Export template** and then select **Download**.
- ```bash
- kubectl create serviceaccount --namespace kube-system tiller-sa
- kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa
- helm init --tiller-namespace kube-system --service-account tiller-sa
- ```
+The downloaded .zip file contains JSON templates, Bash scripts, and PowerShell scripts that you can use to restore Application Gateway, if a restoration becomes necessary.
-## Azure Resource Manager Authentication
+## Set up an identity for Resource Manager authentication
-AGIC communicates with the Kubernetes API server and the Azure Resource Manager. It requires an identity to access
-these APIs.
+AGIC communicates with the Kubernetes API server and [Azure Resource Manager](../azure-resource-manager/management/overview.md). It requires an identity to access these APIs. You can use either Microsoft Entra Workload ID or a service principal.
<a name='set-up-azure-ad-workload-identity'></a>
-## Set up Microsoft Entra Workload ID
+### Set up Microsoft Entra Workload ID
-[Microsoft Entra Workload ID](/azure/aks/workload-identity-overview) is an identity you assign to a software workload, to authenticate and access other services and resources. This identity enables your AKS pod to use this identity and authenticate with other Azure resources. For this configuration, we need authorization
-for the AGIC pod to make HTTP requests to [ARM](../azure-resource-manager/management/overview.md).
+[Microsoft Entra Workload ID](/azure/aks/workload-identity-overview) is an identity that you assign to a software workload. This identity enables your AKS pod to authenticate with other Azure resources.
-1. Use the Azure CLI [az account set](/cli/azure/account#az-account-set) command to set a specific subscription to be the current active subscription. Then use the [az identity create](/cli/azure/identity#az-identity-create) command to create a managed identity. The identity needs to be created in the [node resource group](/azure/aks/concepts-clusters-workloads#node-resource-group). The node resource group is assigned a name by default, such as *MC_myResourceGroup_myAKSCluster_eastus*.
+For this configuration, you need authorization for the AGIC pod to make HTTP requests to Azure Resource Manager.
+
+1. Use the Azure CLI [az account set](/cli/azure/account#az-account-set) command to set a specific subscription to be the current active subscription:
```azurecli-interactive az account set --subscription "subscriptionID" ```
+ Then use the [az identity create](/cli/azure/identity#az-identity-create) command to create a managed identity. You must create the identity in the [node resource group](/azure/aks/concepts-clusters-workloads#node-resource-group). The node resource group is assigned a name by default, such as `MC_myResourceGroup_myAKSCluster_eastus`.
+ ```azurecli-interactive az identity create --name "userAssignedIdentityName" --resource-group "resourceGroupName" --location "location" --subscription "subscriptionID" ```
-1. For the role assignment, run the following command to identify the `principalId` for the newly created identity:
+1. For the role assignment, run the following command to identify the `principalId` value for the newly created identity:
```powershell-interactive $resourceGroup="resource-group-name"
for the AGIC pod to make HTTP requests to [ARM](../azure-resource-manager/manage
az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv ```
-1. Grant the identity **Contributor** access to your Application Gateway. You need the ID of the Application Gateway, which
-looks like: `/subscriptions/A/resourceGroups/B/providers/Microsoft.Network/applicationGateways/C`. First, get the list of Application Gateway IDs in your subscription by running the following command:
+1. Grant the identity **Contributor** access to your Application Gateway instance. You need the ID of the Application Gateway instance, which looks like `/subscriptions/A/resourceGroups/B/providers/Microsoft.Network/applicationGateways/C`.
+
+ First, get the list of Application Gateway IDs in your subscription by running the following command:
```azurecli az network application-gateway list --query '[].id'
looks like: `/subscriptions/A/resourceGroups/B/providers/Microsoft.Network/appli
To assign the identity **Contributor** access, run the following command:
- ```powershell-interactive
+ ```powershell-interactive
$resourceGroup="resource-group-name" $identityName="identity-Name" # Get the Application Gateway ID $AppGatewayID=$(az network application-gateway list --query '[].id' -o tsv) $role="contributor"
- # Get the principal ID for the User assigned identity
+ # Get the principal ID for the user-assigned identity
$principalId=$(az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv) az role assignment create --assignee $principalId --role $role --scope $AppGatewayID ```
-1. Grant the identity **Reader** access to the Application Gateway resource group. The resource group ID looks like:
-`/subscriptions/A/resourceGroups/B`. You can get all resource groups with: `az group list --query '[].id'`
+1. Grant the identity **Reader** access to the Application Gateway resource group. The resource group ID looks like
+`/subscriptions/A/resourceGroups/B`. You can get all resource groups by running `az group list --query '[].id'`.
```powershell-interactive $resourceGroup="resource-group-name"
looks like: `/subscriptions/A/resourceGroups/B/providers/Microsoft.Network/appli
# Get the Application Gateway resource group ID $AppGatewayResourceGroupID=$(az group show --name $AppGatewayResourceGroup --query id -o tsv) $role="Reader"
- # Get the principal ID for the User assigned identity
+ # Get the principal ID for the user-assigned identity
$principalId=$(az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv)
- # Assign the Reader role to the User assigned identity at the resource group scope
+ # Assign the Reader role to the user-assigned identity at the resource group scope
az role assignment create --role $role --assignee $principalId --scope $AppGatewayResourceGroupID ```
->[!NOTE]
-> Please ensure the identity used by AGIC has the **Microsoft.Network/virtualNetworks/subnets/join/action** permission delegated to the subnet where Application Gateway is deployed. If a custom role is not defined with this permission, you can use the built-in **Network Contributor** role, which contains the **Microsoft.Network/virtualNetworks/subnets/join/action** permission.
+> [!NOTE]
+> Make sure the identity that AGIC uses has the **Microsoft.Network/virtualNetworks/subnets/join/action** permission delegated to the subnet where Application Gateway is deployed. If you didn't define a custom role that has this permission, you can use the built-in **Network Contributor** role.
-## Using a Service Principal
+### Set up a service principal
-It's also possible to provide AGIC access to ARM using a Kubernetes secret.
+It's also possible to provide AGIC access to Azure Resource Manager by using a Kubernetes secret:
-1. Create an Active Directory Service Principal and encode with base64. The base64 encoding is required for the JSON
-blob to be saved to Kubernetes.
+1. Create an Active Directory service principal and encode it with Base64. The Base64 encoding is required for the JSON blob to be saved to Kubernetes.
```azurecli az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0 ```
-2. Add the base64 encoded JSON blob to the `helm-config.yaml` file. More information on `helm-config.yaml` is in the
-next section.
+2. Add the Base64-encoded JSON blob to the `helm-config.yaml` file. The `helm-config.yaml` file configures AGIC.
```yaml armAuth:
next section.
secretJSON: <Base64-Encoded-Credentials> ```
-## Deploy the Azure Application Gateway Ingress Controller Add-on
-### Create an Ingress Controller deployment manifest
+## Deploy the AGIC add-on
+
+### Create a deployment manifest for the ingress controller
+ ```yaml # file: pet-supplies-ingress.yaml
spec:
number: 3002 ```
-### Deploy Ingress Controller
+
+### Deploy the ingress controller
```powershell-interactive $namespace="namespace"
$file="pet-supplies-ingress.yaml"
kubectl apply -f $file -n $namespace ```
-## Install Ingress Controller as a Helm Chart
+## Install the ingress controller as a Helm chart
-In the first few steps, we installed Helm's Tiller on your Kubernetes cluster. Use [Cloud Shell](https://shell.azure.com/) to install the AGIC Helm package:
+Use [Cloud Shell](https://shell.azure.com/) to install the AGIC Helm package:
-1. Perform a helm update
+1. Perform a Helm update:
```bash helm repo update ```
-1. Download helm-config.yaml, which configures AGIC:
+1. Download `helm-config.yaml`:
```bash wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
In the first few steps, we installed Helm's Tiller on your Kubernetes cluster. U
apiServerAddress: <aks-api-server-address> ```
-1. Edit helm-config.yaml and fill in the values for `appgw` and `armAuth`.
+1. Edit `helm-config.yaml` and fill in the values for `appgw` and `armAuth`.
> [!NOTE]
- > The `<identity-client-id>` is a property of the Microsoft Entra Workload ID you setup in the previous section. You can retrieve this information by running the following command: `az identity show -g <resourcegroup> -n <identity-name>`, where `<resourcegroup>` is the resource group hosting the infrastructure resources related to the AKS cluster, Application Gateway and managed identity.
+ > `<identity-client-id>` is a property of the Microsoft Entra Workload ID value that you set up in the previous section. You can retrieve this information by running the following command: `az identity show -g <resourcegroup> -n <identity-name>`. In that command, `<resourcegroup>` is the resource group that hosts the infrastructure resources related to the AKS cluster, Application Gateway, and the managed identity.
-1. Install Helm chart with the `helm-config.yaml` configuration from the previous step
+1. Install the Helm chart with the `helm-config.yaml` configuration from the previous step:
```bash helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml ```
- Alternatively you can combine the `helm-config.yaml` and the Helm command in one step:
+ Alternatively, you can combine `helm-config.yaml` and the Helm command in one step:
```bash helm install oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure \
In the first few steps, we installed Helm's Tiller on your Kubernetes cluster. U
--set aksClusterConfiguration.apiServerAddress=aks-abcdefg.hcp.westus2.azmk8s.io ```
-1. Check the log of the newly created pod to verify if it started properly
-
-Refer to [this how-to guide](ingress-controller-expose-service-over-http-https.md) to understand how you can expose an AKS service over HTTP or HTTPS, to the internet, using an Azure Application Gateway.
+1. Check the log of the newly created pod to verify that it started properly.
-## Shared Application Gateway
+To understand how you can expose an AKS service to the internet over HTTP or HTTPS by using an Azure Application Gateway instance, see [this how-to guide](ingress-controller-expose-service-over-http-https.md).
-By default AGIC assumes full ownership of the Application Gateway it's linked to. AGIC version 0.8.0 and later can
-share a single Application Gateway with other Azure components. For instance, we could use the same Application Gateway for an app
-hosted on Virtual Machine Scale Set and an AKS cluster.
+## Set up a shared Application Gateway instance
-**Backup your Application Gateway's configuration** before enabling this setting:
+By default, AGIC assumes full ownership of the Application Gateway instance that it's linked to. AGIC version 0.8.0 and later can share a single Application Gateway instance with other Azure components. For example, you could use the same Application Gateway instance for an app
+that's hosted on an [Azure virtual machine scale set](https://azure.microsoft.com/services/virtual-machine-scale-sets/) and an AKS cluster.
- 1. From the [Azure portal](https://portal.azure.com/), navigate to your `Application Gateway` instance
- 2. Under the **Automation** section, select **Export template** and then select **Download**.
+### Example scenario
-The zip file you downloaded contains JSON templates, bash, and PowerShell scripts you could use to restore Application Gateway
+Let's look at an imaginary Application Gateway instance that manages traffic for two websites:
-### Example Scenario
+- `dev.contoso.com`: Hosted on a new AKS cluster by using Application Gateway and AGIC.
+- `prod.contoso.com`: Hosted on a virtual machine scale set.
-Let's look at an imaginary Application Gateway, which manages traffic for two web sites:
+With default settings, AGIC assumes 100% ownership of the Application Gateway instance that it's pointed to. AGIC overwrites all of the App Gateway configuration. If you manually create a listener for `prod.contoso.com` on Application Gateway without defining it in the Kubernetes ingress, AGIC deletes the `prod.contoso.com` configuration within seconds.
- - `dev.contoso.com` - hosted on a new AKS cluster, using Application Gateway and AGIC
- - `prod.contoso.com` - hosted on an [Azure Virtual Machine Scale Set](https://azure.microsoft.com/services/virtual-machine-scale-sets/)
-
-With default settings, AGIC assumes 100% ownership of the Application Gateway it's pointed to. AGIC overwrites all of App
-Gateway's configuration. If you manually create a listener for `prod.contoso.com` (on Application Gateway) without
-defining it in the Kubernetes Ingress, AGIC deletes the `prod.contoso.com` config within seconds.
-
-To install AGIC and also serve `prod.contoso.com` from our Virtual Machine Scale Set machines, we must constrain AGIC to configuring
-`dev.contoso.com` only. This is facilitated by instantiating the following
-[CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/):
+To install AGIC and also serve `prod.contoso.com` from the machines that use the virtual machine scale set, you must constrain AGIC to configuring
+`dev.contoso.com` only. You facilitate this constraint by instantiating the following [custom resource definition (CRD)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/):
```bash cat <<EOF | kubectl apply -f -
spec:
EOF ```
-The command above creates an `AzureIngressProhibitedTarget` object. This makes AGIC (version 0.8.0 and later) aware of the existence of
-Application Gateway config for `prod.contoso.com` and explicitly instructs it to avoid changing any configuration
-related to that hostname.
+The preceding command creates an `AzureIngressProhibitedTarget` object. This object makes AGIC (version 0.8.0 and later) aware of the existence of
+the Application Gateway configuration for `prod.contoso.com`. This object also explicitly instructs AGIC to avoid changing any configuration
+related to that host name.
-### Enable with new AGIC installation
+### Enable a shared Application Gateway instance by using a new AGIC installation
To limit AGIC (version 0.8.0 and later) to a subset of the Application Gateway configuration, modify the `helm-config.yaml` template.
-Under the `appgw:` section, add `shared` key and set it to `true`.
+In the `appgw:` section, add a `shared` key and set it to `true`:
```yaml appgw: subscriptionId: <subscriptionId> # existing field resourceGroup: <resourceGroupName> # existing field name: <applicationGatewayName> # existing field
- shared: true # <<<<< Add this field to enable shared Application Gateway >>>>>
+ shared: true # Add this field to enable shared Application Gateway
``` Apply the Helm changes:
- 1. Ensure the `AzureIngressProhibitedTarget` CRD is installed with:
+1. Ensure that the `AzureIngressProhibitedTarget` CRD is installed:
- ```bash
- kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/7b55ad194e7582c47589eb9e78615042e00babf3/crds/AzureIngressProhibitedTarget-v1-CRD-v1.yaml
- ```
+ ```bash
+ kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/7b55ad194e7582c47589eb9e78615042e00babf3/crds/AzureIngressProhibitedTarget-v1-CRD-v1.yaml
+ ```
- 2. Update Helm:
+2. Update Helm:
- ```bash
- helm upgrade \
- --recreate-pods \
- -f helm-config.yaml \
- agic-controller
- oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure
- ```
+ ```bash
+ helm upgrade \
+ --recreate-pods \
+ -f helm-config.yaml \
+ agic-controller
+ oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure
+ ```
As a result, your AKS cluster has a new instance of `AzureIngressProhibitedTarget` called `prohibit-all-targets`:
As a result, your AKS cluster has a new instance of `AzureIngressProhibitedTarge
kubectl get AzureIngressProhibitedTargets prohibit-all-targets -o yaml ```
-The object `prohibit-all-targets`, as the name implies, prohibits AGIC from changing config for *any* host and path.
-Helm install with `appgw.shared=true` deploys AGIC, but doesn't make any changes to Application Gateway.
+The `prohibit-all-targets` object prohibits AGIC from changing the configuration for *any* host and path. Helm installed with `appgw.shared=true` deploys AGIC, but it doesn't make any changes to Application Gateway.
### Broaden permissions
-Since Helm with `appgw.shared=true` and the default `prohibit-all-targets` blocks AGIC from applying a config, broaden AGIC permissions:
+Because Helm with `appgw.shared=true` and the default `prohibit-all-targets` blocks AGIC from applying a configuration, you must broaden AGIC permissions:
-1. Create a new YAML file named `AzureIngressProhibitedTarget` with the following snippet containing your specific setup:
+1. Create a new YAML file named `AzureIngressProhibitedTarget` with the following snippet that contains your specific setup:
```bash cat <<EOF | kubectl apply -f -
Since Helm with `appgw.shared=true` and the default `prohibit-all-targets` block
EOF ```
-2. Only after you have created your own custom prohibition, you can delete the default one, which is too broad:
+2. Now that you've created your own custom prohibition, you can delete the default one, which is too broad:
```bash kubectl delete AzureIngressProhibitedTarget prohibit-all-targets ```
-### Enable for an existing AGIC installation
+### Enable a shared Application Gateway instance for an existing AGIC installation
+
+Assume that you already have a working AKS cluster and an Application Gateway instance, and you configured AGIC in your cluster. You have an Ingress for `prod.contoso.com` and are successfully serving traffic for it from the cluster.
-Let's assume that we already have a working AKS cluster, Application Gateway, and configured AGIC in our cluster. We have an Ingress for
-`prod.contoso.com` and are successfully serving traffic for it from the cluster. We want to add `staging.contoso.com` to our
-existing Application Gateway, but need to host it on a [VM](https://azure.microsoft.com/services/virtual-machines/). We're going to reuse the existing Application Gateway and manually configure a listener and backend pools for
-`staging.contoso.com`. But manually tweaking Application Gateway config (using
-[portal](https://portal.azure.com), [ARM APIs](/rest/api/resources/) or
-[Terraform](https://www.terraform.io/)) would conflict with AGIC's assumptions of full ownership. Shortly after we apply
-changes, AGIC overwrites or deletes them.
+You want to add `staging.contoso.com` to your existing Application Gateway instance, but you need to host it on a [virtual machine](https://azure.microsoft.com/services/virtual-machines/). You're going to reuse the existing Application Gateway instance and manually configure a listener and back-end pools for `staging.contoso.com`. But manually tweaking the Application Gateway configuration (by using the [Azure portal](https://portal.azure.com), [Resource Manager APIs](/rest/api/resources/), or [Terraform](https://www.terraform.io/)) would conflict with AGIC's assumptions of full ownership. Shortly after you apply changes, AGIC overwrites or deletes them.
-We can prohibit AGIC from making changes to a subset of configuration.
+You can prohibit AGIC from making changes to a subset of the configuration:
-1. Create a new YAML file named `AzureIngressProhibitedTarget` with the following snippet:
+1. Create a new YAML file named `AzureIngressProhibitedTarget` by using the following snippet:
```bash cat <<EOF | kubectl apply -f -
We can prohibit AGIC from making changes to a subset of configuration.
``` 2. View the newly created object:+ ```bash kubectl get AzureIngressProhibitedTargets ```
-3. Modify Application Gateway config from the Azure portal - add listeners, routing rules, backends etc. The new object we created
-(`manually-configured-staging-environment`) prohibits AGIC from overwriting Application Gateway configuration related to
+3. Modify the Application Gateway configuration from the Azure portal. For example, add listeners, routing rules, and back ends. The new object that you created (`manually-configured-staging-environment`) prohibits AGIC from overwriting the Application Gateway configuration related to
`staging.contoso.com`.+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Install New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-install-new.md
Title: Creating an ingress controller with a new Application Gateway
-description: This article provides information on how to deploy an Application Gateway Ingress Controller with a new Application Gateway.
+ Title: Create an ingress controller by using a new Application Gateway instance
+description: This article provides information on how to deploy the Application Gateway Ingress Controller by using a new Application Gateway instance.
Last updated 9/17/2024
-# How to Install an Application Gateway Ingress Controller (AGIC) Using a New Application Gateway
+# Install AGIC by using a new Application Gateway instance
-The instructions below assume Application Gateway Ingress Controller (AGIC) will be
-installed in an environment with no preexisting components.
+The instructions in this article assume that you want to install the Application Gateway Ingress Controller (AGIC) in an environment that has no preexisting components.
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+## Install required command-line tools
-## Required Command Line Tools
+We recommend the use of [Azure Cloud Shell](https://shell.azure.com/) for all the command-line operations in this article. You can open Cloud Shell by selecting the **Launch Cloud Shell** button.
-We recommend the use of [Azure Cloud Shell](https://shell.azure.com/) for all command-line operations below. Launch your shell from shell.azure.com or by clicking the link:
+Alternatively, open Cloud Shell from the Azure portal by selecting its icon.
-Alternatively, launch Cloud Shell from Azure portal using the following icon:
+![Azure PowerShell icon in the portal](./media/application-gateway-ingress-controller-install-new/portal-launch-icon.png)
-![Portal launch](./media/application-gateway-ingress-controller-install-new/portal-launch-icon.png)
+Your Cloud Shell instance already has all necessary tools. If you choose to use another environment, ensure that the following command-line tools are installed:
-Your [Azure Cloud Shell](https://shell.azure.com/) already has all necessary tools. If you
-choose to use another environment, ensure the following command-line tools are installed:
+- `az`: Azure CLI ([installation instructions](/cli/azure/install-azure-cli))
+- `kubectl`: Kubernetes command-line tool ([installation instructions](https://kubernetes.io/docs/tasks/tools/install-kubectl))
+- `helm`: Kubernetes package manager ([installation instructions](https://github.com/helm/helm/releases/latest))
+- `jq`: Command-line JSON processor ([installation instructions](https://stedolan.github.io/jq/download/))
-* `az` - Azure CLI: [installation instructions](/cli/azure/install-azure-cli)
-* `kubectl` - Kubernetes command-line tool: [installation instructions](https://kubernetes.io/docs/tasks/tools/install-kubectl)
-* `helm` - Kubernetes package
-* `jq` - command-line JSON processor: [installation instructions](https://stedolan.github.io/jq/download/)
+## Create an identity
+Use the following steps to create a Microsoft Entra [service principal object](../active-directory/develop/app-objects-and-service-principals.md#service-principal-object).
-## Create an Identity
+1. Create an Active Directory service principal, which includes an [Azure role-based access control (RBAC)](../role-based-access-control/overview.md) role:
-Follow the steps below to create a Microsoft Entra [service principal object](../active-directory/develop/app-objects-and-service-principals.md#service-principal-object). Record the `appId`, `password`, and `objectId` values - these values are used in the following steps.
-
-1. Create AD service principal ([Read more about Azure RBAC](../role-based-access-control/overview.md)):
```azurecli az ad sp create-for-rbac --role Contributor --scopes /subscriptions/mySubscriptionID -o json > auth.json appId=$(jq -r ".appId" auth.json) password=$(jq -r ".password" auth.json) ```
- The `appId` and `password` values from the JSON output will be used in the following steps
+ Record the `appId` and `password` values from the JSON output. You'll use them in the next steps.
+
+1. Use the `appId` value from the previous command's output to get the `id` of the new service principal:
-1. Use the `appId` from the previous command's output to get the `id` of the new service principal:
```azurecli objectId=$(az ad sp show --id $appId --query "id" -o tsv) ```
- The output of this command is `objectId`, which will be used in the Azure Resource Manager template below
-1. Create the parameter file that is used in the Azure Resource Manager template deployment later.
+ The output of this command is `objectId`. Record this value, because you'll use it in the next step.
+
+1. Create the parameter file that you'll use in the Azure Resource Manager template (ARM template) deployment:
+ ```bash cat <<EOF > parameters.json {
Follow the steps below to create a Microsoft Entra [service principal object](..
} EOF ```
- To deploy an **Kubernetes RBAC** enabled cluster, set the `aksEnableRBAC` field to `true`
-## Deploy Components
-This step adds the following components to your subscription:
+ To deploy a Kubernetes RBAC-enabled cluster, set `aksEnableRBAC` to `true`.
+
+## Deploy components
+
+The following procedure adds these components to your subscription:
+
+- [Azure Kubernetes Service (AKS)](/azure/aks/intro-kubernetes)
+- [Azure Application Gateway](./overview.md) v2
+- [Azure Virtual Network](../virtual-network/virtual-networks-overview.md) with two [subnets](../virtual-network/virtual-networks-overview.md)
+- [Public IP address](../virtual-network/ip-services/virtual-network-public-ip-address.md)
+- [Managed identity](../active-directory/managed-identities-azure-resources/overview.md), which [Microsoft Entra Pod Identity](https://github.com/Azure/aad-pod-identity/blob/master/README.md) will use.
+
+To deploy the components:
-- [Azure Kubernetes Service](/azure/aks/intro-kubernetes)-- [Application Gateway](./overview.md) v2-- [Virtual Network](../virtual-network/virtual-networks-overview.md) with two [subnets](../virtual-network/virtual-networks-overview.md)-- [Public IP Address](../virtual-network/ip-services/virtual-network-public-ip-address.md)-- [Managed Identity](../active-directory/managed-identities-azure-resources/overview.md), which will be used by [Microsoft Entra Pod Identity](https://github.com/Azure/aad-pod-identity/blob/master/README.md)
+1. Download the ARM template:
-1. Download the Azure Resource Manager template and modify the template as needed.
```bash wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json ```
-1. Deploy the Azure Resource Manager template using the Azure CLI. The deployment might take up to 5 minutes.
+1. Deploy the ARM template by using the Azure CLI, and modify it as needed. The deployment might take up to 5 minutes.
```azurecli resourceGroupName="MyResourceGroup"
This step adds the following components to your subscription:
--parameters parameters.json ```
-1. Once the deployment finished, download the deployment output into a file named `deployment-outputs.json`.
+1. After the deployment finishes, download the deployment output into a file named `deployment-outputs.json`:
+ ```azurecli az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json ```
-## Set up Application Gateway Ingress Controller
+## Set up AGIC
+
+With the instructions in the previous section, you created and configured a new AKS cluster and an Application Gateway instance. You're now ready to deploy a sample app and an ingress controller to your new Kubernetes infrastructure.
-With the instructions in the previous section, we created and configured a new AKS cluster and an Application Gateway. We're now ready to deploy a sample app and an ingress controller to our new Kubernetes infrastructure.
+### Set up Kubernetes credentials
-### Set up Kubernetes Credentials
-For the following steps, we need setup [kubectl](https://kubectl.docs.kubernetes.io/) command,
-which we use to connect to our new Kubernetes cluster. [Cloud Shell](https://shell.azure.com/) has `kubectl` already installed. We'll use `az` CLI to obtain credentials for Kubernetes.
+For the following steps, you need to set up the [kubectl](https://kubectl.docs.kubernetes.io/) command, which you'll use to connect to your new Kubernetes cluster. [Cloud Shell](https://shell.azure.com/) has `kubectl` already installed. You'll use `az` (Azure CLI) to obtain credentials for Kubernetes.
-Get credentials for your newly deployed AKS ([read more](/azure/aks/manage-azure-rbac#use-azure-rbac-for-kubernetes-authorization-with-kubectl)):
+Get credentials for your newly deployed AKS instance. For more information about the following commands, see [Use Azure RBAC for Kubernetes authorization with kubectl](/azure/aks/manage-azure-rbac#use-azure-rbac-for-kubernetes-authorization-with-kubectl).
```azurecli
-# use the deployment-outputs.json created after deployment to get the cluster name and resource group name
+# use the deployment-outputs.json file created after deployment to get the cluster name and resource group name
aksClusterName=$(jq -r ".aksClusterName.value" deployment-outputs.json) resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)
az aks get-credentials --resource-group $resourceGroupName --name $aksClusterNam
<a name='install-azure-ad-pod-identity'></a> ### Install Microsoft Entra Pod Identity
- Microsoft Entra Pod Identity provides token-based access to
- [Azure Resource Manager (ARM)](../azure-resource-manager/management/overview.md).
- [Microsoft Entra Pod Identity](https://github.com/Azure/aad-pod-identity) will add the following components to your Kubernetes cluster:
- * Kubernetes [CRDs](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/): `AzureIdentity`, `AzureAssignedIdentity`, `AzureIdentityBinding`
- * [Managed Identity Controller (MIC)](https://github.com/Azure/aad-pod-identity#managed-identity-controllermic) component
- * [Node Managed Identity (NMI)](https://github.com/Azure/aad-pod-identity#node-managed-identitynmi) component
+[Microsoft Entra Pod Identity](https://github.com/Azure/aad-pod-identity) provides token-based access to [Azure Resource Manager](../azure-resource-manager/management/overview.md).
-To install Microsoft Entra Pod Identity to your cluster:
+Microsoft Entra Pod Identity adds the following components to your Kubernetes cluster:
- - *Kubernetes RBAC enabled* AKS cluster
+- Kubernetes [custom resource definitions (CRDs)](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/): `AzureIdentity`, `AzureAssignedIdentity`, `AzureIdentityBinding`
+- [Managed Identity Controller (MIC)](https://github.com/Azure/aad-pod-identity#managed-identity-controllermic) component
+- [Node Managed Identity (NMI)](https://github.com/Azure/aad-pod-identity#node-managed-identitynmi) component
- ```bash
- kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
- ```
+To install Microsoft Entra Pod Identity to your cluster, use one of the following commands:
- - *Kubernetes RBAC disabled* AKS cluster
+- Kubernetes RBAC-enabled AKS cluster:
- ```bash
- kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
- ```
+ ```bash
+ kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
+ ```
-### Install Helm
-[Helm](/azure/aks/kubernetes-helm) is a package manager for Kubernetes. We use it to install the `application-gateway-kubernetes-ingress` package.
+- Kubernetes RBAC-disabled AKS cluster:
-> [!NOTE]
-> If you use [Cloud Shell](https://shell.azure.com/), you don't need to install Helm. Azure Cloud Shell comes with Helm version 3. Skip the first step and just add the AGIC Helm repository.
+ ```bash
+ kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
+ ```
-1. Install [Helm](/azure/aks/kubernetes-helm) and run the following:
+### Add the Helm repository
- - *Kubernetes RBAC enabled* AKS cluster
+[Helm](/azure/aks/kubernetes-helm) is a package manager for Kubernetes. You use it to install the `application-gateway-kubernetes-ingress` package.
- ```bash
- kubectl create serviceaccount --namespace kube-system tiller-sa
- kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa
- helm init --tiller-namespace kube-system --service-account tiller-sa
- ```
+If you use [Cloud Shell](https://shell.azure.com/), you don't need to install Helm. Cloud Shell comes with Helm version 3. Run one of the following commands to add the AGIC Helm repository:
- - *Kubernetes RBAC disabled* AKS cluster
+- Kubernetes RBAC-enabled AKS cluster:
- ```bash
- helm init
- ```
+ ```bash
+ kubectl create serviceaccount --namespace kube-system tiller-sa
+ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa
+ helm init --tiller-namespace kube-system --service-account tiller-sa
+ ```
-### Install Ingress Controller Helm Chart
+- Kubernetes RBAC-disabled AKS cluster:
+
+ ```bash
+ helm init
+ ```
+
+### Install the ingress controller's Helm chart
+
+1. Use the `deployment-outputs.json` file that you created earlier to create the following variables:
-1. Use the `deployment-outputs.json` file created above and create the following variables.
```bash applicationGatewayName=$(jq -r ".applicationGatewayName.value" deployment-outputs.json) resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)
To install Microsoft Entra Pod Identity to your cluster:
identityClientId=$(jq -r ".identityClientId.value" deployment-outputs.json) identityResourceId=$(jq -r ".identityResourceId.value" deployment-outputs.json) ```
-1. Download helm-config.yaml, which will configure AGIC:
+
+1. Download `helm-config.yaml`, which configures AGIC:
+ ```bash wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml ```
- Or copy the YAML file below:
+
+ Or copy the following YAML file:
```yaml # This file contains the essential configs for the ingress controller helm chart
To install Microsoft Entra Pod Identity to your cluster:
# Specify which kubernetes namespace the ingress controller will watch # Default value is "default" # Leaving this variable out or setting it to blank or empty string would
- # result in Ingress Controller observing all acessible namespaces.
+ # result in Ingress Controller observing all accessible namespaces.
# # kubernetes: # watchNamespace: <namespace>
To install Microsoft Entra Pod Identity to your cluster:
apiServerAddress: <aks-api-server-address> ```
-1. Edit the newly downloaded helm-config.yaml and fill out the sections `appgw` and `armAuth`.
+1. Edit the newly downloaded `helm-config.yaml` file and fill out the sections for `appgw` and `armAuth`:
+ ```bash sed -i "s|<subscriptionId>|${subscriptionId}|g" helm-config.yaml sed -i "s|<resourceGroupName>|${resourceGroupName}|g" helm-config.yaml
To install Microsoft Entra Pod Identity to your cluster:
sed -i "s|<identityClientId>|${identityClientId}|g" helm-config.yaml ``` - > [!NOTE]
- > **For deploying to Sovereign Clouds (e.g., Azure Government)**, the `appgw.environment` configuration parameter must be added and set to the appropriate value as documented below.
--
- Values:
- - `verbosityLevel`: Sets the verbosity level of the AGIC logging infrastructure. See [Logging Levels](https://github.com/Azure/application-gateway-kubernetes-ingress/blob/463a87213bbc3106af6fce0f4023477216d2ad78/docs/troubleshooting.md#logging-levels) for possible values.
- - `appgw.environment`: Sets cloud environment. Possible values: `AZURECHINACLOUD`, `AZUREGERMANCLOUD`, `AZUREPUBLICCLOUD`, `AZUREUSGOVERNMENTCLOUD`
- - `appgw.subscriptionId`: The Azure Subscription ID in which Application Gateway resides. Example: `a123b234-a3b4-557d-b2df-a0bc12de1234`
- - `appgw.resourceGroup`: Name of the Azure Resource Group in which Application Gateway was created. Example: `app-gw-resource-group`
- - `appgw.name`: Name of the Application Gateway. Example: `applicationgatewayd0f0`
- - `appgw.shared`: This boolean flag should be defaulted to `false`. Set to `true` should you need a [Shared Application Gateway](https://github.com/Azure/application-gateway-kubernetes-ingress/blob/072626cb4e37f7b7a1b0c4578c38d1eadc3e8701/docs/setup/install-existing.md#multi-cluster--shared-app-gateway).
- - `kubernetes.watchNamespace`: Specify the namespace that AGIC should watch. The namespace value can be a single string value, or a comma-separated list of namespaces.
- - `armAuth.type`: could be `aadPodIdentity` or `servicePrincipal`
- - `armAuth.identityResourceID`: Resource ID of the Azure Managed Identity
- - `armAuth.identityClientID`: The Client ID of the Identity. More information about **identityClientID** is provided below.
- - `armAuth.secretJSON`: Only needed when Service Principal Secret type is chosen (when `armAuth.type` has been set to `servicePrincipal`)
-
+ > If you're deploying to a sovereign cloud (for example, Azure Government), you must add the `appgw.environment` configuration parameter and set it to the appropriate value.
+
+ Here are the values:
+
+ - `verbosityLevel`: Sets the verbosity level of the AGIC logging infrastructure. For possible values, see [Logging levels](https://github.com/Azure/application-gateway-kubernetes-ingress/blob/463a87213bbc3106af6fce0f4023477216d2ad78/docs/troubleshooting.md#logging-levels).
+ - `appgw.environment`: Sets the cloud environment. Possible values: `AZURECHINACLOUD`, `AZUREGERMANCLOUD`, `AZUREPUBLICCLOUD`, `AZUREUSGOVERNMENTCLOUD`.
+ - `appgw.subscriptionId`: The Azure subscription ID in which Application Gateway resides. Example: `a123b234-a3b4-557d-b2df-a0bc12de1234`.
+ - `appgw.resourceGroup`: Name of the Azure resource group in which you created the Application Gateway instance. Example: `app-gw-resource-group`.
+ - `appgw.name`: Name of the Application Gateway instance. Example: `applicationgatewayd0f0`.
+ - `appgw.shared`: Boolean flag that defaults to `false`. Set it to `true` if you need a [shared Application Gateway instance](https://github.com/Azure/application-gateway-kubernetes-ingress/blob/072626cb4e37f7b7a1b0c4578c38d1eadc3e8701/docs/setup/install-existing.md#multi-cluster--shared-app-gateway).
+ - `kubernetes.watchNamespace`: Specifies the namespace that AGIC should watch. The namespace value can be a single string value or a comma-separated list of namespaces.
+ - `armAuth.type`: Could be `aadPodIdentity` or `servicePrincipal`.
+ - `armAuth.identityResourceID`: Resource ID of the Azure managed identity.
+ - `armAuth.identityClientID`: Client ID of the identity.
+ - `armAuth.secretJSON`: Needed only when you choose a service principal as the secret type (that is, when you set `armAuth.type` to `servicePrincipal`).
> [!NOTE]
- > The `identityResourceID` and `identityClientID` are values that were created during the [Deploy Components](ingress-controller-install-new.md#deploy-components) steps, and could be obtained again using the following command:
+ > You created the `identityResourceID` and `identityClientID` values during the earlier steps for [deploying components](ingress-controller-install-new.md#deploy-components). You can obtain them again by using the following command:
+ >
> ```azurecli > az identity show -g <resource-group> -n <identity-name> > ```
- > `<resource-group>` in the command above is the resource group of your Application Gateway. `<identity-name>` is the name of the created identity. All identities for a given subscription can be listed using: `az identity list`
-
+ >
+ > In the command, `<resource-group>` is the resource group of your Application Gateway instance. The `<identity-name>` placeholder is the name of the created identity. You can list all identities for a particular subscription by using `az identity list`.
-1. Install the Application Gateway ingress controller package:
+1. Install the AGIC package:
```bash helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml ```
-## Install a Sample App
-Now that we have Application Gateway, AKS, and AGIC installed we can install a sample app
-via [Azure Cloud Shell](https://shell.azure.com/):
+## Install a sample app
+
+Now that you have Application Gateway, AKS, and AGIC installed, you can install a sample app via [Azure Cloud Shell](https://shell.azure.com/):
```yaml cat <<EOF | kubectl apply -f -
spec:
EOF ```
-Alternatively you can:
+Alternatively, you can:
-* Download the YAML file above:
+- Download the preceding YAML file:
```bash curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml ```
-* Apply the YAML file:
+- Apply the YAML file:
```bash kubectl apply -f aspnetapp.yaml ```
+## Related content
-## Other Examples
-This [how-to guide](ingress-controller-expose-service-over-http-https.md) contains more examples on how to expose an AKS
-service via HTTP or HTTPS, to the Internet with Application Gateway.
+- For more examples on how to expose an AKS service to the internet via HTTP or HTTPS by using Application Gateway, see [this how-to guide](ingress-controller-expose-service-over-http-https.md).
+- For information about Application Gateway for Containers, see [this overview article](for-containers/overview.md).
application-gateway Ingress Controller Letsencrypt Certificate Application Gateway https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-letsencrypt-certificate-application-gateway.md
Title: Use LetsEncrypt.org certificates with Application Gateway
-description: This article provides information on how to obtain a certificate from LetsEncrypt.org and use it on your Application Gateway for AKS clusters.
+ Title: Use Let's Encrypt certificates with Application Gateway
+description: This article provides information on how to obtain a certificate from Let's Encrypt and use it on your Application Gateway instance for AKS clusters.
Last updated 08/01/2023
-# Use certificates with LetsEncrypt.org on Application Gateway for AKS clusters
+# Use Let's Encrypt certificates on Application Gateway for AKS clusters
-This section configures your AKS to use [LetsEncrypt.org](https://letsencrypt.org/) and automatically obtain a TLS/SSL certificate for your domain. The certificate is installed on Application Gateway, which performs SSL/TLS termination for your AKS cluster. The setup described here uses the [cert-manager](https://github.com/jetstack/cert-manager) Kubernetes add-on, which automates the creation and management of certificates.
+You can configure your Azure Kubernetes Service (AKS) instance to use [Let's Encrypt](https://letsencrypt.org/) and automatically obtain a TLS/SSL certificate for your domain. The certificate is installed on Azure Application Gateway, which performs TLS/SSL termination for your AKS cluster.
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+The setup that this article describes uses the [cert-manager](https://github.com/jetstack/cert-manager) Kubernetes add-on, which automates the creation and management of certificates.
-Use the following steps to install [cert-manager](https://docs.cert-manager.io) on your existing AKS cluster.
+## Install the add-on
-1. Helm Chart
+Use the following steps to install [cert-manager](https://docs.cert-manager.io) on your existing AKS cluster:
- Run the following script to install the `cert-manager` helm chart. The script performs the following actions:
+1. Run the following script to install the cert-manager Helm chart. The script performs the following actions:
- - creates a new `cert-manager` namespace on your AKS
- - creates the following CRDs: Certificate, Challenge, ClusterIssuer, Issuer, Order
- - installs cert-manager chart (from [docs.cert-manager.io)](https://cert-manager.io/docs/installation/compatibility/)
+ - Creates a new `cert-manager` namespace on your AKS cluster
+ - Creates the following custom resource definitions (CRDs): `Certificate`, `Challenge`, `ClusterIssuer`, `Issuer`, `Order`
+ - Installs the cert-manager chart (from the [cert-manager site](https://cert-manager.io/docs/installation/compatibility/))
```bash #!/bin/bash
Use the following steps to install [cert-manager](https://docs.cert-manager.io)
# you must add the --set installCRDs=true flag to your Helm installation command. ```
-2. ClusterIssuer Resource
+2. Create a `ClusterIssuer` resource. Cert-manager requires this resource to represent the Let's Encrypt certificate authority that issues the signed certificate.
- Create a `ClusterIssuer` resource. This is required by `cert-manager` to represent the `Lets Encrypt` certificate authority where the signed certificate is obtained.
+ Cert-manager uses the non-namespaced `ClusterIssuer` resource to issue certificates that can be consumed from multiple namespaces. Let's Encrypt uses the ACME protocol to verify that you control a particular domain name and to issue a certificate. You can get more details on configuring `ClusterIssuer` properties in the [cert-manager documentation](https://docs.cert-manager.io/en/latest/tasks/issuers/https://docsupdatetracker.net/index.html).
- Cert-manager uses the non-namespaced `ClusterIssuer` resource to issue certificates that can be consumed from multiple namespaces. `LetΓÇÖs Encrypt` uses the ACME protocol to verify that you control a given domain name and to issue a certificate. More details on configuring `ClusterIssuer` properties [here](https://docs.cert-manager.io/en/latest/tasks/issuers/https://docsupdatetracker.net/index.html). `ClusterIssuer` instructs `cert-manager` to issue certificates using the `Lets Encrypt` staging environment used for testing (the root certificate not present in browser/client trust stores).
+ `ClusterIssuer` instructs cert-manager to issue certificates by using the Let's Encrypt staging environment that's used for testing. (The root certificate is not present in browser/client trust stores.)
- The default challenge type in the following YAML is `http01`. Other challenges are documented on [letsencrypt.org - Challenge Types](https://letsencrypt.org/docs/challenge-types/)
+ The default challenge type in the following YAML is `http01`. You can find other challenge types in the [Let's Encrypt documentation](https://letsencrypt.org/docs/challenge-types/).
- > [!IMPORTANT]
- > Update `<YOUR.EMAIL@ADDRESS>` in the following YAML.
+ In the following YAML, be sure to replace `<YOUR.EMAIL@ADDRESS>` with your information.
```bash #!/bin/bash
Use the following steps to install [cert-manager](https://docs.cert-manager.io)
# Let's Encrypt uses this to contact you about expiring # certificates, and issues related to your account. email: <YOUR.EMAIL@ADDRESS>
- # ACME server URL for LetΓÇÖs EncryptΓÇÖs staging environment.
+ # ACME server URL for Let's Encrypt's staging environment.
# The staging environment won't issue trusted certificates but is # used to ensure that the verification process is working properly # before moving to production
Use the following steps to install [cert-manager](https://docs.cert-manager.io)
EOF ```
-3. Deploy App
+3. Create an ingress resource to expose the `guestbook` application by using the Application Gateway instance with the Let's Encrypt certificate.
- Create an Ingress resource to Expose the `guestbook` application using the Application Gateway with the Lets Encrypt Certificate.
+ Ensure that your Application Gateway instance has a public front-end IP configuration with a DNS name. Use the default `azure.com` domain, or provision an Azure DNS zone and then assign your own custom domain. The annotation `certmanager.k8s.io/cluster-issuer: letsencrypt-staging` tells cert-manager to process the tagged ingress resource.
- Ensure your Application Gateway has a public Frontend IP configuration with a DNS name (either using the default `azure.com` domain, or provision a `Azure DNS Zone` service, and assign your own custom domain). The annotation `certmanager.k8s.io/cluster-issuer: letsencrypt-staging`, which tells cert-manager to process the tagged Ingress resource.
-
- > [!IMPORTANT]
- > Update `<PLACEHOLDERS.COM>` in the following YAML with your own domain (or the Application Gateway one, for example 'kh-aks-ingress.westeurope.cloudapp.azure.com')
+ In the following YAML, be sure to replace `<PLACEHOLDERS.COM>` with your own domain or with the Application Gateway domain (for example, `kh-aks-ingress.westeurope.cloudapp.azure.com`).
```bash kubectl apply -f - <<EOF
Use the following steps to install [cert-manager](https://docs.cert-manager.io)
EOF ```
- After a few seconds, you can access the `guestbook` service through the Application Gateway HTTPS url using the automatically issued **staging** `Lets Encrypt` certificate.
- Your browser may warn you of an invalid certificate authority. The staging certificate is issued by `CN=Fake LE Intermediate X1`. This warning is an indication that the system worked as expected and you're ready for your production certificate.
+ After a few seconds, you can access the `guestbook` service through the Application Gateway HTTPS URL by using the automatically issued Let's Encrypt certificate for staging.
+
+ Your browser might warn you about an invalid certificate authority. The reason is that `CN=Fake LE Intermediate X1` issued the staging certificate. This warning means that the system worked as expected and you're ready for your production certificate.
+
+4. After you successfully set up your staging certificate, you can switch to a production ACME server:
-4. Production Certificate
+ 1. Replace the staging annotation on your ingress resource with `certmanager.k8s.io/cluster-issuer: letsencrypt-prod`.
+ 1. Delete the existing staging `ClusterIssuer` resource that you created earlier. Create a new staging resource by replacing the ACME server from the previous `ClusterIssuer` YAML with `https://acme-v02.api.letsencrypt.org/directory`.
- Once your staging certificate is set up successfully, you can switch to a production ACME server:
- 1. Replace the staging annotation on your Ingress resource with: `certmanager.k8s.io/cluster-issuer: letsencrypt-prod`
- 1. Delete the existing staging `ClusterIssuer` you created in the previous step and create a new one by replacing the ACME server from the previous ClusterIssuer YAML with `https://acme-v02.api.letsencrypt.org/directory`
+Before the Let's Encrypt certificate expires, `cert-manager` automatically updates the certificate in the Kubernetes secret store. At that point, the Application Gateway Ingress Controller applies the updated secret referenced in the ingress resources that it's using to configure Application Gateway.
-5. Certificate Expiration and Renewal
+## Related content
- Before the `Lets Encrypt` certificate expires, `cert-manager` automatically updates the certificate in the Kubernetes secret store. At that point, Application Gateway Ingress Controller applies the updated secret referenced in the ingress resources it's using to configure the Application Gateway.
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Multiple Namespace Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-multiple-namespace-support.md
Title: Enable multiple namespace support for Application Gateway Ingress Controller
-description: This article provides information on how to enable multiple namespace support in a Kubernetes cluster with an Application Gateway Ingress Controller.
+ Title: Enable multiple-namespace support for Application Gateway Ingress Controller
+description: This article provides information on how to enable support for multiple namespaces in a Kubernetes cluster by using the Application Gateway Ingress Controller.
Last updated 08/01/2023
-# Enable multiple Namespace support in an AKS cluster with Application Gateway Ingress Controller
+# Enable multiple-namespace support in an AKS cluster by using AGIC
-## Motivation
+[Kubernetes namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) make it possible for a Kubernetes cluster to be partitioned and allocated to subgroups of a larger team. These subgroups can then deploy and manage infrastructure with finer controls of resources, security, and configuration. Kubernetes allows for one or more ingress resources to be defined independently within each namespace.
-[Kubernetes Namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) make it possible for a Kubernetes cluster to be partitioned and allocated to subgroups of a larger team. These subteams can then deploy and manage infrastructure with finer controls of resources, security, configuration etc. Kubernetes allows for one or more ingress resources to be defined independently within each namespace.
+As of version 0.7, the [Application Gateway Kubernetes Ingress Controller](https://github.com/Azure/application-gateway-kubernetes-ingress/blob/master/README.md) (AGIC) can ingest events from and observe multiple namespaces. If an Azure Kubernetes Service (AKS) administrator decides to use [Azure Application Gateway](https://azure.microsoft.com/services/application-gateway/) as an ingress, all namespaces use the same instance of Application Gateway. A single installation of AGIC monitors accessible namespaces and configures the Application Gateway instance that it's associated with.
-As of version 0.7 [Azure Application Gateway Kubernetes IngressController](https://github.com/Azure/application-gateway-kubernetes-ingress/blob/master/README.md) (AGIC) can ingest events from and observe multiple namespaces. Should the AKS administrator decide to use [Application Gateway](https://azure.microsoft.com/services/application-gateway/) as an ingress, all namespaces use the same instance of Application Gateway. A single installation of Ingress Controller monitors accessible namespaces and configures the Application Gateway it's associated with.
+Version 0.7 of AGIC continues to exclusively observe the `default` namespace, unless you explicitly change it to one or more different namespaces in the Helm configuration.
-Version 0.7 of AGIC continues to exclusively observe the `default` namespace, unless this is explicitly changed to one or more different namespaces in the Helm configuration. See the following section.
+## Enable multiple-namespace support
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+1. Modify the [helm-config.yaml](#sample-helm-configuration-file) file in one of the following ways:
-## Enable multiple namespace support
+ - Delete the `watchNamespace` key entirely from [helm-config.yaml](#sample-helm-configuration-file). AGIC observes all namespaces.
+ - Set `watchNamespace` to an empty string. AGIC observes all namespaces.
+ - Add multiple namespaces separated by a comma (for example, `watchNamespace: default,secondNamespace`). AGIC observes these namespaces exclusively.
+2. Apply Helm template changes by running `helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azure`.
-To enable multiple namespace support:
-1. modify the [helm-config.yaml](#sample-helm-config-file) file in one of the following ways:
- - delete the `watchNamespace` key entirely from [helm-config.yaml](#sample-helm-config-file) - AGIC observes all namespaces
- - set `watchNamespace` to an empty string - AGIC observes all namespaces
- - add multiple namespaces separated by a comma (`watchNamespace: default,secondNamespace`) - AGIC observes these namespaces exclusively
-2. apply Helm template changes with: `helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azure`
+After you deploy AGIC with the ability to observe multiple namespaces, it performs the following actions:
-Once deployed with the ability to observe multiple namespaces, AGIC performs the following actions:
- - lists ingress resources from all accessible namespaces
- - filters to ingress resources annotated with `kubernetes.io/ingress.class: azure/application-gateway`
- - composes combined [Application Gateway config](https://github.com/Azure/azure-sdk-for-go/blob/37f3f4162dfce955ef5225ead57216cf8c1b2c70/services/network/mgmt/2016-06-01/network/models.go#L1710-L1744)
- - applies the config to the associated Application Gateway via [ARM](../azure-resource-manager/management/overview.md)
+- Lists ingress resources from all accessible namespaces
+- Filters to ingress resources annotated with `kubernetes.io/ingress.class: azure/application-gateway`
+- Composes a combined [Application Gateway configuration](https://github.com/Azure/azure-sdk-for-go/blob/37f3f4162dfce955ef5225ead57216cf8c1b2c70/services/network/mgmt/2016-06-01/network/models.go#L1710-L1744)
+- Applies the configuration to the associated Application Gateway instance via [Azure Resource Manager](../azure-resource-manager/management/overview.md)
-## Conflicting Configurations
+## Handle conflicting configurations
-Multiple namespaced [ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource) could instruct AGIC to create conflicting configurations for a single Application Gateway. (Two ingresses claiming the same domain for instance.)
+Multiple-namespaced [ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource) could instruct AGIC to create conflicting configurations for a single Application Gateway instance. That is, two ingresses could claim the same domain for an instance.
-At the top of the hierarchy - **listeners** (IP address, port, and host) and **routing rules** (binding listener, backend pool, and HTTP settings) could be created and shared by multiple namespaces/ingresses.
+At the top of the hierarchy, AGIC could create *listeners* (IP address, port, and host) and *routing rules* (binding listener, back-end pool, and HTTP settings). Multiple namespaces and ingresses could share them.
-On the other hand - paths, backend pools, HTTP settings, and TLS certificates could be created by one namespace only and duplicates are removed.
+On the other hand, AGIC could create paths, back-end pools, HTTP settings, and TLS certificates for one namespace only and remove duplicates.
-For example, consider the following duplicate ingress resources defined namespaces `staging` and `production` for `www.contoso.com`:
+For example, consider the following duplicate ingress resources defined in the `staging` and `production` namespaces for `www.contoso.com`:
```yaml apiVersion: networking.k8s.io/v1
spec:
servicePort: 80 ```
-Despite the two ingress resources demanding traffic for `www.contoso.com` to be routed to the respective Kubernetes namespaces, only one backend can service the traffic. AGIC creates a configuration based on a "first in, first out" basis for one of the resources. If two ingresses resources are created at the same time, the one earlier in the alphabet takes precedence. Based on this property, settings are created for the `production` ingress. Application Gateway is configured with the following resources:
+Despite the two ingress resources demanding traffic for `www.contoso.com` to be routed to the respective Kubernetes namespaces, only one back end can service the traffic. AGIC creates a configuration on a "first in, first out" basis for one of the resources. If two ingress resources are created at the same time, the one earlier in the alphabet takes precedence. Based on this property, AGIC creates settings for the `production` ingress. Application Gateway is configured with the following resources:
- - Listener: `fl-www.contoso.com-80`
- - Routing Rule: `rr-www.contoso.com-80`
- - Backend Pool: `pool-production-contoso-web-service-80-bp-80`
- - HTTP Settings: `bp-production-contoso-web-service-80-80-websocket-ingress`
- - Health Probe: `pb-production-contoso-web-service-80-websocket-ingress`
+- Listener: `fl-www.contoso.com-80`
+- Routing rule: `rr-www.contoso.com-80`
+- Back-end pool: `pool-production-contoso-web-service-80-bp-80`
+- HTTP settings: `bp-production-contoso-web-service-80-80-websocket-ingress`
+- Health probe: `pb-production-contoso-web-service-80-websocket-ingress`
> [!NOTE]
-> Except for *listener* and *routing rule*, the Application Gateway resources created include the name of the namespace (`production`) for which they were created.
+> Except for *listener* and *routing rule*, the created Application Gateway resources include the name of the namespace (`production`) for which AGIC created them.
-If the two ingress resources are introduced into the AKS cluster at different points in time, it's likely for AGIC to end up in a scenario where it reconfigures Application Gateway and reroutes traffic from `namespace-B` to `namespace-A`.
+If the two ingress resources are introduced into the AKS cluster at different points in time, AGIC is likely to end up in a scenario where it reconfigures Application Gateway and reroutes traffic from `namespace-B` to `namespace-A`.
-For example, if you added `staging` first, AGIC configures Application Gateway to route traffic to the staging backend pool. At a later stage, introducing `production` ingress causes AGIC to reprogram Application Gateway, which starts routing traffic to the `production` backend pool.
+For example, if you add `staging` first, AGIC configures Application Gateway to route traffic to the staging back-end pool. At a later stage, introducing `production` ingress causes AGIC to reprogram Application Gateway, which starts routing traffic to the `production` back-end pool.
-## Restrict Access to Namespaces
+## Restrict access to namespaces
-By default AGIC configures Application Gateway based on annotated Ingress within any namespace. Should you want to limit this behavior you have the following options:
- - limit the namespaces, by explicitly defining namespaces AGIC should observe via the `watchNamespace` YAML key in [helm-config.yaml](#sample-helm-config-file)
- - use [Role/RoleBinding](/azure/aks/azure-ad-rbac) to limit AGIC to specific namespaces
+By default, AGIC configures Application Gateway based on annotated ingress within any namespace. If you want to limit this behavior, you have the following options:
-## Sample Helm config file
+- Limit the namespaces by explicitly defining namespaces that AGIC should observe via the `watchNamespace` YAML key in [helm-config.yaml](#sample-helm-configuration-file).
+- Use [Role and RoleBinding objects](/azure/aks/azure-ad-rbac) to limit AGIC to specific namespaces.
+
+## Sample Helm configuration file
```yaml # This file contains the essential configs for the ingress controller helm chart
By default AGIC configures Application Gateway based on annotated Ingress within
# Specify which kubernetes namespace the ingress controller watches # Default value is "default" # Leaving this variable out or setting it to blank or empty string would
- # result in Ingress Controller observing all acessible namespaces.
+ # result in Ingress Controller observing all accessible namespaces.
# # kubernetes: # watchNamespace: <namespace>
By default AGIC configures Application Gateway based on annotated Ingress within
# Specify aks cluster related information. THIS IS BEING DEPRECATED. aksClusterConfiguration: apiServerAddress: <aks-api-server-address>
-```
+```
+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Private Ip https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-private-ip.md
Title: Use private IP address for internal routing for an ingress endpoint
-description: This article provides information on how to use private IPs for internal routing and thus exposing the Ingress endpoint within a cluster to the rest of the VNet.
+description: This article provides information on how to use private IPs for internal routing to expose the ingress endpoint within a cluster to the rest of the virtual network.
Last updated 07/23/2023
-# Use private IP for internal routing for an Ingress endpoint
+# Use a private IP for internal routing for an ingress endpoint
-This feature exposes the ingress endpoint within the `Virtual Network` using a private IP.
+You can use a private IP address for internal routing to expose an ingress endpoint within a cluster to the rest of a virtual network.
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+There are two ways to configure a controller to use a private IP for ingress: assigning the private IP to a particular ingress or assigning it globally.
## Prerequisites
-Application Gateway with a [Private IP configuration](./configure-application-gateway-with-private-frontend-ip.md)
-There are two ways to configure the controller to use Private IP for ingress,
+To complete the tasks in this article, you need Azure Application Gateway with a [private IP configuration](./configure-application-gateway-with-private-frontend-ip.md).
## Assign to a particular ingress
-To expose a particular ingress over Private IP, use annotation [`appgw.ingress.kubernetes.io/use-private-ip`](./ingress-controller-annotations.md#use-private-ip) in Ingress.
-### Usage
+To expose a particular ingress over private IP, use the annotation [`appgw.ingress.kubernetes.io/use-private-ip`](./ingress-controller-annotations.md#use-private-ip) in the ingress:
+ ```yaml appgw.ingress.kubernetes.io/use-private-ip: "true" ```
-For Application Gateways without a Private IP, Ingresses annotated with `appgw.ingress.kubernetes.io/use-private-ip: "true"` is ignored. This is indicated in the ingress event and AGIC pod log.
+For Application Gateway instances without a private IP, ingresses annotated with `appgw.ingress.kubernetes.io/use-private-ip: "true"` are ignored. The ingress event and the Application Gateway Ingress Controller (AGIC) pod log indicate this problem:
-* Error as indicated in the Ingress Event
+- Here's the error as indicated in the ingress event:
```output Events:
For Application Gateways without a Private IP, Ingresses annotated with `appgw.i
applicationgateway3026 has a private IP address ```
-* Error as indicated in AGIC Logs
+- Here's the error as indicated in AGIC logs:
```output E0730 18:57:37.914749 1 prune.go:65] Ingress default/hello-world-ingress requires Application Gateway applicationgateway3026 has a private IP address ```
+## Assign globally
-## Assign Globally
-In case, requirement is to restrict all Ingresses to be exposed over Private IP, use `appgw.usePrivateIP: true` in `helm` config.
+If you need to restrict all ingresses to be exposed over private IP, use `appgw.usePrivateIP: true` in the `helm` configuration:
-### Usage
```yaml appgw: subscriptionId: <subscriptionId>
appgw:
usePrivateIP: true ```
-This makes the ingress controller filter the IP address configurations for a Private IP when configuring the frontend listeners on the Application Gateway.
-AGIC can panic and crash if `usePrivateIP: true` and no Private IP is assigned.
+This code makes the ingress controller filter the IP address configurations for a private IP when it's configuring the front-end listeners on the Application Gateway instance. AGIC can stop working if the value of `usePrivateIP` is `true` and no private IP is assigned.
> [!NOTE]
-> Application Gateway v2 SKU requires a Public IP. Should you require Application Gateway to be private, Attach a [`Network Security Group`](../virtual-network/network-security-groups-overview.md) to the Application Gateway's subnet to restrict traffic.
+> Application Gateway v2 requires a public IP. If you require Application Gateway to be private, attach a [network security group](../virtual-network/network-security-groups-overview.md) to the Application Gateway instance's subnet to restrict traffic.
+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
application-gateway Ingress Controller Update Ingress Controller https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-update-ingress-controller.md
Title: Upgrade ingress controller with Helm
-description: This article provides information on how to upgrade an Application Gateway Ingress using Helm.
+description: This article provides information on how to upgrade an Application Gateway Ingress Controller by using Helm.
Last updated 07/23/2023
-# How to upgrade Application Gateway Ingress Controller using Helm
+# Upgrade AGIC by using Helm
-The Azure Application Gateway Ingress Controller for Kubernetes (AGIC) can be upgraded
-using a Helm repository hosted on Azure Storage.
+You can upgrade the Azure Application Gateway Ingress Controller (AGIC) for Kubernetes by using a Helm repository hosted on Azure Storage.
-> [!TIP]
-> Also see [What is Application Gateway for Containers](for-containers/overview.md).
+## Add the repository
-Before beginning the upgrade procedure, ensure that you've added the required repository:
+Before you begin the upgrade procedure, ensure that you've added the required repository:
-- View your currently added Helm repositories with:
+1. View your currently added Helm repositories:
```bash helm repo list ``` -- Add the AGIC repo with:
+1. If necessary, add the AGIC repository:
```bash helm repo add \
Before beginning the upgrade procedure, ensure that you've added the required re
application-gateway-kubernetes-ingress/ingress-azure 0.6.0 0.6.0 Use Azure Application Gateway as the ingress for an Azure... ```
- Latest available version from the list above is: `0.7.0-rc1`
+ The latest available version from the preceding list is `0.7.0-rc1`.
-1. View the Helm charts currently installed:
+1. View the currently installed Helm charts:
```bash helm list
Before beginning the upgrade procedure, ensure that you've added the required re
odd-billygoat 22 Fri Jun 21 15:56:06 2019 FAILED ingress-azure-0.7.0-rc1 0.7.0-rc1 default ```
- The Helm chart installation from the sample response above is named **odd-billygoat**. This name will be used for the commands. Your actual deployment name will be different.
+ The Helm chart installation from the preceding sample response is named `odd-billygoat`. This article uses that name for the commands. Your actual deployment name will be different.
1. Upgrade the Helm deployment to a new version:
Before beginning the upgrade procedure, ensure that you've added the required re
--version 0.9.0-rc2 ```
-## Rollback
+## Roll back
-If the Helm deployment fails, you can roll back to a previous release.
+If the Helm deployment fails, you can roll back to a previous release:
-1. Get the last known healthy release number:
+1. Get the number of the last known healthy release:
```bash helm history odd-billygoat
If the Helm deployment fails, you can roll back to a previous release.
2 Fri Jun 21 15:56:06 2019 FAILED ingress-azure-xx xxxx ```
- Based on the sample output of the **helm history** command, the last successful deployment of our **odd-billygoat** was revision **1**.
+ Based on the sample output of the `helm history` command, the last successful deployment of the `odd-billygoat` example was revision `1`.
1. Roll back to the last successful revision: ```bash helm rollback odd-billygoat 1 ```+
+## Related content
+
+- [What is Application Gateway for Containers?](for-containers/overview.md)
automation Automation Runbook Types https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/automation/automation-runbook-types.md
The Azure Automation Process Automation feature supports several types of runboo
| Type | Description | |: |: |
-| [PowerShell](#powershell-runbooks) |Textual runbook based on Windows PowerShell scripting. The currently supported versions are: PowerShell 7.2 (GA) and PowerShell 5.1 (GA). Since [PowerShell 7.1](/powershell/scripting/install/powershell-support-lifecycle?view=powershell-7.3&preserve-view=true#powershell-end-of-support-dates) is no longer supported by parent product PowerShell, we recommend you to create runbooks in long term supported version PowerShell 7.2 |
+| [PowerShell](#powershell-runbooks) |Textual runbook based on Windows PowerShell scripting. The currently supported versions are: PowerShell 7.2 (GA) and PowerShell 5.1 (GA). Since [PowerShell 7.1](/powershell/scripting/install/powershell-support-lifecycle?view=powershell-7.3&preserve-view=true#powershell-end-of-support-dates) is no longer supported by parent product PowerShell, we recommend that you to create runbooks in long term supported version PowerShell 7.2 |
| [PowerShell Workflow](#powershell-workflow-runbooks)|Textual runbook based on Windows PowerShell Workflow scripting. |
-| [Python](#python-runbooks) |Textual runbook based on Python scripting. The currently supported versions are: Python 3.8 (GA) and Python 3.10 (preview). Since [Python 2.7](https://devguide.python.org/versions/) is no longer supported by parent product Python, we recommend you to create runbooks in long term supported versions. |
+| [Python](#python-runbooks) |Textual runbook based on Python scripting. The currently supported versions are: Python 3.8 (GA) and Python 3.10 (preview). Since [Python 2.7](https://devguide.python.org/versions/) is no longer supported by parent product Python, we recommend that you to create runbooks in long term supported versions. |
| [Graphical](#graphical-runbooks)|Graphical runbook based on Windows PowerShell and created and edited completely in the graphical editor in Azure portal. | | [Graphical PowerShell Workflow](#graphical-runbooks)|Graphical runbook based on Windows PowerShell Workflow and created and edited completely in the graphical editor in Azure portal. | > [!NOTE]
-> Azure Automation will follow the support lifecycle of PowerShell and Python language versions in accordance with the timelines published by parent products [PowerShell](/powershell/scripting/install/powershell-support-lifecycle?view=powershell-7.3&preserve-view=true#powershell-end-of-support-dates) and [Python](https://devguide.python.org/versions/) respectively. We recommend you to use runbooks with supported language versions.
+> Azure Automation will follow the support lifecycle of PowerShell and Python language versions in accordance with the timelines published by parent products [PowerShell](/powershell/scripting/install/powershell-support-lifecycle?view=powershell-7.3&preserve-view=true#powershell-end-of-support-dates) and [Python](https://devguide.python.org/versions/) respectively. We recommend that you to use runbooks with supported language versions.
Take into account the following considerations when determining which type to use for a particular runbook.
azure-cache-for-redis Cache Remove Tls 10 11 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-cache-for-redis/cache-remove-tls-10-11.md
To meet the industry-wide push toward the exclusive use of Transport Layer Secur
TLS versions 1.0 and 1.1 also don't support the modern encryption methods and cipher suites recommended by Payment Card Industry (PCI) compliance standards. This [TLS security blog](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/) explains some of these vulnerabilities in more detail. > [!IMPORTANT]
-> On November 1, 2024, the TLS 1.2 requirement will be enforced.
+> Starting November 1, 2024, the TLS 1.2 requirement will be enforced.
> >
As a part of this effort, you can expect the following changes to Azure Cache fo
| September 2023 | TLS 1.0/1.1 retirement announcement | | March 1, 2024 | Beginning March 1, 2024, you can't create new caches with the Minimum TLS version set to 1.0 or 1.1 and you can't set the _MinimumTLSVersion_ to 1.0 or 1.1 for your existing cache. The minimum TLS version won't be updated automatically for existing caches at this point. | | October 31, 2024 | Ensure that all your applications are connecting to Azure Cache for Redis using TLS 1.2 and Minimum TLS version on your cache settings is set to 1.2. |
-| November 1, 2024 | Minimum TLS version for all cache instances is updated to 1.2. This means Azure Cache for Redis instances reject connections using TLS 1.0 or 1.1 at this point. |
+| Starting November 1, 2024 | Minimum TLS version for all cache instances is updated to 1.2. This means Azure Cache for Redis instances reject connections using TLS 1.0 or 1.1 at this point. |
> [!IMPORTANT] > The content in this article does not apply to Azure Cache for Redis Enterprise/Enterprise Flash because the Enterprise tiers only support TLS 1.2.
azure-functions Dotnet Isolated Process Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/dotnet-isolated-process-guide.md
Azure Functions currently can be used with the following "Preview" or "Go-live"
| Operating system | .NET preview version | | - | - |
-| Linux | .NET 9 RC2<sup>1, 2</sup> |
+| Windows | .NET 9 Preview 6<sup>1, 2</sup> |
+| Linux | .NET 9 RC2<sup>1, 3</sup> |
<sup>1</sup> To successfully target .NET 9, your project needs to reference the [2.x versions of the core packages](#version-2x-preview). If using Visual Studio, .NET 9 requires version 17.12 or later.
-<sup>2</sup> .NET 9 is not yet supported on the Flex Consumption SKU.
+<sup>2</sup> Support for Windows might not appear in some clients during the preview period.
+
+<sup>3</sup> .NET 9 is not yet supported on the Flex Consumption SKU.
See [Supported versions][supported-versions] for a list of generally available releases that you can use.
azure-maps Add Custom Protocol Pmtiles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-custom-protocol-pmtiles.md
Next, initialize the MapLibre PMTiles protocol.
## Add PMTiles protocol
-To add the PMTiles protocol, hook the data source with the specified protocol URL schema. The following sample uses the [Overture] building dataset to add building data over the basemap.
+To add the PMTiles protocol, hook the data source with the specified protocol URI scheme. The following sample uses the [Overture] building dataset to add building data over the basemap.
```js const PMTILES_URL = "https://overturemaps-tiles-us-west-2-beta.s3.amazonaws.com/2024-07-22/buildings.pmtiles";
protocol.add(new pmtiles.PMTiles(PMTILES_URL));
## Add PMTiles as a map source
-PMTiles are added as a map source during the map event. Once added, the specified URL schema is available to the Azure Maps Web SDK. In the following sample, the PMTiles URL is added as a `VectorTileSource`.
+PMTiles are added as a map source during the map event. Once added, the specified URI scheme is available to the Azure Maps Web SDK. In the following sample, the PMTiles URL is added as a `VectorTileSource`.
```js //Add the source to the map.
azure-maps Creator Onboarding Tool https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/creator-onboarding-tool.md
Integrate the indoor map into your applications using the Web SDK.
> [!div class="nextstepaction"] > [Use the Azure Maps Indoor Maps module]
-[Azure Maps Creator onboarding tool]: creator-onboarding-tool.md
+[Azure Maps Creator onboarding tool]: https://azure.github.io/azure-maps-creator-onboarding-tool
[Conversion service]: /rest/api/maps-creator/conversion [Convert a drawing package]: creator-indoor-maps.md#convert-a-drawing-package [dataset]: creator-indoor-maps.md#datasets
azure-netapp-files Azure Netapp Files Register https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/azure-netapp-files-register.md
Previously updated : 01/21/2022 Last updated : 10/15/2024 # Register for NetApp Resource Provider
-To use the Azure NetApp Files service, you need to register the NetApp Resource Provider.
+To use Azure NetApp Files, you need to register the NetApp Resource Provider.
-1. From the Azure portal, click the Azure Cloud Shell icon on the upper right-hand corner:
+1. From the Azure portal, select the Azure Cloud Shell icon on the upper right-hand corner:
![Azure Cloud Shell icon](./media/azure-netapp-files-register/azure-netapp-files-azure-cloud-shell.png)
To use the Azure NetApp Files service, you need to register the NetApp Resource
The `--wait` parameter instructs the console to wait for the registration to complete. The registration process can take some time to complete.
-4. In the Azure Cloud Shell console, enter the following command to verify that the Azure Resource Provider has been registered:
+4. Verify that the Azure Resource Provider has been registered. To verify, enter the following command in the Azure Cloud Shell console:
```azurecli az provider show --namespace Microsoft.NetApp
To use the Azure NetApp Files service, you need to register the NetApp Resource
"resourceTypes": […. ```
- `<SubID>` is your subscription ID. The `state` parameter value indicates `Registered`.
+ `<SubID>` is your subscription ID. The `state` parameter value indicates `Registered`.
-5. From the Azure portal, click the **Subscriptions** blade.
-6. In the Subscriptions blade, click your subscription ID.
-7. In the settings of the subscription, click **Resource providers** to verify that Microsoft.NetApp Provider indicates the Registered status:
+5. From the Azure portal, select **Subscriptions**.
+6. From Subscriptions, select your subscription ID.
+7. In the settings of the subscription, select **Resource providers** to verify that Microsoft.NetApp Provider indicates the Registered status:
![Registered Microsoft.NetApp](./media/azure-netapp-files-register/azure-netapp-files-registered-resource-providers.png)
azure-netapp-files Faq Data Migration Protection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/faq-data-migration-protection.md
Previously updated : 08/31/2023 Last updated : 10/15/2024 # Data migration and protection FAQs for Azure NetApp Files
This article answers frequently asked questions (FAQs) about Azure NetApp Files
## How do I migrate data to Azure NetApp Files? Azure NetApp Files provides NFS and SMB volumes. You can use any file-based copy tool to migrate data to the service.
-For more information about the Azure File Migration Program, see [Migrate the critical file data you need to power your applications](https://techcommunity.microsoft.com/t5/azure-storage-blog/migrate-the-critical-file-data-you-need-to-power-your/ba-p/3038751). Also, see [Azure Storage migration tools comparison - Unstructured data](../storage/solution-integration/validated-partners/data-management/migration-tools-comparison.md).
+For more information about the Azure File Migration Program, see [Migrate the critical file data you need to power your applications](https://techcommunity.microsoft.com/t5/azure-storage-blog/migrate-the-critical-file-data-you-need-to-power-your/ba-p/3038751). Also, see [Azure Storage migration tools comparison - Unstructured data](../storage/solution-integration/validated-partners/data-management/migration-tools-comparison.md).
NetApp offers a SaaS-based solution, [NetApp Cloud Sync](https://cloud.netapp.com/cloud-sync-service). The solution enables you to replicate NFS or SMB data to Azure NetApp Files NFS exports or SMB shares.
Migration of certain structured datasets (such as databases) is best done using
The requirements for data migration from on premises to Azure NetApp Files are as follows: - Ensure Azure NetApp Files is available in the target Azure region.-- Validate network connectivity between the source and the Azure NetApp Files target volume IP address. Data transfer between on premises and the Azure NetApp Files service is supported over ExpressRoute.
+- Validate network connectivity between the source and the Azure NetApp Files target volume IP address. Data transfer between on premises and the Azure NetApp Files service is supported over ExpressRoute. The virtual machine running that the data transfer tool runs on should have access to both the source and destination volumes.
- Create the target Azure NetApp Files volume. - Transfer the source data to the target volume by using your preferred file copy tool.
By default, your data stays within the region where you deploy your Azure NetApp
## How do I create a copy of an Azure NetApp Files volume in another Azure region?
-Azure NetApp Files provides NFS and SMB volumes. Any file based-copy tool can be used to replicate data between Azure regions.
+Azure NetApp Files provides NFS and SMB volumes. Any file based-copy tool can be used to replicate data between Azure regions.
-The [cross-region replication](cross-region-replication-introduction.md) functionality enables you to asynchronously replicate data from an Azure NetApp Files volume (source) in one region to another Azure NetApp Files volume (destination) in another region. Additionally, you can [create a new volume by using a snapshot of an existing volume](snapshots-restore-new-volume.md).
+The [cross-region replication](cross-region-replication-introduction.md) functionality enables you to asynchronously replicate data from an Azure NetApp Files volume (source) in one region to another Azure NetApp Files volume (destination) in another region. Additionally, you can [create a new volume by using a snapshot of an existing volume](snapshots-restore-new-volume.md).
-NetApp offers a SaaS based solution, [NetApp Cloud Sync](https://cloud.netapp.com/cloud-sync-service). The solution enables you to replicate NFS or SMB data to Azure NetApp Files NFS exports or SMB shares.
+NetApp offers a SaaS based solution, [NetApp Cloud Sync](https://cloud.netapp.com/cloud-sync-service). The solution enables you to replicate NFS or SMB data to Azure NetApp Files NFS exports or SMB shares.
-You can also use a wide array of free tools to copy data. For NFS, you can use workloads tools such as [rsync](https://rsync.samba.org/examples.html) to copy and synchronize source data into an Azure NetApp Files volume. For SMB, you can use workloads [robocopy](/windows-server/administration/windows-commands/robocopy) in the same manner. These tools can also replicate file or folder permissions.
+You can also use a wide array of free tools to copy data. For NFS, you can use workloads tools such as [rsync](https://rsync.samba.org/examples.html) to copy and synchronize source data into an Azure NetApp Files volume. For SMB, you can use workloads [robocopy](/windows-server/administration/windows-commands/robocopy) in the same manner. These tools can also replicate file or folder permissions.
The requirements for replicating an Azure NetApp Files volume to another Azure region are as follows: - Ensure Azure NetApp Files is available in the target Azure region.
azure-vmware Attach Azure Netapp Files To Azure Vmware Solution Hosts https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-vmware/attach-azure-netapp-files-to-azure-vmware-solution-hosts.md
Title: Attach Azure NetApp Files datastores to Azure VMware Solution hosts
description: Learn how to create Azure NetApp Files-based NFS datastores for Azure VMware Solution hosts. Previously updated : 3/22/2024 Last updated : 10/15/2024
To attach an Azure NetApp Files volume to your private cloud using Azure CLI, fo
`az extension add --name vmware` 1. Create a datastore using an existing Azure NetApp Files volume in Azure VMware Solution private cloud cluster.
- `az vmware datastore netapp-volume create --name MyDatastore1 --resource-group MyResourceGroup ΓÇô-cluster Cluster-1 --private-cloud MyPrivateCloud ΓÇô-volume-id /subscriptions/<Subscription Id>/resourceGroups/<Resourcegroup name>/providers/Microsoft.NetApp/netAppAccounts/<Account name>/capacityPools/<pool name>/volumes/<Volume name>`
+ `az vmware datastore netapp-volume create --name MyDatastore1 --resource-group MyResourceGroup ΓÇô-cluster Cluster-1 --private-cloud MyPrivateCloud ΓÇô-net-app-volume /subscriptions/<Subscription Id>/resourceGroups/<Resourcegroup name>/providers/Microsoft.NetApp/netAppAccounts/<Account name>/capacityPools/<pool name>/volumes/<Volume name>`
1. If needed, display the help on the datastores. `az vmware datastore -h`
az vmware datastore netapp-volume create \
--resource-group <resource group containing AVS private cloud> \ --cluster <cluster name in AVS private cloud> \ --private-cloud <name of AVS private cloud> \
- --volume-id /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.NetApp/netAppAccounts/<NetApp account>/capacityPools/<changed capacity pool>/volumes/<volume name>
+ --net-app-volume /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.NetApp/netAppAccounts/<NetApp account>/capacityPools/<changed capacity pool>/volumes/<volume name>
``` >[!IMPORTANT]
backup Sql Support Matrix https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/sql-support-matrix.md
Title: Azure Backup support matrix for SQL Server Backup in Azure VMs description: Provides a summary of support settings and limitations when backing up SQL Server in Azure VMs with the Azure Backup service. Previously updated : 09/19/2024 Last updated : 10/15/2024
_*The database size limit depends on the data transfer rate that we support and
* The backup and restore operations for mirror databases and database snapshots aren't supported. * SQL Server **Failover Cluster Instance (FCI)** isn't supported. * Back up of databases with extensions in their names arenΓÇÖt supported. This is because the IIS server performs the [file extension request filtering](/iis/configuration/system.webserver/security/requestfiltering/fileextensions). However, note that we've allowlisted `.ad`, `.cs`, and `.master` that can be used in the database names. Learn more about the [database naming guidelines for Azure Backup](backup-sql-server-database-azure-vms.md#database-naming-guidelines-for-azure-backup).-
+* FIPS encryption is currently not supported with SQL backup workloads.
## Backup throughput performance
communication-services Call Ends With 410 3112 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/resources/troubleshooting/voice-video-calling/call-setup-issues/call-ends-with-410-3112.md
+
+ Title: Call setup issues - The call ends due to network issues
+
+description: Learn how to troubleshoot when the call ends with 410/3112
++++ Last updated : 09/22/2024+++++
+# The call ends with 410/3112
+The reason why call ends with 410/3112 error is the client isn't able to reach out to the other endpoint and no relay candidates are gathered.
+This 410/3112 error code can happen when the media path can't be established due to network issues, firewall restrictions, or incorrect configuration settings.
+Therefore, the peers were unable to establish a direct or relay connection.
+
+The relay candidates aren't necessary if the client is able to establish a direct connection to the other peer.
+However, when WebRTC fails to gather relay candidates, it often indicates an issue with TURN (Traversal Using Relays around NAT) server configuration or network restrictions.
+Relay candidates are crucial for establishing connections in restrictive network environments.
+
+## How to detect using the SDK
+You can learn the reason for the call ending using the following code snippet.
+```javascript
+call.on('stateChanged', () => {
+ if (call.state === 'Disconnected') {
+ if (call.callEndReason.code === 410 && call.callEndReason.subCode === 3112) {
+ // show error message
+ }
+ }
+});
+
+```
+To understand the codes and subcodes, see [Understanding calling codes and subcodes errors](../general-troubleshooting-strategies/understanding-error-codes.md).
+
+When the media path can't be established, the call terminates with code 410 and subcode 3112.
+The SDK also triggers [networkRelaysNotReachable UFD](../references/ufd/network-relays-not-reachable.md) event.
+Here's a code snippet showing how to capture the `networkRelaysNotReachable UFD` event.
+
+```javascript
+call.feature(Features.UserFacingDiagnostics).network.on('diagnosticChanged', (diagnosticInfo) => {
+ if (diagnosticInfo.diagnostic === 'networkRelaysNotReachable') {
+ if (diagnosticInfo.value === true) {
+ // show a warning message on UI
+ } else {
+ // The networkRelaysNotReachable UFD recovered, notify the user
+ }
+ }
+});
+```
+## How to analyze the issue with Log Analytics or Call Diagnostics tool
+When a user reports that they're unable to make a call, you can use the [Call Diagnostics](../../../../concepts/voice-video-calling/call-diagnostics.md) tool to analyze the reason for the failure.
+To debug user calls, you need the [call ID](../references/how-to-collect-call-info.md).
+If the user's call failed because the firewall blocked the relay connection, you can find the end code and subcode to be 410 and 3112 on the overview page of the call.
++
+Additionally, you can also find [networkRelaysNotReachable UFD](../references/ufd/network-relays-not-reachable.md) event on the call issues page.
++
+To understand the timing of user actions or events, you can check the details on the timeline page.
+In this example, the user got `networkRelaysNotReachable UFD` event at 16:41:47 and call state change event at 16:41:49.
++
+The [Call Diagnostics](../../../../concepts/voice-video-calling/call-diagnostics.md) tool gives you an overview and the necessary information for debugging a single call.
+If you want to understand how many users encounter this issue, or how often users experience the problem, you can use the [Log Analytics](../../../../concepts/analytics/logs/voice-and-video-logs.md) tool to gain the insights on this issue.
+
+For example, if you want to get the call ID that were disconnected with subcode 3112 in the last seven days, you can execute this query:
+```kusto
+ACSCallSummary
+| where ParticipantEndSubCode == 3112
+| project TimeGenerated, CorrelationId, ParticipantId, Identifier, CallType
+```
+
+You can also render a timechart to understand the daily number of calls ending with subcode 3112
+```kusto
+ACSCallSummary
+| where ParticipantEndSubCode == 3112
+| summarize count() by bin(TimeGenerated, 1d)
+| render timechart
+```
++
+The time chart only provides an overview of the users under the same ACS resource ID.
+By running more specific queries, you can identify patterns or anomalies that aren't immediately apparent from the time chart alone, helping you pinpoint the root cause of any issues more accurately.
+
+For example, if you see a spike in the number of calls ending with subcode 3112, it could be due to the high volume of calls while the occurrence ratio of the problem remained the same. Alternatively, the spike might be attributed to a particular user who retried many times and all attempts were failed with subcode 3112.
+
+In this query, we analyze the data based on the user identifiers, assuming that the app maintains the same user identifier for each individual.
+```kusto
+ACSCallSummary
+| summarize Total = count(), SuccessCount = countif(ParticipantEndSubCode == 0), SubCode3112Count = countif(ParticipantEndSubCode == 3112) by Identifier
+| where SubCode3112Count > 0
+| order by SubCode3112Count desc
+```
++
+In this example, one user had a total of 180 calls, of which 160 calls were successful and only two calls failed with subcode 3112.
+This pattern suggests a transient network issue, which may be resolved by retrying.
+On the other hand, another user had a total of six calls, all of which failed with subcode 3112.
+This consistency in subcode value indicates a likely network configuration issue for that user, where retrying is unlikely to help.
+
+## How to mitigate or resolve
+If you find a user consistently experiences 410/3112 error, you should recommend that they check their firewall settings.
+Users should follow the *Firewall Configuration* guideline mentioned in the [Network recommendations](../../../../concepts/voice-video-calling/network-requirements.md) document.
+Ensure that the user or administrator checks their Network Address Translation (NAT) settings and verifies whether their firewall policy blocks User Datagram Protocol (UDP) packets.
+The firewall settings aren't limited to the user's computer; if the user is in a corporate environment, the company's firewall may also need to be configured.
+
+Furthermore, if the application uses [custom TURN servers](../../../../tutorials/proxy-calling-support-tutorial.md),
+ensure that specified IP, port, and protocol aren't blocked by any firewall.
+
+For application, it's important to handle events from the [User Facing Diagnostics Feature](../../../../concepts/voice-video-calling/user-facing-diagnostics.md) and notify the users accordingly.
+By doing so, the user is aware of the issue and can troubleshoot their network environment.
+
+In rare cases, this error code appears randomly even if the user's firewall settings are correct.
+If the same user was previously able to connect and call successfully, this problem could be due to changes in network conditions.
+It may be a temporary issue. Try to start or join the call again.
+
+## References
+* [Network recommendations](../../../../concepts/voice-video-calling/network-requirements.md)
+* [networkRelaysNotReachable UFD](../references/ufd/network-relays-not-reachable.md)
+* [Force calling traffic to be proxied across your own server](../../../../tutorials/proxy-calling-support-tutorial.md)
+
communication-services Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/resources/troubleshooting/voice-video-calling/call-setup-issues/overview.md
Here we list several common call setup issues, along with potential causes for e
### The call setup takes too long * The user is experiencing network issues. * The browser takes a long time to acquire the stream.+
+### The call ends with specific codes/sub codes
+* The call ends with 410/3112 error due to network issues
cost-management-billing Allocate Costs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/costs/allocate-costs.md
The following items are currently unsupported by cost allocation:
- [Cost Management Power BI App](https://appsource.microsoft.com/product/power-bi/costmanagement.azurecostmanagementapp) - [Power BI Desktop connector](/power-bi/connect-data/desktop-connect-azure-cost-management)
-The [Usage Details](/rest/api/consumption/usagedetails/list) API version `2021-10-01` and later supports cost allocation data.
+The [Cost Details](/rest/api/cost-management/generate-cost-details-report/create-operation?view=rest-cost-management-2023-11-01&tabs=HTTP) API and [Exports](/rest/api/cost-management/exports/create-or-update?view=rest-cost-management-2023-11-01&tabs=HTTP) support cost allocation data. However, the [Usage Details](/rest/api/consumption/usagedetails/list) API doesn't support cost allocation data.
However, cost allocation data results might be empty if you're using an unsupported API or if you don't have any cost allocation rules.
cost-management-billing Save Share Views https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/costs/save-share-views.md
In addition to saving and opening views repeatedly or sharing them with others m
### To subscribe to scheduled alerts 1. In Cost analysis, select any chart view you want to subscribe to or create and save a new chart view.
- - Built-in views (for example, Accumulated costs, Daily costs, or Cost by service) can't be changed. If you need to change the date range, currency, amortization, or any other setting, you need to save that as a private or shared view.
+ - Built-in views (for example, Accumulated costs, Daily costs, or Cost by service) can't be changed.
+ - The currency is displayed as USD on subscribed e-mail if creating email setting by using Built-in views.
+ - If you need to change the date range, currency, amortization, or any other setting, you need to save that as a private or shared view.
1. Select **Subscribe** at the top of the page. 1. Select **+ Add** at the top of the list of alerts. 1. Specify the desired email settings and select **Save**.
cost-management-billing Direct Ea Administration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/manage/direct-ea-administration.md
If you're not an EA admin, contact your EA admin to request that they add you to
### If your enterprise administrator can't help you
-If your enterprise administrator can't assist you, create anΓÇ»[Azure support request](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest). Provide the following information:
+If your enterprise administrator can't assist you, create an [Azure support request](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest). Provide the following information:
- Enrollment number - Account details and authentication type (work, school, or Microsoft account)
cost-management-billing Mca Setup Account https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/manage/mca-setup-account.md
To complete the setup, you need access to both the new billing account and the E
3. Select **Start transition** in the last step of the setup. Once you select start transition:
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/ea-microsoft-customer-agreement-set-up-wizard.png" alt-text="Screenshot that shows the setup wizard.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/ea-microsoft-customer-agreement-set-up-wizard.png" alt-text="Screenshot that shows the setup wizard." lightbox="./media/microsoft-customer-agreement-setup-account/ea-microsoft-customer-agreement-set-up-wizard.png":::
- A billing hierarchy corresponding to your Enterprise Agreement hierarchy is created in the new billing account. For more information, see [understand changes to your billing hierarchy](#understand-changes-to-your-billing-hierarchy). - Administrators from your Enterprise Agreement enrollment are given access to the new billing account so that they continue to manage billing for your organization.
To complete the setup, you need access to both the new billing account and the E
4. You can monitor the status of the transition on the **Transition status** page. Canceled savings plans are shown in the Transition details. - If you had a savings plan that was repurchased, select the **new savings plan** link to view its details and to verify that it was created successfully.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/ea-microsoft-customer-agreement-set-up-status.png" alt-text="Screenshot that shows the transition status.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/ea-microsoft-customer-agreement-set-up-status.png" alt-text="Screenshot that shows the transition status." lightbox="./media/microsoft-customer-agreement-setup-account/ea-microsoft-customer-agreement-set-up-status.png":::
## Validate billing account setup
To complete the setup, you need access to both the new billing account and the E
2. Search for **Cost Management + Billing**.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search." lightbox="./media/microsoft-customer-agreement-setup-account/search-cmb.png":::
3. Select the billing account. The billing account type is **Microsoft Customer Agreement**. 4. Select **Azure subscriptions** from the left side.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-subscriptions-post-transition.png" alt-text="Screenshot that shows a list of subscriptions.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-subscriptions-post-transition.png" alt-text="Screenshot that shows a list of subscriptions." lightbox="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-subscriptions-post-transition.png":::
Azure subscriptions that are transitioned from your Enterprise Agreement enrollment to the new billing account are displayed on the Azure subscriptions page. If you believe any subscription is missing, transition the billing of the subscription manually in the Azure portal. For more information, see [get billing ownership of Azure subscriptions from other users](mca-request-billing-ownership.md).
Azure subscriptions that are transitioned from your Enterprise Agreement enrollm
2. Search for **Cost Management + Billing**.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search." lightbox="./media/microsoft-customer-agreement-setup-account/search-cmb.png":::
3. Select the billing account for your **Microsoft Customer Agreement**. 4. Select **Access control (IAM)** from the left side.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-ea-admins-ba-access-post-transition.png" alt-text="Screenshot that shows access of enterprise administrators listed as billing account owners post transition.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-ea-admins-ba-access-post-transition.png" alt-text="Screenshot that shows access of enterprise administrators listed as billing account owners post transition." lightbox="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-ea-admins-ba-access-post-transition.png":::
Enterprise administrators are listed as billing account owners while the enterprise administrators with read-only permissions are listed as billing account readers. If you believe the access for any enterprise administrators is missing, you can give them access in the Azure portal. For more information, see [manage billing roles in the Azure portal](understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
Enterprise administrators are listed as billing account owners while the enterpr
2. Search for **Cost Management + Billing**.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search." lightbox="./media/microsoft-customer-agreement-setup-account/search-cmb.png":::
3. Select the billing profile created for your enrollment. Depending on your access, you might need to select a billing account. From the billing account, select Billing profiles and then the billing profile. 4. Select **Access control (IAM)** from the left side.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-ea-admins-bp-access-post-transition.png" alt-text="Screenshot that shows the access of enterprise administrators listed as billing profile owners post transition.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-ea-admins-bp-access-post-transition.png" alt-text="Screenshot that shows the access of enterprise administrators listed as billing profile owners post transition." lightbox="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-ea-admins-bp-access-post-transition.png":::
Enterprise administrators are listed as billing profile owners while the enterprise administrators with read-only permissions are listed as billing profile readers. If you believe the access for any enterprise administrators is missing, you can give them access in the Azure portal. For more information, see [manage billing roles in the Azure portal](understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
Enterprise administrators are listed as billing profile owners while the enterpr
2. Search for **Cost Management + Billing**.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/search-cmb.png" alt-text="Screenshot that shows Azure portal search." lightbox="./media/microsoft-customer-agreement-setup-account/search-cmb.png":::
3. Select an invoice section. Invoice sections have the same name as their respective departments in Enterprise Agreement enrollments. Depending on your access, you might need to select a billing account. From the billing account, select **Billing profiles** and then select **Invoice sections**. From the invoice sections list, select an invoice section.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-invoice-sections-post-transition.png" alt-text="Screenshot that shows a list of invoice section post transition.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-invoice-sections-post-transition.png" alt-text="Screenshot that shows a list of invoice section post transition." lightbox="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-invoice-sections-post-transition.png":::
4. Select **Access control (IAM)** from the left side.
- :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-department-account-admins-access-post-transition.png" alt-text="Screenshot that shows access of department and account admins post transition.":::
+ :::image type="content" border="true" source="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-department-account-admins-access-post-transition.png" alt-text="Screenshot that shows access of department and account admins post transition." lightbox="./media/microsoft-customer-agreement-setup-account/microsoft-customer-agreement-department-account-admins-access-post-transition.png":::
Enterprise administrators and department administrators are listed as invoice section owners or invoice section readers while account owners in the department are listed as Azure subscription creators. Repeat the step for all invoice sections to check access for all departments in your Enterprise Agreement enrollment. Account owners that weren't part of any department get permission on an invoice section named **Default invoice section**. If you believe the access for any administrators is missing, you can give them access in the Azure portal. For more information, see [manage billing roles in the Azure portal](understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
cost-management-billing Pay By Invoice https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/manage/pay-by-invoice.md
Previously updated : 08/06/2024 Last updated : 10/15/2024
To qualify for wire transfer payments, you must:
- Have a subscription cost that exceeds a certain amount. This amount varies by service location. > [!IMPORTANT]
-> - Payment by wire transfer is available only for customers who use Azure on behalf of a company.
> - You must pay all outstanding charges before switching to payment by wire transfer.
-> - Your default payment method pays any outstanding invoice. To have a wire transfer pay an outstanding invoice, you must change your default payment method to wire transfer after you're approved.
-> - Currently, payment by wire transfer isn't supported for Azure global in China.
> - If you switch to payment by wire transfer, you can't switch back to paying by credit or debit card, except for one-time payments. > - As of September 30, 2023, Microsoft no longer accepts checks as a payment method.
cost-management-billing Azure Openai https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/reservations/azure-openai.md
For example, assume that your total consumption of provisioned throughput units
## Buy a Microsoft Azure OpenAI reservation
-When you by a reservation, the current UTC date and time are used to record the transaction.
+When you buy a reservation, the current UTC date and time are used to record the transaction.
To buy an Azure OpenAI reservation, follow these steps:
cost-management-billing Prepare Buy Reservation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/reservations/prepare-buy-reservation.md
Resources that run in a subscription with other offer types don't receive the re
## Purchase reservations
-When you by a reservation, the current UTC date and time are used to record the transaction.
+When you buy a reservation, the current UTC date and time are used to record the transaction.
You can purchase reservations from Azure portal, APIs, PowerShell, CLI. Read the following articles that apply to you when you're ready to make a reservation purchase:
data-factory Connector Deprecation Plan https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-deprecation-plan.md
Previously updated : 10/11/2024 Last updated : 10/15/2024 # Planned connector deprecations for Azure Data Factory
This article describes future deprecations for some connectors of Azure Data Fac
| [Google BigQuery (legacy)](connector-google-bigquery-legacy.md)  | [Link](connector-google-bigquery.md#upgrade-the-google-bigquery-linked-service) |End of support announced and new version available | October 31, 2024 | / | | [MariaDB (legacy driver version)](connector-mariadb.md)  | [Link](connector-mariadb.md#upgrade-the-mariadb-driver-version) | End of support announced and new version available | October 31, 2024 | /| | [MySQL (legacy driver version)](connector-mysql.md)  | [Link](connector-mysql.md#upgrade-the-mysql-driver-version) | End of support announced and new version available | October 31, 2024| /|
-| [Salesforce (legacy)](connector-salesforce-legacy.md)   | [Link](connector-salesforce.md#upgrade-the-salesforce-linked-service) | End of support announced and new version available | October 11, 2024 | /|
-| [Salesforce Service Cloud (legacy)](connector-salesforce-service-cloud-legacy.md)   | [Link](connector-salesforce-service-cloud.md#upgrade-the-salesforce-service-cloud-linked-service) | End of support announced and new version available | October 11, 2024 |/ |
+| [Salesforce (legacy)](connector-salesforce-legacy.md)   | [Link](connector-salesforce.md#upgrade-the-salesforce-linked-service) | End of support announced and new version available | To be determined | /|
+| [Salesforce Service Cloud (legacy)](connector-salesforce-service-cloud-legacy.md)   | [Link](connector-salesforce-service-cloud.md#upgrade-the-salesforce-service-cloud-linked-service) | End of support announced and new version available | To be determined |/ |
| [PostgreSQL (legacy)](connector-postgresql-legacy.md)   | [Link](connector-postgresql.md#upgrade-the-postgresql-linked-service)| End of support announced and new version available |October 31, 2024 | / | | [ServiceNow (legacy)](connector-servicenow-legacy.md)   | [Link](connector-servicenow.md#upgrade-your-servicenow-linked-service) | End of support announced and new version available | December 31, 2024 | / |
-| [Snowflake (legacy)](connector-snowflake-legacy.md)   | [Link](connector-snowflake.md#upgrade-the-snowflake-linked-service) | End of support announced and new version available | October 31, 2024 | / |
+| [Snowflake (legacy)](connector-snowflake-legacy.md)   | [Link](connector-snowflake.md#upgrade-the-snowflake-linked-service) | End of support announced and new version available | To be determined | / |
| [Azure Database for MariaDB](connector-azure-database-for-mariadb.md) |/ | End of support announced |December 31, 2024 | December 31, 2024 | | [Concur (Preview)](connector-concur.md) |/ | End of support announced | December 31, 2024 | December 31, 2024 | | [Couchbase (Preview)](connector-couchbase.md) |/ | End of support announced | December 31, 2024 | December 31, 2024 |
data-factory Connector Salesforce Legacy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce-legacy.md
Previously updated : 05/11/2024 Last updated : 10/15/2024 # Copy data from and to Salesforce using Azure Data Factory or Azure Synapse Analytics (legacy)
Last updated 05/11/2024
This article outlines how to use Copy Activity in Azure Data Factory and Azure Synapse pipelines to copy data from and to Salesforce. It builds on the [Copy Activity overview](copy-activity-overview.md) article that presents a general overview of the copy activity. >[!IMPORTANT]
->The new Salesforce connector provides improved native Salesforce support. If you are using the legacy Salesforce connector in your solution, please [upgrade your Salesforce connector](connector-salesforce.md#upgrade-the-salesforce-linked-service) before **October 11, 2024**. Refer to this [section](connector-salesforce.md#differences-between-salesforce-and-salesforce-legacy) for details on the difference between the legacy and latest version.
+>The new Salesforce connector provides improved native Salesforce support. If you are using the legacy Salesforce connector in your solution, you are recommended to [upgrade your Salesforce connector](connector-salesforce.md#upgrade-the-salesforce-linked-service) at your earliest convenience. Refer to this [section](connector-salesforce.md#differences-between-salesforce-and-salesforce-legacy) for details on the difference between the legacy and latest version.
## Supported capabilities
data-factory Connector Salesforce Service Cloud Legacy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce-service-cloud-legacy.md
Previously updated : 05/11/2024 Last updated : 10/15/2024 # Copy data from and to Salesforce Service Cloud using Azure Data Factory or Synapse Analytics (legacy)
Last updated 05/11/2024
This article outlines how to use Copy Activity in Azure Data Factory and Synapse Analytics pipelines to copy data from and to Salesforce Service Cloud. It builds on the [Copy Activity overview](copy-activity-overview.md) article that presents a general overview of the copy activity. >[!IMPORTANT]
->The new Salesforce Service Cloud connector provides improved native Salesforce Service Cloud support. If you are using the legacy Salesforce Service Cloud connector in your solution, please [upgrade your Salesforce Service Cloud connector](connector-salesforce-service-cloud.md#upgrade-the-salesforce-service-cloud-linked-service) before **October 11, 2024**. Refer to this [section](connector-salesforce-service-cloud.md#differences-between-salesforce-service-cloud-and-salesforce-service-cloud-legacy) for details on the difference between the legacy and latest version.
+>The new Salesforce Service Cloud connector provides improved native Salesforce Service Cloud support. If you are using the legacy Salesforce Service Cloud connector in your solution, you are recommended to [upgrade your Salesforce Service Cloud connector](connector-salesforce-service-cloud.md#upgrade-the-salesforce-service-cloud-linked-service) at your earliest convenience. Refer to this [section](connector-salesforce-service-cloud.md#differences-between-salesforce-service-cloud-and-salesforce-service-cloud-legacy) for details on the difference between the legacy and latest version.
## Supported capabilities
data-factory Connector Salesforce Service Cloud https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce-service-cloud.md
Previously updated : 10/09/2024 Last updated : 10/15/2024 # Copy data from and to Salesforce Service Cloud using Azure Data Factory or Azure Synapse Analytics
Last updated 10/09/2024
This article outlines how to use Copy Activity in Azure Data Factory and Azure Synapse pipelines to copy data from and to Salesforce Service Cloud. It builds on the [Copy Activity overview](copy-activity-overview.md) article that presents a general overview of the copy activity. >[!IMPORTANT]
->The new Salesforce Service Cloud connector provides improved native Salesforce Service Cloud support. If you are using the legacy Salesforce Service Cloud connector in your solution, please [upgrade your Salesforce Service Cloud connector](#upgrade-the-salesforce-service-cloud-linked-service) before **October 11, 2024**. Refer to this [section](#differences-between-salesforce-service-cloud-and-salesforce-service-cloud-legacy) for details on the difference between the legacy and latest version.
+>The new Salesforce Service Cloud connector provides improved native Salesforce Service Cloud support. If you are using the legacy Salesforce Service Cloud connector in your solution, you are recommended to [upgrade your Salesforce Service Cloud connector](#upgrade-the-salesforce-service-cloud-linked-service) at your earliest convenience. Refer to this [section](#differences-between-salesforce-service-cloud-and-salesforce-service-cloud-legacy) for details on the difference between the legacy and latest version.
## Supported capabilities
data-factory Connector Salesforce https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce.md
Previously updated : 10/09/2024 Last updated : 10/15/2024 # Copy data from and to Salesforce using Azure Data Factory or Azure Synapse Analytics
Last updated 10/09/2024
This article outlines how to use Copy Activity in Azure Data Factory and Azure Synapse pipelines to copy data from and to Salesforce. It builds on the [Copy Activity overview](copy-activity-overview.md) article that presents a general overview of the copy activity. >[!IMPORTANT]
->The new Salesforce connector provides improved native Salesforce support. If you are using the legacy Salesforce connector in your solution, please [upgrade your Salesforce connector](#upgrade-the-salesforce-linked-service) before **October 11, 2024**. Refer to this [section](#differences-between-salesforce-and-salesforce-legacy) for details on the difference between the legacy and latest version.
+>The new Salesforce connector provides improved native Salesforce support. If you are using the legacy Salesforce connector in your solution, you are recommended to [upgrade your Salesforce connector](#upgrade-the-salesforce-linked-service) at your earliest convenience. Refer to this [section](#differences-between-salesforce-and-salesforce-legacy) for details on the difference between the legacy and latest version.
## Supported capabilities
data-factory Connector Snowflake Legacy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-snowflake-legacy.md
Previously updated : 07/02/2024 Last updated : 10/15/2024 # Copy and transform data in Snowflake using Azure Data Factory or Azure Synapse Analytics (legacy)
Last updated 07/02/2024
This article outlines how to use the Copy activity in Azure Data Factory and Azure Synapse pipelines to copy data from and to Snowflake, and use Data Flow to transform data in Snowflake. For more information, see the introductory article for [Data Factory](introduction.md) or [Azure Synapse Analytics](../synapse-analytics/overview-what-is.md). >[!IMPORTANT]
->The new Snowflake connector provides improved native Snowflake support. If you are using the legacy Snowflake connector in your solution, please [upgrade your Snowflake connector](connector-snowflake.md#upgrade-the-snowflake-linked-service) before **October 31, 2024**. Refer to this [section](connector-snowflake.md#differences-between-snowflake-and-snowflake-legacy) for details on the difference between the legacy and latest version.
+>The new Snowflake connector provides improved native Snowflake support. If you are using the legacy Snowflake connector in your solution, you are recommended to [upgrade your Snowflake connector](connector-snowflake.md#upgrade-the-snowflake-linked-service) at your earliest convenience. Refer to this [section](connector-snowflake.md#differences-between-snowflake-and-snowflake-legacy) for details on the difference between the legacy and latest version.
## Supported capabilities
data-factory Connector Snowflake https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-snowflake.md
Previously updated : 10/09/2024 Last updated : 10/15/2024 ai-usage: ai-assisted
ai-usage: ai-assisted
This article outlines how to use the Copy activity in Azure Data Factory and Azure Synapse pipelines to copy data from and to Snowflake, and use Data Flow to transform data in Snowflake. For more information, see the introductory article for [Data Factory](introduction.md) or [Azure Synapse Analytics](../synapse-analytics/overview-what-is.md). >[!IMPORTANT]
->The new Snowflake connector provides improved native Snowflake support. If you are using the legacy Snowflake connector in your solution, please [upgrade your Snowflake connector](#upgrade-the-snowflake-linked-service) before **October 31, 2024**. Refer to this [section](#differences-between-snowflake-and-snowflake-legacy) for details on the difference between the legacy and latest version.
+>The new Snowflake connector provides improved native Snowflake support. If you are using the legacy Snowflake connector in your solution, you are recommended to [upgrade your Snowflake connector](#upgrade-the-snowflake-linked-service) at your earliest convenience. Refer to this [section](#differences-between-snowflake-and-snowflake-legacy) for details on the difference between the legacy and latest version.
## Supported capabilities
defender-for-iot How To Create Data Mining Queries https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-iot/organizations/how-to-create-data-mining-queries.md
Title: Create data mining queries and reports in Defender for IoT description: Learn how to create granular reports about network devices. Previously updated : 08/28/2023 Last updated : 10/14/2024
Each data mining report on an OT sensor has the following options for managing y
| :::image type="icon" source="media/how-to-generate-reports/manage-icon.png" border="false"::: **Manage report** | Update the values of an existing custom data mining report. This option is disabled for Recommended reports. | | :::image type="icon" source="media/how-to-generate-reports/edit-icon.png" border="false"::: **Edit mode** | Select to remove specific results from the saved report. |
-For example, select **Manage report** to update the data your report includes using the same fields as when you'd originally [created the report](#create-an-ot-sensor-custom-data-mining-report):
-
+For example, select **Manage report** to update the data your report includes by using the same fields.
## View data mining reports for multiple sensors
defender-for-iot How To Troubleshoot Sensor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-iot/organizations/how-to-troubleshoot-sensor.md
Title: Troubleshoot the sensor | Microsoft Defender for IoT description: Learn how to troubleshoot your Microsoft Defender for IoT OT sensor. Previously updated : 12/19/2023 Last updated : 10/14/2024 #CustomerIntent: As a Defender for IoT sensor admin, I want to know how to troubleshoot sensor issues so that I can get it back online quickly.
Verify that all the input interfaces configured during the installation process
1. Validate that the required input interfaces appear. For example, if two quad Copper NICs are installed, there should be 10 interfaces in the list.
- :::image type="content" source="media/tutorial-install-components/interface-list-screen.png" alt-text="Screenshot that shows the list of interfaces.":::
- Verify that you can access the console web GUI: **To check that management has access to the UI**:
defender-for-iot Tutorial Cyberark https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-iot/organizations/tutorial-cyberark.md
Title: Integrate CyberArk with Microsoft Defender for IoT description: In this tutorial, you learn how to integrate Microsoft Defender for IoT with CyberArk. Previously updated : 02/08/2022 Last updated : 10/14/2024
Whenever the Defender for IoT platform identifies remote sessions that haven't b
1. From the list of alerts, select the alert titled **Unauthorized Remote Session**.
- :::image type="content" source="media/tutorial-cyberark/unauthorized.png" alt-text="The Unauthorized Remote Session alert." lightbox="media/tutorial-cyberark/unauthorized.png":::
- ### Event timeline Whenever PSM authorizes a remote connection, it's visible in the Defender for IoT Event Timeline page. The Event Timeline page shows a timeline of all alerts and notifications.
defender-for-iot Tutorial Fortinet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-iot/organizations/tutorial-fortinet.md
Title: Integrate Fortinet with Microsoft Defender for IoT description: In this article, you learn how to integrate Microsoft Defender for IoT with Fortinet. Previously updated : 01/01/2023 Last updated : 10/14/2024
Forwarding alert rules run only on alerts triggered after the forwarding rule is
You can set policies to automatically block malicious sources in the FortiGate firewall, using alerts in Defender for IoT.
-For example, the following alert can block the malicious source:
-- **To set a FortiGate firewall rule that blocks a malicious source**: 1. In FortiGate, [create an API key](#create-an-api-key-in-fortinet).
defender-for-iot Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-iot/organizations/whats-new.md
Title: What's new in Microsoft Defender for IoT description: This article describes new features available in Microsoft Defender for IoT, including both OT and Enterprise IoT networks, and both on-premises and in the Azure portal. Previously updated : 10/11/2024 Last updated : 10/14/2024
These features are now Generally Available (GA). Updates include the general loo
- The **Device inventory** page now includes detailed device pages. Select a device in the table and then select **View full details** on the right.
- :::image type="content" source="media/release-notes/device-inventory-details.png" alt-text="Screenshot of the View full details button." lightbox="media/release-notes/device-inventory-details.png":::
- - Properties updated from the sensor's inventory are now automatically updated in the cloud device inventory. - The device details pages, accessed either from the **Device map** or **Device inventory** pages, is shown as read only. To modify device properties, select **Edit properties** on the bottom-left.
energy-data-services Concepts Csv Parser Ingestion https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/concepts-csv-parser-ingestion.md
Title: Microsoft Azure Data Manager for Energy csv parser ingestion workflow con
description: Learn how to use CSV parser ingestion. -+ Last updated 02/10/2023
energy-data-services Concepts Ddms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/concepts-ddms.md
Title: Domain data management services concepts
description: Learn how to use Domain Data Management Services -+ Last updated 08/18/2022
energy-data-services Concepts Index And Search https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/concepts-index-and-search.md
Title: Microsoft Azure Data Manager for Energy - index and search workflow conce
description: Learn how to use indexing and search workflows -+ Last updated 02/10/2023
energy-data-services Concepts Manifest Ingestion https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/concepts-manifest-ingestion.md
Title: Microsoft Azure Data Manager for Energy manifest ingestion concepts
description: This article describes manifest ingestion concepts -+ Last updated 08/18/2022
energy-data-services Concepts Reference Data Values https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/concepts-reference-data-values.md
Title: Reference Data Value Syncing in Microsoft Azure Data Manager for Energy
description: This article describes Reference Values and syncing of Reference Values with Azure Data Manager for Energy data partitions. -+ Last updated 08/28/2024
energy-data-services Concepts Tier Details https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/concepts-tier-details.md
Title: Microsoft Azure Data Manager for Energy tier concepts
description: This article describes tier concepts -+ Last updated 07/11/2023
energy-data-services How To Add More Data Partitions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-add-more-data-partitions.md
Title: How to manage partitions
description: This is a how-to article on managing data partitions using the Microsoft Azure Data Manager for Energy instance UI. -+ Last updated 07/05/2022
energy-data-services How To Convert Segy To Ovds https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-convert-segy-to-ovds.md
Title: Microsoft Azure Data Manager for Energy Preview - How to convert a segy t
description: This article explains how to convert a SGY file to oVDS file format -+ Last updated 09/13/2023
energy-data-services How To Convert Segy To Zgy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-convert-segy-to-zgy.md
Title: Microsoft Azure Data Manager for Energy Preview - How to convert segy to
description: This article describes how to convert a SEG-Y file to a ZGY file -+ Last updated 09/13/2023
energy-data-services How To Create Lockbox https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-create-lockbox.md
Title: Use Lockbox for Microsoft Azure Data Manager for Energy
description: Learn how to use Customer Lockbox as an interface to review and approve or reject access requests. -+ Last updated 12/21/2022
energy-data-services How To Deploy Gcz https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-deploy-gcz.md
Title: Deploy Geospatial Consumption Zone on top of Azure Data Manager for Energy description: Learn how to deploy Geospatial Consumption Zone on top of your Azure Data Manager for Energy instance.-+
energy-data-services How To Deploy Osdu Admin Ui https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-deploy-osdu-admin-ui.md
Title: Deploy OSDU Admin UI on top of Azure Data Manager for Energy description: Learn how to deploy the OSDU Admin UI on top of your Azure Data Manager for Energy instance.-+
energy-data-services How To Enable Cors https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-enable-cors.md
Title: How to enable CORS - Azure Data Manager for Energy
description: Guide on CORS in Azure data manager for Energy and how to set up CORS -+ Last updated 02/28/2023
energy-data-services How To Enable External Data Sources https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-enable-external-data-sources.md
Title: "Microsoft Azure Data Manager for Energy - How to enable External Data So
description: "This article describes how to enable external data sources in Azure Data Manager for Energy." -+ Last updated 03/14/2024
energy-data-services How To Integrate Airflow Logs With Azure Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-integrate-airflow-logs-with-azure-monitor.md
Title: Integrate airflow logs with Azure Monitor - Microsoft Azure Data Manager
description: This is a how-to article on how to start collecting Airflow Task logs in Azure Monitor, archiving them to a storage account, and querying them in Log Analytics workspace. -+ Last updated 08/18/2022
energy-data-services How To Integrate Elastic Logs With Azure Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-integrate-elastic-logs-with-azure-monitor.md
Title: Integrate elastic logs with Azure Monitor - Microsoft Azure Data Manager
description: This is a how-to article on how to start collecting ElasticSearch logs in Azure Monitor, archiving them to a storage account, and querying them in Log Analytics workspace. -+ Last updated 08/18/2022
energy-data-services How To Integrate Osdu Service Logs With Azure Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-integrate-osdu-service-logs-with-azure-monitor.md
Title: Integrate OSDU Service Logs with Azure Monitor - Microsoft Azure Data Man
description: This how-to article shows you how to integrate OSDU service logs with Azure Monitor. This feature helps you better troubleshoot, debug, & monitor the OSDU services. -+ Last updated 04/19/2023
energy-data-services How To Manage Audit Logs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-manage-audit-logs.md
Title: How to manage audit logs for Microsoft Azure Data Manager for Energy
description: Learn how to use audit logs on Azure Data Manager for Energy -+ Last updated 04/11/2023
energy-data-services How To Manage Data Security And Encryption https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-manage-data-security-and-encryption.md
Title: Data security and encryption in Microsoft Azure Data Manager for Energy
description: Guide on security in Azure Data Manager for Energy and how to set up customer managed keys on Azure Data Manager for Energy -+ Last updated 10/06/2022
energy-data-services How To Manage Legal Tags https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-manage-legal-tags.md
Title: How to manage legal tags in Microsoft Azure Data Manager for Energy
description: This article describes how to manage legal tags in Azure Data Manager for Energy -+ Last updated 02/20/2023
energy-data-services How To Register External Data Sources https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-register-external-data-sources.md
Title: "Microsoft Azure Data Manager for Energy - How to register external data
description: "This article describes how to register external data sources with Azure Data Manager for Energy." -+ Last updated 03/14/2024
energy-data-services How To Secure Apis https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-secure-apis.md
Title: Publish Microsoft Azure Data Manager for Energy APIs to a secured API gat
description: Learn how to publish Azure Data Manager for Energy APIs to Azure API Management. -+ Last updated 04/29/2024
energy-data-services How To Set Up Private Links https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-set-up-private-links.md
Title: Create a private endpoint for Microsoft Azure Data Manager for Energy
description: Learn how to set up private endpoints for Azure Data Manager for Energy by using Azure Private Link. -+ Last updated 09/29/2022
energy-data-services How To Upload Large Files Using File Service https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-upload-large-files-using-file-service.md
Title: How to upload large files using file service API in Microsoft Azure Data
description: This article describes how to upload large files using File service API in Microsoft Azure Data Manager for Energy -+ Last updated 06/13/2023
energy-data-services How To Use Managed Identity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/how-to-use-managed-identity.md
Title: Use managed identities for Microsoft Azure Data Manager for Energy on Azu
description: Learn how to use a managed identity to access Azure Data Manager for Energy from other Azure services. -+ Last updated 01/04/2023
energy-data-services Osdu Services On Adme https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/osdu-services-on-adme.md
Title: OSDU Services Available on Azure Data Manager for Energy description: This article provides an overview of the OSDU services available on Azure Data Manager for Energy and the OSDU services that are exclusively available in the community version. -+ Last updated 08/30/2024
energy-data-services Overview Ddms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/overview-ddms.md
Last updated 09/01/2022-+
energy-data-services Overview Microsoft Energy Data Services https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/overview-microsoft-energy-data-services.md
Title: What is Microsoft Azure Data Manager for Energy? description: This article provides an overview of Azure Data Manager for Energy -+
energy-data-services Quickstart Create Microsoft Energy Data Services Instance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/quickstart-create-microsoft-energy-data-services-instance.md
Title: Create a Microsoft Azure Data Manager for Energy instance
description: Quickly create an instance of the Azure Data Manager for Energy service by using the Azure portal. -+ Last updated 06/28/2023
energy-data-services Release Notes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/release-notes.md
Title: Release notes for Microsoft Azure Data Manager for Energy
description: This article provides release notes of Azure Data Manager for Energy releases, improvements, bug fixes, and known issues. -+ Last updated 09/20/2022
energy-data-services Resources Partner Solutions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/resources-partner-solutions.md
Title: Microsoft Azure Data Manager for Energy partners description: Lists of third-party Azure Data Manager for Energy partners solutions.-+ Last updated 09/24/2022
energy-data-services Troubleshoot Manifest Ingestion https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/troubleshoot-manifest-ingestion.md
Title: Troubleshoot manifest ingestion in Microsoft Azure Data Manager for Energ
description: Find out how to troubleshoot manifest ingestion by using Airflow task logs. -+ Last updated 02/06/2023
energy-data-services Tutorial Csv Ingestion https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-csv-ingestion.md
description: This tutorial shows you sample steps for performing CSV parser ingestion. -+ Last updated 09/19/2022
energy-data-services Tutorial Manifest Ingestion https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-manifest-ingestion.md
description: This tutorial shows you sample steps for performing manifest ingestion. -+ Last updated 08/18/2022
energy-data-services Tutorial Petrel Ddms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-petrel-ddms.md
description: Learn how to work with Petrel data records in your Azure Data Manager for Energy instance by using Petrel Domain Data Management Services (DDMS) APIs in Postman. -+ Last updated 2/07/2023
energy-data-services Tutorial Seismic Ddms Sdutil https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-seismic-ddms-sdutil.md
description: This tutorial shows you how to set up and use sdutil, a command-line tool for interacting with Seismic Store. -+ Last updated 09/09/2022
energy-data-services Tutorial Seismic Ddms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-seismic-ddms.md
description: This tutorial shows sample steps for interacting with the Seismic DDMS APIs in Azure Data Manager for Energy. -+ Last updated 3/16/2022
energy-data-services Tutorial Well Delivery Ddms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-well-delivery-ddms.md
Title: "Tutorial: Work with well data records by using Well Delivery DDMS APIs"
description: Learn how to work with well data records in your Azure Data Manager for Energy instance by using Well Delivery Domain Data Management Services (DDMS) APIs in Postman. -+ Last updated 07/28/2022
energy-data-services Tutorial Wellbore Ddms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/energy-data-services/tutorial-wellbore-ddms.md
description: Learn how to work with well data records in your Azure Data Manager for Energy instance by using Wellbore Domain Data Management Services (DDMS) APIs in Postman. -+ Last updated 09/07/2022
firewall Monitor Firewall Reference https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/firewall/monitor-firewall-reference.md
The *AZFW Latency Probe* metric measures the overall or average latency of Azure
[!INCLUDE [Microsoft.Network/azureFirewalls](~/reusable-content/ce-skilling/azure/includes/azure-monitor/reference/logs/microsoft-network-azurefirewalls-logs-include.md)]
-Azure Firewall has two new diagnostics logs you can use to help monitor your firewall:
-
+Azure Firewall has two new diagnostic logs that can help monitor your firewall, but these logs currently do not show application rule details.
- Top flows - Flow trace ++ ## Top flows The top flows log is known in the industry as *fat flow log* and in the preceding table as *Azure Firewall Fat Flow Log*. The top flows log shows the top connections that are contributing to the highest throughput through the firewall.
frontdoor Migrate Tier Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/frontdoor/migrate-tier-powershell.md
Previously updated : 06/05/2023 Last updated : 10/15/2024
Your new Front Door profile with the configuration has been successfully created
ProvisioningState : Succeeded Sku : Classic_AzureFrontDoor Tags :
- Id : /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF
+ Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF
Name : myFrontDoorWAF Type : ```
Your new Front Door profile with the configuration has been successfully created
```powershell-interactive
- $wafMapping = New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject -MigratedFromId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF -MigratedToId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myFrontDoorWAF
+ $wafMapping = New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject -MigratedFromId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF -MigratedToId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myFrontDoorWAF
1. Run the [Start-AzFrontDoorCdnProfilePrepareMigration](/powershell/module/az.cdn/start-azfrontdoorcdnprofilepreparemigration) command to prepare for migration. Replace the values for the resource group name, resource ID, profile name with your own values. For *SkuName* use either **Standard_AzureFrontDoor** or **Premium_AzureFrontDoor**. The *SkuName* is based on the output from the [Test-AzFrontDoorCdnProfileMigration](/powershell/module/az.cdn/test-azfrontdoorcdnprofilemigration) command.
Run the [Start-AzFrontDoorCdnProfilePrepareMigration](/powershell/module/az.cdn/
For *IdentityType* use **SystemAssigned**. ```powershell-interactive
-Start-AzFrontDoorCdnProfilePrepareMigration -ResourceGroupName myAFDResourceGroup -ClassicResourceReferenceId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/Frontdoors/myAzureFrontDoorClassic -ProfileName myAzureFrontDoor -SkuName Premium_AzureFrontDoor -IdentityType SystemAssigned
+Start-AzFrontDoorCdnProfilePrepareMigration -ResourceGroupName myAFDResourceGroup -ClassicResourceReferenceId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/Frontdoors/myAzureFrontDoorClassic -ProfileName myAzureFrontDoor -SkuName Premium_AzureFrontDoor -IdentityType SystemAssigned
``` ### User assigned
Start-AzFrontDoorCdnProfilePrepareMigration -ResourceGroupName myAFDResourceGrou
The output looks similar to the following: ```
- /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity
+ /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity
``` 1. For IdentityType use UserAssigned and for IdentityUserAssignedIdentity,* use the resource ID from the previous step.
Start-AzFrontDoorCdnProfilePrepareMigration -ResourceGroupName myAFDResourceGrou
* `<frontdoorClassicName>`: The name of the Front Door (classic) profile. ```powershell-interactive
- Start-AzFrontDoorCdnProfilePrepareMigration -ResourceGroupName <resourceGroupName> -ClassicResourceReferenceId /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.Network/frontdoors/<frontdoorClassicName> -ProfileName myAzureFrontDoor -SkuName Premium_AzureFrontDoor -IdentityType UserAssigned -IdentityUserAssignedIdentity @{"/subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity" = @{}}
+ Start-AzFrontDoorCdnProfilePrepareMigration -ResourceGroupName <resourceGroupName> -ClassicResourceReferenceId /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.Network/frontdoors/<frontdoorClassicName> -ProfileName myAzureFrontDoor -SkuName Premium_AzureFrontDoor -IdentityType UserAssigned -IdentityUserAssignedIdentity @{"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity" = @{}}
``` The output looks similar to the following:
This example shows how to migrate a Front Door profile with multiple WAF policie
ProvisioningState : Succeeded Sku : Classic_AzureFrontDoor Tags :
- Id : /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF
+ Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF
Name : myFrontDoorWAF Type : ```
This example shows how to migrate a Front Door profile with multiple WAF policie
1. Run the [New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject](/powershell/module/az.cdn/new-azfrontdoorcdnmigrationwebapplicationfirewallmappingobject) command to create an in-memory object for WAF policy migration. Use the WAF ID in the last step for `MigratedFromId`. To use an existing WAF policy, replace the value for `MigratedToId` with a resource ID of a WAF policy that matches the Front Door tier you're migrating to. If you're creating a new WAF policy copy, you can change the name of the WAF policy in the resource ID. ```powershell-interactive
- $wafMapping1 = New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject -MigratedFromId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF1 -MigratedToId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myFrontDoorWAF1
+ $wafMapping1 = New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject -MigratedFromId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF1 -MigratedToId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myFrontDoorWAF1
- $wafMapping2 = New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject -MigratedFromId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF2 -MigratedToId /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myFrontDoorWAF2
+ $wafMapping2 = New-AzFrontDoorCdnMigrationWebApplicationFirewallMappingObject -MigratedFromId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myClassicFrontDoorWAF2 -MigratedToId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/myFrontDoorWAF2
``` 1. Specify both managed identity types in a variable.
This example shows how to migrate a Front Door profile with multiple WAF policie
The output looks similar to the following: ```
- /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity1
- /subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourcegroups/myAFDResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity2
+ /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity1
+ /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myAFDResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity2
``` 1. Specify the user assigned identity resource ID in a variable. ```powershell-interactive $userInfo = @{
- "subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity1" = @{}}
- "subscriptions/abcdef12-3456-7890-abcd-ef1234567890/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity2" = @{}}
+ "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity1" = @{}}
+ "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/afduseridentity2" = @{}}
} ```
governance Query Language https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/governance/resource-graph/concepts/query-language.md
Here's the list of KQL tabular operators supported by Resource Graph with specif
|[join](/azure/data-explorer/kusto/query/joinoperator) |[Key vault with subscription name](../samples/advanced.md#key-vaults-with-subscription-name) |Join flavors supported: [innerunique](/azure/data-explorer/kusto/query/joinoperator#default-join-flavor), [inner](/azure/data-explorer/kusto/query/joinoperator#inner-join), [leftouter](/azure/data-explorer/kusto/query/joinoperator#left-outer-join), and [fullouter](/azure/data-explorer/kusto/query/join-fullouter). Limit of three `join` in a single query, one of which might be a cross-table `join`. If all cross-table `join` use is between _Resource_ and _ResourceContainers_, then three cross-table `join` are allowed. Custom join strategies, such as broadcast join, aren't allowed. For which tables can use `join`, go to [Resource Graph tables](#resource-graph-tables). | |[limit](/azure/data-explorer/kusto/query/limitoperator) |[List all public IP addresses](../samples/starter.md#list-all-public-ip-addresses) |Synonym of `take`. Doesn't work with [Skip](./work-with-data.md#skipping-records). | |[mvexpand](/azure/data-explorer/kusto/query/mvexpandoperator) | | Legacy operator, use `mv-expand` instead. _RowLimit_ max of 2,000. The default is 128. |
-|[mv-expand](/azure/data-explorer/kusto/query/mvexpandoperator) |[List Azure Cosmos DB with specific write locations](../samples/advanced.md#list-azure-cosmos-db-with-specific-write-locations) |_RowLimit_ max of 2,000. The default is 128. Limit of 2 `mv-expand` in a single query.|
+|[mv-expand](/azure/data-explorer/kusto/query/mvexpandoperator) |[List Azure Cosmos DB with specific write locations](../samples/advanced.md#list-azure-cosmos-db-with-specific-write-locations) |_RowLimit_ max of 2,000. The default is 128. Limit of 3 `mv-expand` in a single query.|
|[order](/azure/data-explorer/kusto/query/orderoperator) |[List resources sorted by name](../samples/starter.md#list-resources-sorted-by-name) |Synonym of `sort` | |[parse](/azure/data-explorer/kusto/query/parseoperator) |[Get virtual networks and subnets of network interfaces](../samples/advanced.md#get-virtual-networks-and-subnets-of-network-interfaces) |It's optimal to access properties directly if they exist instead of using `parse`. | |[project](/azure/data-explorer/kusto/query/projectoperator) |[List resources sorted by name](../samples/starter.md#list-resources-sorted-by-name) | |
governance Advanced https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/governance/resource-graph/samples/advanced.md
Last updated 06/15/2022
-+ # Advanced Resource Graph query samples
governance Starter https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/governance/resource-graph/samples/starter.md
Title: Starter query samples description: Use Azure Resource Graph to run some starter queries, including counting resources, ordering resources, or by a specific tag.-+ Last updated 08/31/2023
hdinsight Hdinsight Hadoop Oms Log Analytics Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/hdinsight-hadoop-oms-log-analytics-tutorial.md
Title: Use Azure Monitor logs to monitor Azure HDInsight clusters
-description: Learn how to use Azure Monitor logs to monitor jobs running in an HDInsight cluster.
+description: Learn how to use Azure Monitor logs to monitor jobs running in a HDInsight cluster.
Previously updated : 09/06/2024 Last updated : 10/15/2024+ # Use Azure Monitor logs to monitor HDInsight clusters
-Learn how to enable Azure Monitor logs to monitor Hadoop cluster operations in HDInsight. And how to add an HDInsight monitoring solution.
+Learn how to enable Azure Monitor logs to monitor Hadoop cluster operations in HDInsight. And how to add a HDInsight monitoring solution.
[Azure Monitor logs](/azure/azure-monitor/logs/log-query-overview) is an Azure Monitor service that monitors your cloud and on-premises environments. The monitoring is to maintain their availability and performance. It collects data generated by resources in your cloud, on-premises environments and from other monitoring tools. The data is used to provide analysis across multiple sources.
If you don't have an Azure subscription, [create a free account](https://azure.m
* Kafka * Spark
- For the instructions on how to create an HDInsight cluster, see [Get started with Azure HDInsight](hadoop/apache-hadoop-linux-tutorial-get-started.md).
+ For the instructions on how to create a HDInsight cluster, see [Get started with Azure HDInsight](hadoop/apache-hadoop-linux-tutorial-get-started.md).
-* If using PowerShell, you'll need the [Az Module](/powershell/azure/). Ensure you have the latest version. If necessary, run `Update-Module -Name Az`.
+* If using PowerShell, you need the [Az Module](/powershell/azure/). Ensure you have the latest version. If necessary, run `Update-Module -Name Az`.
* If wanting to use Azure CLI and you haven't yet installed it, see [Install the Azure CLI](/cli/azure/install-azure-cli).
For the log table mappings from the classic Azure Monitor integration to the new
* Kafka * Spark
- For the instructions on how to create an HDInsight cluster, see [Get started with Azure HDInsight](hadoop/apache-hadoop-linux-tutorial-get-started.md).
+ For the instructions on how to create a HDInsight cluster, see [Get started with Azure HDInsight](hadoop/apache-hadoop-linux-tutorial-get-started.md).
* If using PowerShell, you'll need the [Az Module](/powershell/azure/). Ensure you have the latest version. If necessary, run `Update-Module -Name Az`.
hdinsight Log Analytics Migration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/log-analytics-migration.md
Previously updated : 09/06/2024 Last updated : 10/15/2024+ # Log Analytics migration guide for Azure HDInsight clusters
hdinsight Monitor Hdinsight https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/monitor-hdinsight.md
Title: Monitor Azure HDInsight description: Start here to learn how to monitor Azure HDInsight. Previously updated : 03/21/2024 Last updated : 10/15/2024
For information about how to use Ambari for monitoring, see the following articl
You can also monitor your HDInsight clusters directly in Azure. A new Azure Monitor integration, now in preview, lets you access **Insights**, **Logs**, and **Workbooks** from your HDInsight cluster without needing to invoke the Log Analytics workspace.
-To use the new Azure Monitor integration, enable it by selecting **Monitor integration** from the **Monitoring** section in the left menu of your HDInsight Azure portal page. You can also use PowerShell or Azure CLI to enable and interact with the new monitoring integration. For more information, see the following articles:
+To use the new Azure Monitor integration, enable it by selecting **Monitor integration** from the **Monitoring** section in the left menu of your HDInsight Azure portal page. You can also use PowerShell or Azure CLI to enable and interact with the new monitoring integration. For more information, see the following article:
-- [Use Azure Monitor logs to monitor HDInsight clusters](hdinsight-hadoop-oms-log-analytics-tutorial.md)-- [Log Analytics migration guide for Azure HDInsight clusters](log-analytics-migration.md)
+- [Use Azure Monitor Agent to monitor HDInsight clusters](azure-monitor-agent.md)
[!INCLUDE [horz-monitor-insights](~/reusable-content/ce-skilling/azure/includes/azure-monitor/horizontals/horz-monitor-insights.md)]
hdinsight Selective Logging Analysis Azure Logs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/selective-logging-analysis-azure-logs.md
description: Learn how to use the selective logging feature with a script action
Previously updated : 09/06/2024 Last updated : 10/15/2024+ # Use selective logging with a script action in Azure HDInsight
Selective logging allows you to enable or disable all the tables, or enable sele
* Interactive Query * Spark
-For instructions on how to create an HDInsight cluster, see [Get started with Azure HDInsight](hadoop/apache-hadoop-linux-tutorial-get-started.md).
+For instructions on how to create a HDInsight cluster, see [Get started with Azure HDInsight](hadoop/apache-hadoop-linux-tutorial-get-started.md).
## Enable or disable logs by using a script action for multiple tables and log types
iot-operations Howto Manage Update Uninstall https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-operations/deploy-iot-ops/howto-manage-update-uninstall.md
az iot ops delete --name <INSTANCE_NAME> --resource-group <RESOURCE_GROUP>
To delete the instance and also remove the Azure IoT Operations dependencies (the output of `init`), add the flag `--include-deps`.
-```az iot ops delete --name <INSTANCE_NAME> --resource-group <RESOURCE_GROUP> --include-deps
+```azurecli
+az iot ops delete --name <INSTANCE_NAME> --resource-group <RESOURCE_GROUP> --include-deps
``` ### [Azure portal](#tab/portal)
iot-operations Howto Prepare Cluster https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-operations/deploy-iot-ops/howto-prepare-cluster.md
To prepare your Azure Arc-enabled Kubernetes cluster, you need:
* Azure CLI version 2.64.0 or newer installed on your development machine. Use `az --version` to check your version and `az upgrade` to update if necessary. For more information, see [How to install the Azure CLI](/cli/azure/install-azure-cli).
-* The latest version of the Azure IoT Operations extension for Azure CLI. Use the following command to add the extension or update it to the latest version:
+* The latest version of the following extensions for Azure CLI:
```bash az extension add --upgrade --name azure-iot-ops
+ az extension add --upgrade --name connectedk8s
``` * Hardware that meets the system requirements:
iot Concepts Convention https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/concepts-convention.md
Last updated 1/23/2024 -+ # IoT Plug and Play conventions
iot Concepts Developer Guide Device https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/concepts-developer-guide-device.md
Last updated 1/23/2024 -+ zone_pivot_groups: programming-languages-set-twenty-seven
iot Concepts Iot Device Development https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/concepts-iot-device-development.md
Title: Introduction to Azure IoT device development
description: Learn how to use Azure IoT services, SDKs, and tools to do device development with general devices and embedded devices. -+ Last updated 04/09/2024
iot Concepts Iot Device Selection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/concepts-iot-device-selection.md
Title: Azure IOT prototyping device selection list
description: This document provides guidance on choosing a hardware device for prototyping IoT Azure solutions. -+ Last updated 04/04/2024
iot Concepts Manage Device Reconnections https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/concepts-manage-device-reconnections.md
Last updated 04/04/2024 -+
iot Concepts Using C Sdk And Embedded C Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/concepts-using-c-sdk-and-embedded-c-sdk.md
Title: C SDK and Embedded C SDK usage scenarios
description: Helps developers decide which C-based Azure IoT device SDK to use for device development, based on their usage scenario. -+ Last updated 04/08/2024
iot Overview Iot Plug And Play https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/overview-iot-plug-and-play.md
Last updated 1/23/2024 -+ #Customer intent: As a device builder, I need to know what is IoT Plug and Play, so I can understand how it can help me build and market my IoT devices.
iot Troubleshoot Embedded Device Tutorials https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/troubleshoot-embedded-device-tutorials.md
Title: Troubleshooting the embedded device tutorials
description: Steps to help you troubleshoot common issues when using the Eclipse ThreadX embedded device tutorials -+ Last updated 04/08/2024
iot Tutorial Devkit Espressif Esp32 Freertos Iot Hub https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/tutorial-devkit-espressif-esp32-freertos-iot-hub.md
Title: Connect an ESPRESSIF ESP-32 to Azure IoT Hub tutorial
description: Use Azure IoT middleware for FreeRTOS to connect an ESPRESSIF ESP32-Azure IoT Kit device to Azure IoT Hub and send telemetry. -+ ms.devlang: c Last updated 06/11/2024
iot Tutorial Devkit Mxchip Az3166 Iot Hub https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/tutorial-devkit-mxchip-az3166-iot-hub.md
Title: Connect an MXCHIP AZ3166 to Azure IoT Hub
description: Use Eclipse ThreadX embedded software to connect an MXCHIP AZ3166 device to Azure IoT Hub and send telemetry. -+ ms.devlang: c Last updated 06/11/2024
iot Tutorial Devkit Stm B L475e Iot Hub https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/tutorial-devkit-stm-b-l475e-iot-hub.md
Title: Connect an STMicroelectronics B-L475E to Azure IoT Hub
description: Use Eclipse ThreadX embedded software to connect an STMicroelectronics B-L475E-IOT01A device to Azure IoT Hub and send telemetry. -+ ms.devlang: c Last updated 06/11/2024
iot Tutorial Send Telemetry Iot Hub https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/tutorial-send-telemetry-iot-hub.md
Title: Send device telemetry to Azure IoT Hub tutorial
description: This tutorial shows device developers how to connect a device securely to Azure IoT Hub. You use an Azure IoT device SDK for C, C#, Python, Node.js, or Java, to build a device client for Windows, Linux, or Raspberry Pi (Raspbian). Then you connect and send telemetry. -+ Last updated 04/04/2024
lab-services Transition Devtest Labs Guidance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/transition-devtest-labs-guidance.md
DevTest Labs is targeted at enterprise customers. The primary scenario for which
- Customer requires extensive cost controls, including user quota and limits on the number of VMs a user can have. DevTest Labs doesn't have any ability to restrict access to a VM based on a quota granted per student. - Customer requires complex start and stop schedules. DevTest Labs is designed for enterprise developers; it supports daily start and stop schedules.-- Customer requires flexible login methods. DevTest Labs requires that the user exists in the Microsoft Entra ID tenant for the subscription in which the lab is hosted. RBAC permissions are used to control who has access to labs and VMs.
+- Customer requires flexible sign-in methods. DevTest Labs requires that the user exists in the Microsoft Entra ID tenant for the subscription in which the lab is hosted. Azure role-based access control (RBAC) permissions are used to control who has access to labs and VMs.
## Frequently Asked Questions **What is the cost model?**
-There are no costs for using the service; it's free to use. Customers are charged for resources used by the DevTest Labs service. This cost includes, but isn't limited to, the cost of storage, networking, and running time for any VMs in a lab.
+There are no costs for using the DevTest Labs service; it's free to use. Customers are charged for resources used by the DevTest Labs service. This cost includes, but isn't limited to, the cost of storage, networking, and running time for any VMs in a lab.
**Does DevTest Labs provide cost reporting?**
-DevTest Labs is integrated into [Microsoft Cost Management](/azure/cost-management-billing/costs/overview-cost-management) for cost budgeting and analysis. [Allow tag inheritance and add tags to lab resource](/azure/devtest-labs/devtest-lab-configure-cost-management) to track per-lab costs.
+DevTest Labs is integrated into [Microsoft Cost Management](/azure/cost-management-billing/costs/overview-cost-management) for cost budgeting and analysis. To track per-lab costs, [allow tag inheritance and add tags to lab resources](/azure/devtest-labs/devtest-lab-configure-cost-management).
+
+**Does DevTest Labs provide quota management?**
+DevTest Labs is integrated into [Microsoft Cost Management](/azure/cost-management-billing/costs/overview-cost-management). Cost Management can [monitor costs for virtual machines](/azure/virtual-machines/cost-optimization-monitor-costs) and [automatically execute actions based on a budget](/azure/cost-management-billing/manage/cost-management-budget-scenario). There's no management of VM usage quota within the DevTest Labs service.
**Does DevTest Labs support nested virtualization?** Yes. Check the [VM series](/azure/virtual-machines/sizes/overview) documentation to verify nested virtualization is included in the list of supported features.
Yes. We recommend [connecting your DevTest Labs to a Shared Image Gallery](/azur
We recommend using a Shared Image Gallery over the DTL [custom images feature](/azure/devtest-labs/devtest-lab-create-custom-image-from-vm-using-portal) and [formulas](/azure/devtest-labs/devtest-lab-manage-formulas) features. Shared Image Galleries are compatible with several other Azure services and can be used in multiple labs.
-**Does DevTest Labs support multi-VM environments?**
-[Azure Deployment Environments](https://azure.microsoft.com/products/deployment-environments/) is recommended for multi-VM environments.
- **Does DevTest Labs support schedules?** DevTest Labs supports an optional daily start and/or stop schedule.
logic-apps Azure Ai https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/connectors/azure-ai.md
ms.suite: integration
Previously updated : 07/23/2024 Last updated : 10/14/2024 # Connect to Azure AI services from Standard workflows in Azure Logic Apps (Preview)
For more information, see the following resources:
- [Introduction to large language models](/training/modules/introduction-large-language-models/) - [Guide to working with large language models](/ai/playbook/technology-guidance/generative-ai/working-with-llms/)-- [What is a vector database](/semantic-kernel/memories/vector-db)
+- [What is a vector database](/azure/cosmos-db/vector-database#what-is-a-vector-database)
## Connector technical reference
logic-apps Create Single Tenant Workflows Azure Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/create-single-tenant-workflows-azure-portal.md
More workflows in your logic app raise the risk of longer load times, which nega
The **Create Logic App** page appears and shows the following options:
- [!INCLUDE [logic-apps-host-plans](../../includes/logic-apps-host-plans.md)]
+ [!INCLUDE [logic-apps-host-plans](includes/logic-apps-host-plans.md)]
1. On the **Create Logic App** page, select **Standard (Workflow Service Plan)**.
logic-apps Create Standard Workflows Hybrid Deployment https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/create-standard-workflows-hybrid-deployment.md
+
+ Title: Create Standard logic app workflows for hybrid deployment
+description: Create and deploy an example Standard logic app workflow on your own managed infrastructure, which can include on-premises, private cloud, and public cloud environments.
++
+ms.suite: integration
++ Last updated : 10/14/2024
+# Customer intent: As a developer, I want to create a Standard logic app workflow that can run on customer-managed infrastructure, which can include on-premises systems, private clouds, and public clouds.
++
+# Create Standard logic app workflows for hybrid deployment on your own infrastructure (Preview)
++
+> [!NOTE]
+>
+> This capability is in preview, incurs charges for usage, and is subject to the
+> [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+
+For scenarios where you need to use, control, and manage your own infrastructure, you can create Standard logic app workflows using the hybrid deployment model in Azure Logic Apps. This model provides capabilities for you to build and host integration solutions for partially connected environments that require local processing, storage, and network access. Your infrastructure can include on-premises systems, private clouds, and public clouds. With the hybrid model, your Standard logic app workflow is powered by the Azure Logic Apps runtime that is hosted on premises as an Azure Container Apps extension.
+
+For an architectural overview that shows where Standard logic app workflows are hosted and run in a partially connected environment, see [Set up infrastructure requirements for hybrid deployment for Standard logic apps](set-up-standard-workflows-hybrid-deployment-requirements.md).
+
+This how-to guide shows how to create and deploy a Standard logic app workflow using the hybrid deployment model after you set up the necessary on-premises resources for hosting your app.
+
+## Limitations
+
+- Hybrid deployment for Standard logic apps is available and supported only in the [same regions as Azure Container Apps on Azure Arc-enabled AKS](../container-apps/azure-arc-overview.md#public-preview-limitations).
+
+- The following capabilities currently aren't available in this preview release:
+
+ - SAP access through the SAP built-in connector
+ - XSLT 1.0 for custom code
+ - Custom code support with .NET Framework
+ - Managed identity authentication
+ - File System connector
+
+- Azure Arc-enabled Kubernetes clusters currently don't support managed identity authentication for managed API connections. Instead, you must create your own app registration using Microsoft Entra ID. For more information, [follow these steps later in this guide](#authenticate-managed-api-connections).
+
+- Some function-based triggers, such as Azure Blob, Cosmos DB, and Event Hubs require a connection to the Azure storage account associated with your Standard logic app. If you use any function-based triggers, in your Standard logic app's environment variables in the Azure portal or in your logic app project's **local.settings.json** file in Visual Studio Code, add the following app setting and provide your storage account connection string:
+
+ ```json
+ "Values": {
+ "name": "AzureWebJobsStorage",
+ "value": "{storage-account-connection-string}"
+ }
+ ```
+
+## Prerequisites
+
+- An Azure account and subscription. If you don't have a subscription, [sign up for a free Azure account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+
+- The following on-premises resources, which must all exist within the same network for the required connectivity:
+
+ - An Azure Kubernetes Service cluster that's connected to Azure Arc
+ - A SQL database to locally store workflow run history, inputs, and outputs for processing
+ - A Server Message Block (SMB) file share to locally store artifacts used by your workflows
+
+ To meet these requirements, [set up these on-premises resources to support hybrid deployment for Standard logic apps](set-up-standard-workflows-hybrid-deployment-requirements.md).
+
+- To work in Visual Studio Code, you need the Azure Logic Apps (Standard) extension for Visual Studio Code with the [related prerequisites](create-single-tenant-workflows-visual-studio-code.md#prerequisites).
+
+ > [!TIP]
+ >
+ > If you have a new Visual Studio Code installation, confirm that you can locally run a
+ > basic Standard workflow before you try deploying to your own infrastructure. This test
+ > run helps isolate any errors that might exist in your Standard workflow project.
+
+## Create your Standard logic app in the Azure portal
+
+After you meet the prerequisites, create your Standard logic app for hybrid deployment by following these steps:
+
+1. In the [Azure portal](https://portal.azure.com) search box, enter **logic apps**, and select **Logic apps**.
+
+1. On the **Logic apps** page toolbar, select **Add**.
+
+1. On the **Create Logic App** page, under **Standard**, select **Hybrid**.
+
+1. On the **Create Logic App (Hybrid)** page, provide the following information:
+
+ | Property | Required | Value | Description |
+ |-|-|-|-|
+ | **Subscription** | Yes | <*Azure-subscription-name*> | Your Azure subscription name. <br><br>This example uses **Pay-As-You-Go**. |
+ | **Resource Group** | Yes | <*Azure-resource-group-name*> | The [Azure resource group](../azure-resource-manager/management/overview.md#terminology) where you create your hybrid app and related resources. This name must be unique across regions and can contain only letters, numbers, hyphens (**-**), underscores (**_**), parentheses (**()**), and periods (**.**). <br><br>This example creates a resource group named **Hybrid-RG**. |
+ | **Logic App name** | Yes | <*logic-app-name*> | Your logic app name, which must be unique across regions and can contain only lowercase letters, numbers, or hyphens (**-**). <br><br>This example uses **my-logic-app-hybrid**. |
+ | **Region** | Yes | <*Azure-region*> | An Azure region that is [supported for Azure container apps on Azure Arc-enabled AKS](../container-apps/azure-arc-overview.md#public-preview-limitations). <br><br>This example uses **East US**. |
+ | **Container App Connected Environment** | Yes | <*connected-environment-name*> | The Arc-enabled Kubernetes cluster that you created as the deployment environment for your logic app. For more information, see [Tutorial: Enable Azure Container Apps on Azure Arc-enabled Kubernetes](../container-apps/azure-arc-enable-cluster.md). |
+ | **Configure storage settings** | Yes | Enabled or disabled | Continues to the **Storage** tab on the **Create Logic App (Hybrid)** page. |
+
+ The following example shows the logic app creation page in the Azure portal with sample values:
+
+ :::image type="content" source="media/create-standard-workflows-hybrid-deployment/create-logic-app-hybrid-portal.png" alt-text="Screenshot shows Azure portal and logic app creation page.":::
+
+1. On the **Storage** page, provide the following information about the storage provider and SMB file share that you previously set up:
+
+ | Property | Required | Value | Description |
+ |-|-|-|-|
+ | **SQL connection string** | Yes | <*sql-server-connection-string*> | The SQL Server connection string that you previously saved. For more information, see [Create SQL Server storage provider](set-up-standard-workflows-hybrid-deployment-requirements.md#create-storage-provider). |
+ | **Host name** | Yes | <*file-share-host-name*> | The host name for your SMB file share. |
+ | **File share path** | Yes | <*file-share-path*> | The file share path for your SMB file share. |
+ | **User name** | Yes | <*file-share-user-name*> | The user name for your SMB file share. |
+ | **Password** | Yes | <*file-share-password*> | The password for your SMB file share. |
+
+1. When you finish, select **Review + create**. Confirm the provided information, and select **Create**.
+
+1. After Azure completes deployment, select **Go to resource**.
+
+ :::image type="content" source="media/create-standard-workflows-hybrid-deployment/logic-app-hybrid-portal.png" alt-text="Screenshot shows Azure portal with Standard logic app for hybrid deployment created as a Container app.":::
+
+ From this view in the Azure portal, you can create, edit, and manage workflows as usual.
+
+ > [!NOTE]
+ >
+ > Several known issues exist in the portal around how you find your Standard logic app, which is created
+ > as a container app in this release. Your Standard logic app is also labeled differently from Standard
+ > logic apps deployed to single-tenant Azure and App Service environment v3. For more information, see
+ > [Known issues and troubleshooting - Azure portal](#known-issues-portal).
+
+1. To review the app settings, on the container app menu, under **Settings**, select **Containers**, and then select the **Environment variables** tab.
+
+ For more information about app settings and host settings, see [Edit app settings and host settings](edit-app-settings-host-settings.md).
+
+## Create your Standard logic app in Visual Studio Code
+
+After you meet the prerequisites, but before you create your Standard logic app for hybrid deployment in Visual Studio Code, confirm that the following conditions are met:
+
+- Your SMB file share server is accessible.
+- Port 445 is open on the computer where you run Visual Studio Code.
+
+1. Run Visual Studio Code as administrator.
+
+1. In Visual Studio Code, on the Activity Bar, select the Azure icon.
+
+1. In the **Workspace** section, from the toolbar, select the Azure Logic Apps icon, and then select **Create new project**.
+
+1. Browse to the location where you want to create the folder for your Standard logic app project. Create your project folder, select the folder, and then choose **Select**.
+
+1. From the workflow type list, select **Stateful Workflow** or **Stateless Workflow**. Provide a name for your workflow.
+
+ This example selects **Stateful Workflow** and uses **my-stateful-workflow** as the name.
+
+1. From the list that appears, select **Open in current window**.
+
+ Visual Studio Code creates and opens your logic app project to show the **workflow.json** file.
+
+1. From the list that appears, select **Use connectors from Azure**.
+
+1. From the subscription list, select your Azure subscription.
+
+1. From the resource group list, select **Create new resource group**. Provide a name for your resource group.
+
+ This example uses **Hybrid-RG**.
+
+1. From the location list, select an Azure region that is [supported for Azure container apps on Azure Arc-enabled AKS](../container-apps/azure-arc-overview.md#public-preview-limitations).
+
+ This example uses **East US**.
+
+1. In the **Explorer** window, open the shortcut menu for the **workflow.json** file, and select **Open Designer**.
+
+1. Build your workflow as usual by adding a trigger and actions. For more information, see [Build a workflow with a trigger and actions](create-workflow-with-trigger-or-action.md).
+
+<a name="authenticate-managed-api-connections"></a>
+
+## Set up authentication for managed API connections
+
+To authenticate managed API connections in Standard logic app workflows hosted on Azure Arc-enabled Kubernetes clusters, you must create your own app registration using Microsoft Entra ID. You can then add this app registration's values as environment variables in your Standard logic app resource to authenticate your API connections instead.
+
+### Create an app registration with Microsoft Entra ID
+
+#### [Portal](#tab/azure-portal)
+
+1. In the [Azure portal](https://portal.azure.com), follow [Quickstart: Register an application with the Microsoft identity platform](/entra/identity-platform/quickstart-register-app) to create an app registration.
+
+1. After creation completes, find your new app registration in the portal.
+
+1. On the resource menu, select **Overview**, and save the following values, which you need later for connection authentication:
+
+ - Client ID
+ - Tenant ID
+ - Client secret
+
+1. For the object ID, follow these steps:
+
+ 1. On the **Overview** page, select **Managed application in local directory** link for your app registration as shown:
+
+ :::image type="content" source="media/create-standard-workflows-hybrid-deployment/managed-application-link.png" alt-text="Screenshot shows app registration with selected link for managed application in local directory.":::
+
+ 1. On the page that opens, copy and save the **Object ID** value:
+
+ :::image type="content" source="media/create-standard-workflows-hybrid-deployment/app-registration-object-id.png" alt-text="Screenshot shows app registration with selected object ID.":::
+
+1. Now, [add the saved values as environment variables](#add-environment-variables) to your Standard logic app resource.
+
+#### [Azure CLI](#tab/azure-cli)
+
+1. To create the app registration, use the [**az ad sp create** command](/cli/azure/ad/sp#az-ad-sp-create).
+
+1. To review all the properties, use the [**az ad sp show** command](/cli/azure/ad/sp#az-ad-sp-show).
+
+1. In the output from both commands, find and save the following values, which you need later for connection authentication:
+
+ - Client ID
+ - Object ID
+ - Tenant ID
+ - Client secret
+
+1. Now, [add the saved values as environment variables](#add-environment-variables) to your Standard logic app resource.
+++
+<a name="add-environment-variables"></a>
+
+### Add environment variable values to your Standard logic app
+
+1. In the [Azure portal](https://portal.azure.com), go to your Standard logic app resource.
+
+1. On the resource menu, under **Settings**, select **Containers**, and then select the **Environment variables** tab.
+
+1. On the toolbar, select **Edit and deploy**.
+
+1. On the **Edit a container** pane, select **Environment variables**, and then select **Add**.
+
+1. From the following table, add each environment variable with the specified value:
+
+ | Environment variable | Value |
+ |-|-|
+ | **WORKFLOWAPP_AAD_CLIENTID** | <*my-client-ID*> |
+ | **WORKFLOWAPP_AAD_OBJECTID** | <*my-object-ID*> |
+ | **WORKFLOWAPP_AAD_TENANTID** | <*my-tenant-ID*> |
+ | **WORKFLOWAPP_AAD_CLIENTSECRET** | <*my-client-secret*> |
+
+1. When you finish, select **Save**.
+
+### Store and reference client ID and client secret
+
+You can store the client ID and client secret values in your logic app resource as secrets and then reference those values on the **Environment variables** tab instead.
+
+1. On the resource menu, under **Settings**, select **Secrets**.
+
+1. On the toolbar, select **Add**.
+
+1. On the **Add secret** pane, provide the following information for each secret, and then select **Add**:
+
+ | Key | Value |
+ |--|-|
+ | **WORKFLOWAPP_AAD_CLIENTID** | <*my-client-ID*> |
+ | **WORKFLOWAPP_AAD_CLIENTSECRET** | <*my-client-secret*> |
+
+## Deploy your logic app from Visual Studio Code
+
+After you finish building your workflow, you can deploy your logic app to your Container Apps connected environment.
+
+1. In the **Explorer** window, open the shortcut menu for the workflow node, which is **my-stateful-workflow** in this example, and select **Deploy to logic app**.
+
+1. From the subscription list, select your Azure subscription.
+
+1. From the available logic apps list, select **Create new Logic App (Standard) in Azure**. Provide a globally unique logic app name that uses only lowercase alphanumeric characters or hyphens.
+
+ This example uses **my-logic-app-hybrid**.
+
+1. From the location list that appears, select the same Azure region where you have your connected environment.
+
+ This example uses **East US**.
+
+1. From the hosting plan list, select **Hybrid**.
+
+1. From the resource group list, select **Create new resource group**. Provide a name for your resource group.
+
+ This example uses **Hybrid-RG**.
+
+1. From the connected environment list, select your environment.
+
+1. Provide your previously saved values for the host name, SMB file share path, username, and password for your artifacts storage.
+
+1. Provide the connection string for the SQL database that you set up for runtime storage.
+
+ Visual Studio Code starts the deployment process for your Standard logic app.
+
+1. To monitor deployment status and Azure activity logs, from the **View** menu, select **Output**. In the window that opens, select **Azure**.
+
+After deployment completes, you can go to the Azure portal to view your logic app workflow.
+
+> [!NOTE]
+>
+> Several known issues exist in the portal around how you find your Standard logic app, which is created
+> as a container app in this release. Your Standard logic app is also labeled differently from Standard
+> logic apps deployed to single-tenant Azure and App Service environment v3. For more information, see
+> [Known issues and troubleshooting - Azure portal](#known-issues-portal).
+
+## Known issues and troubleshooting
+
+<a name="known-issues-portal"></a>
+
+### Azure portal
+
+- Your Standard logic app is deployed as a [Container App resource](/azure/container-apps/overview), but the type appears as **Logic App (Hybrid)**.
+
+- Your Standard logic app is listed in **Container Apps** resource list, not the **Logic apps** resource list.
+
+- Your Container Apps connected environment lists your Standard logic app as having an **App Type** named **Hybrid Logic App**.
+
+- To reflect changes in the designer after you save your workflow, you might have to occasionally refresh the designer.
+
+### Arc-enabled Kubernetes clusters
+
+In rare scenarios, you might notice a high memory footprint in your cluster. To prevent this issue, either scale out or add autoscale for node pools.
+
+### Function host isn't running
+
+After you deploy your Standard logic app, confirm that your app is running correctly.
+
+1. In the Azure portal, go to the container app resource for your logic app.
+
+1. On the container app menu, select **Overview**.
+
+1. On the **Overview** page, next to the **Application Url** field, select your container app's URL.
+
+ If your app is running correctly, a browser window opens and shows the following message:
+
+ :::image type="content" source="media/create-standard-workflows-hybrid-deployment/running-logic-app-hybrid-deployment.png" alt-text="Screenshot shows browser and logic app running as a website.":::
+
+ Otherwise, if your app has any failures, check that your AKS pods are running correctly. From Windows PowerShell, run the following commands:
+
+ ```powershell
+ az aks get-credentials {resource-group-name} --name {aks-cluster-name} --admin
+ kubectl get ns
+ kubectl get pods -n logicapps-aca-ns
+ kubectl describe pod {logic-app-pod-name} -n logicapps-aca-ns
+ ```
+
+ For more information, see the following documentation:
+
+ - [az aks get-credentials](/cli/azure/aks#az-aks-get-credentials)
+ - [Command line tool (kubetctl)](https://kubernetes.io/docs/reference/kubectl/)
+
+### Cluster doesn't have enough nodes
+
+If you ran the previous command and get a warning similar to the following example, your cluster doesn't have enough nodes for processing:
+
+**`Warning: FailedSchedulingΓÇ» 4m52s (x29 over 46m)ΓÇ» default-schedulerΓÇ» 0/2 nodes are available: 2 Too many pods. preemption: 0/2 nodes are available: 2 No preemption victims found for incoming pod.`**
+
+To increase the number of nodes, and set up autoscale, follow these steps:
+
+1. In the Azure portal, go to your Kubernetes service instance.
+
+1. On the instance menu, under **Settings**, select **Node pools**.
+
+1. On the **Node tools** page toolbar, select **+ Add node pool**.
+
+For more information, see the following documentation:
+
+- [Create node pools for a cluster in Azure Kubernetes Service (AKS)](/azure/aks/create-node-pools)
+- [Manage node pools for a cluster in Azure Kubernetes Service (AKS)](/azure/aks/manage-node-pools)
+- [Cluster autoscaling in Azure Kubernetes Service (AKS) overview](/azure/aks/cluster-autoscaler-overview)
+- [Use the cluster autoscaler in Azure Kubernetes Service (AKS)](/azure/aks/cluster-autoscaler?tabs=azure-cli)
+
+### SMB Container Storage Interface (CSI) driver not installed
+
+After you ran the earlier **`kubectl describe pod`** command, if the following warning appears, confirm whether the CSI driver for your SMB file share is installed correctly:
+
+**`Warning FailedScheduling 5m16s (x2 over 5m27s)  default-scheduler 0/14 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/14 nodes are available: 14 Preemption is not helpful for scheduling.`**
+
+**`Normal NotTriggerScaleUp 9m49s (x31 over 14m) cluster-autoscaler pod didn't trigger scale-up: 3 pod has unbound immediate PersistentVolumeClaims`**
+
+To confirm, from Windows PowerShell, run the following commands:
+
+```powershell
+kubectl get csidrivers
+```
+
+If the results list that appears doesn't include **smb.csi.k8s.io**, from a Windows command prompt, and run the following command:
+
+**`helm repo add csi-driver-smb`**<br>
+**`help repo update`**
+**`helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.15.0`**
+
+To check the CSI SMB Driver pods status, from the Windows command prompt, run the following command:
+
+**`kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/name=csi-driver-smb" --watch`**
+
+For more information, see [Container Storage Interface (CSI) drivers on Azure Kubernetes Service (AKS)](/azure/aks/csi-storage-drivers).
+
+## Related content
+
+- [Set up requirements for Standard logic app deployment on your own infrastructure](set-up-standard-workflows-hybrid-deployment-requirements.md)
logic-apps Logic Apps Enterprise Integration Edifact https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/logic-apps-enterprise-integration-edifact.md
Previously updated : 01/10/2024 Last updated : 10/14/2024 # Exchange EDIFACT messages using workflows in Azure Logic Apps
The **EDIFACT** connector has different versions, based on [logic app type and h
| Logic app | Environment | Connector version | |--|-|-| | **Consumption** | Multitenant Azure Logic Apps | **EDIFACT** managed connector (Standard class). The **EDIFACT** connector provides only actions, but you can use any trigger that works for your scenario. For more information, see the following documentation: <br><br>- [EDIFACT managed connector reference](/connectors/edifact/) <br>- [EDIFACT message limits](logic-apps-limits-and-config.md#b2b-protocol-limits) |
-| **Standard** | Single-tenant Azure Logic Apps and App Service Environment v3 (Windows plans only) | **EDIFACT** built-in connector (preview) and **EDIFACT** managed connector. The built-in version differs in the following ways: <br><br>- The built-in version provides only actions, but you can use any trigger that works for your scenario. <br><br>- The built-in version can directly access Azure virtual networks. You don't need an on-premises data gateway.<br><br>For more information, see the following documentation: <br><br>- [EDIFACT managed connector reference](/connectors/edifact/) <br>- [EDIFACT built-in connector operations](#edifact-built-in-operations) <br>- [EDIFACT message limits](logic-apps-limits-and-config.md#b2b-protocol-limits) |
+| **Standard** | Single-tenant Azure Logic Apps and App Service Environment v3 (Windows plans only) | **EDIFACT** built-in connector and **EDIFACT** managed connector. The built-in version differs in the following ways: <br><br>- The built-in version provides only actions, but you can use any trigger that works for your scenario. <br><br>- The built-in version can directly access Azure virtual networks. You don't need an on-premises data gateway.<br><br>For more information, see the following documentation: <br><br>- [EDIFACT managed connector reference](/connectors/edifact/) <br>- [EDIFACT built-in connector operations](#edifact-built-in-operations) <br>- [EDIFACT message limits](logic-apps-limits-and-config.md#b2b-protocol-limits) |
<a name="edifact-built-in-operations"></a>
-### EDIFACT built-in operations (Standard workflows only - Preview)
+### EDIFACT built-in operations (Standard workflows only)
-The preview **EDIFACT** built-in connector has the following actions, which are similar to their counterpart **EDIFACT** managed connector actions, except where noted in [Limitations and known issues](#limitations-known-issues).
+The **EDIFACT** built-in connector has the following actions, which are similar to their counterpart **EDIFACT** managed connector actions, except where noted in [Limitations and known issues](#limitations-known-issues).
* [**EDIFACT Encode** action](#encode) * [**EDIFACT Decode** action](#decode)
The preview **EDIFACT** built-in connector has the following actions, which are
### Limitations and known issues
-* Preview **EDIFACT** built-in connector
+* **EDIFACT** built-in connector
- * This capability is in preview and is subject to the [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+ * This connector's actions currently support payloads up to 100 MB.
- * This connector's actions currently support payloads up to at least 100 MB.
-
- * The preview **EDIFACT Decode** action currently doesn't include the following capabilities:
+ * The **EDIFACT Decode** action currently doesn't include the following capabilities:
* Check for duplicate interchange, group, and transaction set control numbers, if configured. * Preserve the entire interchange.
- Otherwise, the preview **EDIFACT Encode** and **EDIFACT decode** built-in connector actions have capabilities similar to their counterpart **EDIFACT** managed connector actions.
+ Otherwise, the **EDIFACT Encode** and **EDIFACT decode** built-in connector actions have capabilities similar to their counterpart **EDIFACT** managed connector actions.
* This connector's actions currently don't support interchanges with multiple transactions or batched messages.
The **EDIFACT** managed connector action named **Encode to EDIFACT message** act
### [Standard](#tab/standard)
-#### EDIFACT built-in connector (preview)
+#### EDIFACT built-in connector
1. In the [Azure portal](https://portal.azure.com), open your logic app resource and workflow in the designer.
The **EDIFACT** managed connector action named **Decode EDIFACT message** action
### [Standard](#tab/standard)
-#### EDIFACT built-in connector (preview)
+#### EDIFACT built-in connector
1. In the [Azure portal](https://portal.azure.com), open your logic app resource and workflow in the designer.
logic-apps Quickstart Create Example Consumption Workflow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/quickstart-create-example-consumption-workflow.md
To create a Standard logic app workflow that runs in single-tenant Azure Logic A
The **Create Logic App** page appears and shows the following options:
- [!INCLUDE [logic-apps-host-plans](../../includes/logic-apps-host-plans.md)]
+ [!INCLUDE [logic-apps-host-plans](includes/logic-apps-host-plans.md)]
1. On the **Create Logic App** page, select **Consumption (Multi-tenant)**.
logic-apps Set Up Standard Workflows Hybrid Deployment Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/set-up-standard-workflows-hybrid-deployment-requirements.md
+
+ Title: Set up your own infrastructure for Standard logic app workflows
+description: Set up the requirements for your own managed infrastructure to deploy and host Standard logic app workflows using the hybrid deployment model.
++
+ms.suite: integration
++ Last updated : 10/14/2024
+# Customer intent: As a developer, I need to set up the requirements to host and run Standard logic app workflows on infrastructure that my organization owns, which can include on-premises systems, private clouds, and public clouds.
++
+# Set up your own infrastructure for Standard logic apps using hybrid deployment (Preview)
++
+> [!NOTE]
+>
+> This capability is in preview, incurs charges for usage, and is subject to the
+> [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+
+Azure Logic Apps supports scenarios where you need to use your own managed infrastructure to deploy and host Standard logic app workflows by offering a hybrid deployment model. This model provides the capabilities for hosting integration solutions in partially connected environments that require local processing, storage, and network access. Standard logic app workflows are powered by the Azure Logic Apps runtime that is hosted on premises as an Azure Container Apps extension.
+
+The following architectural overview shows where Standard logic app workflows are hosted and run in the hybrid model. The partially connected environment includes the following resources for hosting and working with your Standard logic apps, which deploy as Azure Container Apps resources:
+
+- Either Azure Arc-enabled Kubernetes clusters or Azure Arc-enabled Kubernetes clusters on Azure Stack *hyperconverged infrastructure* (HCI)
+- A SQL database to locally store workflow run history, inputs, and outputs for processing
+- A Server Message Block (SMB) file share to locally store artifacts used by your workflows
++
+For more information, see the following documentation:
+
+- [What is Azure Kubernetes Service?](/azure/aks/what-is-aks)
+- [Core concepts for Azure Kubernetes Service (AKS)](/azure/aks/concepts-clusters-workloads)
+- [Azure Arc-enabled Azure Kubernetes Service (AKS) clusters](/azure/azure-arc/kubernetes/overview)
+- [Azure Arc-enabled Kubernetes clusters on Azure Stack hyperconverged infrastructure (HCI)](/azure-stack/hci/overview)
+- [Custom locations for Azure Arc-enabled Kubernetes clusters](/azure/azure-arc/platform/conceptual-custom-locations)
+- [What is Azure Container Apps?](../container-apps/overview.md)
+- [Azure Container Apps on Azure Arc](../container-apps/azure-arc-overview.md)
+
+This how-to guide shows how to set up the necessary on-premises resources in your infrastructure so that you can create, deploy, and host a Standard logic app workflow using the hybrid deployment model.
+
+## Limitations
+
+- Hybrid deployment is currently available and supported only for Azure Arc-enabled Azure Kubernetes Service (AKS) clusters and Azure Arc-enabled Kubernetes clusters on Azure Stack HCI.
+
+## Prerequisites
+
+- An Azure account and subscription. If you don't have a subscription, [sign up for a free Azure account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+
+- Basic understanding about [core AKS concepts](/azure/aks/concepts-clusters-workloads)
+
+- [Technical requirements for working with Azure CLI](/azure/aks/learn/quick-kubernetes-deploy-cli#before-you-begin)
+
+- [Technical requirements for Azure Container Apps on Azure Arc-enabled Kubernetes](/azure/container-apps/azure-arc-overview#prerequisites), including access to a public or private container registry, such as the [Azure Container Registry](/azure/container-registry/).
+
+## Create a Kubernetes cluster
+
+Before you can deploy your Standard logic app as on-premises resource to an Azure Arc-enabled Kubernetes cluster in an Azure Container Apps connected environment, you first need a [Kubernetes cluster](/azure/aks/core-aks-concepts#cluster-components). You'll later connect this cluster to Azure Arc so that you have an [Azure Arc-enabled Kubernetes cluster](/azure/azure-arc/kubernetes/overview).
+
+Your Kubernetes cluster requires inbound and outbound connectivity with the [SQL database that you later create as the storage provider](#create-storage-provider) and with the [Server Message Block file share that you later create for artifacts storage](#set-up-smb-file-share). These resources must exist within the same network.
+
+> [!NOTE]
+>
+> You can also create a [Kubernetes cluster on Azure Stack HCI infrastructure](/azure-stack/hci/overview)
+> and apply the steps in this how-to guide to connect your cluster to Azure Arc and to set up your
+> connected environment. For more information about Azure Stack HCI, see the following resources:
+>
+> - [About Azure Stack HCI](/azure-stack/hci/deploy/deployment-introduction)
+> - [Deployment prerequisites for Azure Stack HCI](/azure-stack/hci/deploy/deployment-prerequisites)
+> - [Create Kubernetes clusters on Azure Stack HCI using Azure CLI](/azure/aks/hybrid/aks-create-clusters-cli)
+
+1. Set the following environment variables for the Kubernetes cluster that you want to create:
+
+ ```azurecli
+ SUBSCRIPTION="<Azure-subscription-ID>"
+ AKS_CLUSTER_GROUP_NAME="<aks-cluster-resource-group-name>"
+ AKS_NAME="<aks-cluster-name>"
+ LOCATION="eastus"
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **SUBSCRIPTION** | Yes | <*Azure-subscription-ID*> | The ID for your Azure subscription |
+ | **AKS_CLUSTER_GROUP_NAME** | Yes | <*aks-cluster-resource-group-name*> | The name for the Azure resource group to use with your Kubernetes cluster. This name must be unique across regions and can contain only letters, numbers, hyphens (**-**), underscores (**_**), parentheses (**()**), and periods (**.**). <br><br>This example uses **Hybrid-RG**. |
+ | **AKS_NAME** | Yes | <*aks-cluster-name*> | The name for your Kubernetes cluster. |
+ | **LOCATION** | Yes | <*Azure-region*> | An Azure region that [supports Azure container apps on Azure Arc-enabled Kubernetes](../container-apps/azure-arc-overview.md#public-preview-limitations). <br><br>This example uses **eastus**. |
+
+1. Run the following commands either by using the Bash environment in [Azure Cloud Shell](/azure/cloud-shell/overview) or locally using [Azure CLI installed on your computer](/cli/azure/install-azure-cli):
+
+ > [!NOTE]
+ >
+ > Make sure to change the **max-count** and **min-count** node values based on your load requirements.
+
+ ```azurecli
+ az login
+ az account set --subscription $SUBSCRIPTION
+ az provider register --namespace Microsoft.KubernetesConfiguration --wait
+ az extension add --name k8s-extension --upgrade --yes
+ az group create
+ --name $AKS_CLUSTER_GROUP_NAME
+ --location $LOCATION
+ az aks create \
+ --resource-group $AKS_CLUSTER_GROUP_NAME \
+ --name $AKS_NAME \
+ --enable-aad \
+ --generate-ssh-keys \
+ --enable-cluster-autoscaler \
+ --max-count 6 \
+ --min-count 1
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **`max count`** | No | <*max-nodes-value*> | The maximum number of nodes to use for the autoscaler when you include the **`enable-cluster-autoscaler`** option. This value ranges from **1** to **1000**. |
+ | **`min count`** | No | <*min-nodes-value*> | The minimum number of nodes to use for the autoscaler when you include the **`enable-cluster-autoscaler`** option. This value ranges from **1** to **1000**. |
+
+ For more information, see the following resources:
+
+ - [Quickstart: Deploy an Azure Kubernetes Service (AKS) cluster using Azure CLI](/azure/aks/learn/quick-kubernetes-deploy-cli)
+ - [**az account set**](/cli/azure/account#az-account-set)
+ - [**az group create**](/cli/azure/group#az-group-create)
+ - [**az aks create**](/cli/azure/aks#az-aks-create)
+
+## Connect Kubernetes cluster to Azure Arc
+
+To create your Azure Arc-enabled Kubernetes cluster, connect your Kubernetes cluster to Azure Arc.
+
+> [!NOTE]
+>
+> You can find the steps in this section and onwards through to creating your connected
+> environment in a script named **EnvironmentSetup.ps1**, which you can find in the
+> [GitHub repo named **Azure/logicapps**](https://github.com/Azure/logicapps/tree/master/scripts/hybrid).
+> You can modify and use this script to meet your requirements and scenarios.
+>
+> The script is unsigned, so before you run the script, run the following Azure
+> PowerShell command as an administrator to set the execution policy:
+>
+> `Set-ExecutionPolicy -ExecutionPolicy Unrestricted`
+>
+> For more information, see [Set-ExecutionPolicy](/powershell/module/microsoft.powershell.security/set-executionpolicy).
+
+1. Install the following Azure CLI extensions:
+
+ ```azurecli
+ az extension add --name connectedk8s --upgrade --yes
+ az extension add --name k8s-extension --upgrade --yes
+ az extension add --name customlocation --upgrade --yes
+ az extension add --name containerapp --upgrade --yes
+ ```
+
+ For more information, see the following resources:
+
+ - [Install Azure CLI extensions](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#setup)
+ - [az extension add](/cli/azure/extension#az-extension-add)
+
+1. Register the following required namespaces:
+
+ ```azurecli
+ az provider register --namespace Microsoft.ExtendedLocation --wait
+ az provider register --namespace Microsoft.KubernetesConfiguration --wait
+ az provider register --namespace Microsoft.App --wait
+ az provider register --namespace Microsoft.OperationalInsights --wait
+ ```
+
+ For more information, see the following resources:
+
+ - [Register the required namespaces](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#setup)
+ - [az provider register](/cli/azure/provider#az-provider-register)
+
+1. Install the Kubernetes command line interface (CLI) named **kubectl**:
+
+ ```azurecli
+ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
+ choco install kubernetes-cli -y
+ ```
+
+ For more information, see the following resources:
+
+ - [Command line tool (kubectl)](https://kubernetes.io/docs/reference/kubectl/kubectl/)
+ - [Set-ExecutionPolicy](/powershell/module/microsoft.powershell.security/set-executionpolicy)
+ - [choco install kubernetes-cli](https://docs.chocolatey.org/en-us/choco/commands/install/)
+
+1. Install the Kubernetes package manager named **Helm**:
+
+ ```azurecli
+ choco install kubernetes-helm
+ ```
+
+ For more information, see the following resources:
+
+ - [Helm](https://helm.sh/)
+ - [choco install kubernetes-helm](https://community.chocolatey.org/packages/kubernetes-helm)
+
+1. Install the SMB driver using the following Helm commands:
+
+ 1. Add the specified chart repository, get the latest information for available charts, and install the specified chart archive.
+
+ ```azurecli
+ helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
+ helm repo update
+ helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.15.0
+ ```
+
+ For more information, see the following resources:
+
+ - [helm repo add](https://helm.sh/docs/helm/helm_repo_add/)
+ - [helm repo update](https://helm.sh/docs/helm/helm_repo_update/)
+ - [helm install](https://helm.sh/docs/helm/helm_install/)
+
+ 1. Confirm that the SMB driver is installed by running the following **kubectl** command, which should list **smb.csi.k8s.io**:
+
+ ```azurecli
+ kubectl get csidriver
+ ```
+
+ For more information, see [kubectl get](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_get/).
+
+## Connect your Kubernetes cluster to Azure Arc
+
+1. Test your connection to your cluster by getting the [**kubeconfig** file](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/):
+
+ ```azurecli
+ az aks get-credentials \
+ --resource-group $AKS_CLUSTER_GROUP_NAME \
+ --name $AKS_NAME \
+ --admin
+ kubectl get ns
+ ```
+
+ By default, the **kubeconfig** file is saved to the path, **~/.kube/config**. This command applies to our example Kubernetes cluster and differs for other kinds of Kubernetes clusters.
+
+ For more information, see the following resources:
+
+ - [Create connected cluster](../container-apps/azure-arc-enable-cluster.md?tabs=azure-cli#create-a-connected-cluster)
+ - [az aks get-credentials](/cli/azure/aks#az-aks-get-credentials)
+ - [kubectl get](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_get/)
+
+1. Based on your Kubernetes cluster deployment, set the following environment variable to provide a name to use for the Azure resource group that contains your Azure Arc-enabled cluster and resources:
+
+ ```azurecli
+ GROUP_NAME="<Azure-Arc-cluster-resource-group-name>"
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **GROUP_NAME** | Yes | <*Azure-Arc-cluster-resource-group-name*> | The name for the Azure resource group to use with your Azure Arc-enabled cluster and other resources, such as your Azure Container Apps extension, custom location, and Azure Container Apps connected environment. This name must be unique across regions and can contain only letters, numbers, hyphens (**-**), underscores (**_**), parentheses (**()**), and periods (**.**). <br><br>This example uses **Hybrid-Arc-RG**. |
+
+1. Create the Azure resource group for your Azure Arc-enabled cluster and resources:
+
+ ```azurecli
+ az group create \
+ --name $GROUP_NAME \
+ --location $LOCATION
+ ```
+
+ For more information, see the following resources:
+
+ - [Create connected cluster](../container-apps/azure-arc-enable-cluster.md?tabs=azure-cli#create-a-connected-cluster)
+ - [az group create](/cli/azure/group#az-group-create)
+
+1. Set the following environment variable to provide a name for your Azure Arc-enabled Kubernetes cluster:
+
+ ```azurecli
+ CONNECTED_CLUSTER_NAME="$GROUP_NAME-cluster"
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **CONNECTED_CLUSTER_NAME** | Yes | <*Azure-Arc-cluster-resource-group-name*>-**cluster** | The name to use for your Azure Arc-enabled cluster. This name must be unique across regions and can contain only letters, numbers, hyphens (**-**), underscores (**_**), parentheses (**()**), and periods (**.**). <br><br>This example uses **Hybrid-Arc-RG-cluster**. |
+
+1. Connect your previously created Kubernetes cluster to Azure Arc:
+
+ ```azurecli
+ az connectedk8s connect \
+ --resource-group $GROUP_NAME \
+ --name $CONNECTED_CLUSTER_NAME
+ ```
+
+ For more information, see the following resources:
+
+ - [Create connected cluster](../container-apps/azure-arc-enable-cluster.md?tabs=azure-cli#create-a-connected-cluster)
+ - [az connectedk8s connect](/cli/azure/connectedk8s?#az-connectedk8s-connect)
+
+1. Validate the connection between Azure Arc and your Kubernetes cluster:
+
+ ```azurecli
+ az connectedk8s show \
+ --resource-group $GROUP_NAME \
+ --name $CONNECTED_CLUSTER_NAME
+ ```
+
+ If the output shows that the **provisioningState** property value isn't set to **Succeeded**, run the command again after one minute.
+
+ For more information, see the following resources:
+
+ - [Create connected cluster](../container-apps/azure-arc-enable-cluster.md?tabs=azure-cli#create-a-connected-cluster)
+ - [az connectedk8s show](/cli/azure/connectedk8s?#az-connectedk8s-show)
+
+## Create an Azure Log Analytics workspace
+
+You can create an optional, but recommended, Azure Log Analytics workspace, which provides access to logs for apps that run in your Azure Arc-enabled Kubernetes cluster.
+
+1. Set the following environment variable to provide a name your Log Analytics workspace:
+
+ ```azurecli
+ WORKSPACE_NAME="$GROUP_NAME-workspace"
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **WORKSPACE_NAME** | Yes | <*Azure-Arc-cluster-resource-group-name*>**-workspace** | The name to use for your Log Analytics workspace. This name must be unique within your resource group. <br><br>This example uses **Hybrid-Arc-RG-workspace**. |
+
+1. Create the Log Analytics workspace:
+
+ ```azurecli
+ az monitor log-analytics workspace create \
+ --resource-group $GROUP_NAME \
+ --workspace-name $WORKSPACE_NAME
+ ```
+
+ For more information, see the following resources:
+
+ - [Create a Log Analytics workspace](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#create-a-log-analytics-workspace)
+ - [az monitor log-analytics](/cli/azure/monitor/log-analytics)
+
+1. Get the base64-encoded ID and shared key for your Log Analytics workspace. You need these values for a later step.
+
+ ```azurecli
+ LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
+ --resource-group $GROUP_NAME \
+ --workspace-name $WORKSPACE_NAME \
+ --query customerId \
+ --output tsv)
+
+ LOG_ANALYTICS_WORKSPACE_ID_ENC=[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($LOG_ANALYTICS_WORKSPACE_ID))
+
+ LOG_ANALYTICS_KEY=$(az monitor log-analytics workspace get-shared-keys \
+ --resource-group $GROUP_NAME \
+ --workspace-name $WORKSPACE_NAME \
+ --query primarySharedKey \
+ --output tsv)
+
+ LOG_ANALYTICS_KEY_ENC=[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($LOG_ANALYTICS_KEY))
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **LOG_ANALYTICS_WORKSPACE_ID** | Yes | The ID for your Log Analytics workspace. |
+ | **LOG_ANALYTICS_WORKSPACE_ID_ENC** | Yes | The base64-encoded ID for your Log Analytics workspace. |
+ | **LOG_ANALYTICS_KEY** | Yes | The shared key for your Log Analytics workspace. |
+ | **LOG_ANALYTICS_ENC** | Yes | The base64-encoded shared key for your Log Analytics workspace. |
+
+ For more information, see the following resources:
+
+ - [Create a Log Analytics workspace](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#create-a-log-analytics-workspace)
+ - [az monitor log-analytics](/cli/azure/monitor/log-analytics)
+
+## Create and install the Azure Container Apps extension
+
+Now, create and install the Azure Container Apps extension with your Azure Arc-enabled Kubernetes cluster as an on-premises resource.
+
+> [!IMPORTANT]
+>
+> If you want to deploy to AKS on Azure Stack HCI, before you create and install the Azure Container Apps extension,
+> make sure that you [set up **HAProxy** or a custom load balancer](/azure/aks/hybrid/configure-load-balancer).
+
+1. Set the following environment variables to the following values:
+
+ ```azurecli
+ EXTENSION_NAME="logicapps-aca-extension"
+ NAMESPACE="logicapps-aca-ns"
+ CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **EXTENSION_NAME** | Yes | **logicapps-aca-extension** | The name for the Azure Container Apps extension. |
+ | **NAMESPACE** | Yes | **logicapps-aca-ns** | The cluster namespace where you want to provision resources. |
+ | **CONNECTED_ENVIRONMENT_NAME** | Yes | <*connected-environment-name*> | A unique name to use for the Azure Container Apps connected environment. This name becomes part of the domain name for the Standard logic app that you create, deploy, and host in the Azure Container Apps connected environment. |
+
+1. Create and install the extension with Log Analytics enabled for your Azure Arc-enabled Kubernetes cluster. You can't later add Log Analytics to the extension.
+
+ ```azurecli
+ az k8s-extension create \
+ --resource-group $GROUP_NAME \
+ --name $EXTENSION_NAME \
+ --cluster-type connectedClusters \
+ --cluster-name $CONNECTED_CLUSTER_NAME \
+ --extension-type 'Microsoft.App.Environment' \
+ --release-train stable \
+ --auto-upgrade-minor-version true \
+ --scope cluster \
+ --release-namespace $NAMESPACE \
+ --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" \
+ --configuration-settings "appsNamespace=${NAMESPACE}" \
+ --configuration-settings "keda.enabled=true" \
+ --configuration-settings "keda.logicAppsScaler.enabled=true" \
+ --configuration-settings "keda.logicAppsScaler.replicaCount=1" \
+ --configuration-settings "containerAppController.api.functionsServerEnabled=true" \
+ --configuration-settings "envoy.externalServiceAzureILB=false" \
+ --configuration-settings "functionsProxyApiConfig.enabled=true" \
+ --configuration-settings "clusterName=${CONNECTED_ENVIRONMENT_NAME}" \
+ --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${GROUP_NAME}" \
+ --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
+ --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
+ --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
+ ```
+
+ | Parameter | Required | Description |
+ |--|-|-|
+ | **Microsoft.CustomLocation.ServiceAccount** | Yes | The service account created for the custom location. <br><br>**Recommendation**: Set the value to **default**. |
+ | **appsNamespace** | Yes | The namespace to use for creating app definitions and revisions. This value must match the release namespace for the Azure Container Apps extension. |
+ | **clusterName** | Yes | The name for the Azure Container Apps extension Kubernetes environment to create for the extension. |
+ | **keda.enabled** | Yes | Enable [Kubernetes Event-driven Autoscaling (KEDA)](https://keda.sh/). This value is required and must be set to **true**. |
+ | **keda.logicAppsScaler.enabled** | Yes | Enable the Azure Logic Apps scaler in KEDA. This value is required and must be set to **true**. |
+ | **keda.logicAppsScaler.replicaCount** | Yes | The initial number of logic app scalers to start. The default value set to **1**. This value scales up or scales down to **0**, if no logic apps exist in the environment. |
+ | **containerAppController.api.functionsServerEnabled** | Yes | Enable the service responsible for converting logic app workflow triggers to KEDA-scaled objects. This value is required and must be set to **true**. |
+ | **envoy.externalServiceAzureILB** | Yes | Determines whether the envoy acts as an internal load balancer or a public load balancer. <br><br>- **true**: The envoy acts as an internal load balancer. The Azure Logic Apps runtime is accessible only within private network. <br><br>- **false**: The envoy acts as a public load balancer. The Azure Logic Apps runtime is accessible over the public network. |
+ | **functionsProxyApiConfig.enabled** | Yes | Enable the proxy service that facilitates API access to the Azure Logic Apps runtime from the Azure portal. This value is required and must be set to **true**. |
+ | **envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group** | Yes, but only when the underlying cluster is Azure Kubernetes Service. | The name for the resource group where the Kubernetes cluster exists. |
+ | **logProcessor.appLogs.destination** | No | The destination to use for application logs. The value is either **log-analytics** or **none**, which disables logging. |
+ | **logProcessor.appLogs.logAnalyticsConfig.customerId** | Yes, but only when **logProcessor.appLogs.destination** is set to **log-analytics**. | The base64-encoded ID for your Log Analytics workspace. Make sure to configure this parameter as a protected setting. |
+ | **logProcessor.appLogs.logAnalyticsConfig.sharedKey** | Yes, but only when **logProcessor.appLogs.destination** is set to **log-analytics**. | The base64-encoded shared key for your Log Analytics workspace. Make sure to configure this parameter as a protected setting. |
+
+ For more information, see the following resources:
+
+ - [Install the Azure Container Apps extension](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#install-the-container-apps-extension)
+ - [az k8s-extension create](/cli/azure/k8s-extension?#az-k8s-extension-create)
+
+1. Save theΓÇ»**ID** value for the Azure Container Apps extension to use later:
+
+ ```azurecli
+ EXTENSION_ID=$(az k8s-extension show \
+ --cluster-type connectedClusters \
+ --cluster-name $CONNECTED_CLUSTER_NAME \
+ --resource-group $GROUP_NAME \
+ --name $EXTENSION_NAME \
+ --query id \
+ --output tsv)
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **EXTENSION_ID** | Yes | <*extension-ID*> | The ID for the Azure Container Apps extension. |
+
+ For more information, see the following resources:
+
+ - [Install the Azure Container Apps extension](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#install-the-container-apps-extension)
+ - [az k8s-extension show](/cli/azure/k8s-extension?#az-k8s-extension-show)
+
+1. Before you continue, wait for the extension to fully install. To have your terminal session wait until the installation completes, run the following command:
+
+ ```azurecli
+ az resource wait \
+ --ids $EXTENSION_ID \
+ --custom "properties.provisioningState!='Pending'" \
+ --api-version "2020-07-01-preview"
+ ```
+
+ For more information, see the following resources:
+
+ - [Install the Azure Container Apps extension](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#install-the-container-apps-extension)
+ - [az resource wait](/cli/azure/resource?#az-resource-wait)
+
+## Create your custom location
+
+1. Set the following environment variables to the specified values:
+
+ ```azurecli
+ CUSTOM_LOCATION_NAME="my-custom-location"
+
+ CONNECTED_CLUSTER_ID=$(az connectedk8s show \
+ --resource-group $GROUP_NAME \
+ --name $CONNECTED_CLUSTER_NAME \
+ --query id \
+ --output tsv)
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **CUSTOM_LOCATION_NAME** | Yes | **my-custom-location** | The name to use for your custom location. |
+ | **CONNECTED_CLUSTER_ID** | Yes | <*Azure-Arc-cluster-ID*> | The ID for the Azure Arc-enabled Kubernetes cluster. |
+
+ For more information, see the following resources:
+
+ - [Create a custom location](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#create-a-custom-location)
+ - [az k8s-extension show](/cli/azure/k8s-extension?#az-k8s-extension-show)
+
+1. Create the custom location:
+
+ ```azurecli
+ az customlocation create \
+ --resource-group $GROUP_NAME \
+ --name $CUSTOM_LOCATION_NAME \
+ --host-resource-id $CONNECTED_CLUSTER_ID \
+ --namespace $NAMESPACE \
+ --cluster-extension-ids $EXTENSION_ID \
+ --location $LOCATION
+ ```
+
+ > [!NOTE]
+ >
+ > If you experience issues creating a custom location on your cluster, you might have to
+ > [enable the custom location feature on your cluster](/azure/azure-arc/kubernetes/custom-locations#enable-custom-locations-on-your-cluster).
+ > This step is required if you signed in to Azure CLI using a service principal, or if
+ > you signed in as a Microsoft Entra user with restricted permissions on the cluster resource.
+
+ For more information, see the following resources:
+
+ - [Create a custom location](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#create-a-custom-location)
+ - [az customlocation create](/cli/azure/customlocation#az-customlocation-create)
+
+1. Validate that the custom location is successfully created:
+
+ ```azurecli
+ az customlocation show \
+ --resource-group $GROUP_NAME \
+ --name $CUSTOM_LOCATION_NAME
+ ```
+
+ If the output shows that the **provisioningState** property value isn't set to **Succeeded**, run the command again after one minute.
+
+1. Save the custom location ID for use in a later step:
+
+ ```azurecli
+ CUSTOM_LOCATION_ID=$(az customlocation show \
+ --resource-group $GROUP_NAME \
+ --name $CUSTOM_LOCATION_NAME \
+ --query id \
+ --output tsv)
+ ```
+
+ | Parameter | Required | Value | Description |
+ |--|-|-|-|
+ | **CUSTOM_LOCATION_ID** | Yes | <*my-custom-location-ID*> | The ID for your custom location. |
+
+ For more information, see the following resources:
+
+ - [Create a custom location](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#create-a-custom-location)
+ - [az customlocation show](/cli/azure/customlocation#az-customlocation-show)
+
+## Create the Azure Container Apps connected environment
+
+Now, create your Azure Container Apps connected environment for your Standard logic app to use.
+
+```azurecli
+az containerapp connected-env create \
+ --resource-group $GROUP_NAME \
+ --name $CONNECTED_ENVIRONMENT_NAME \
+ --custom-location $CUSTOM_LOCATION_ID \
+ --location $LOCATION
+```
+
+For more information, see the following resources:
+
+- [Create a custom location](/azure/container-apps/azure-arc-enable-cluster?tabs=azure-cli#create-the-azure-container-apps-connected-environment)
+- [az containerapp connected-env create](/cli/azure/containerapp#az-containerapp-create)
+
+<a name="create-storage-provider"></a>
+
+## Create SQL Server storage provider
+
+Standard logic app workflows in the hybrid deployment model use a SQL database as the storage provider for the data used by workflows and the Azure Logic Apps runtime, for example, workflow run history, inputs, outputs, and so on.
+
+Your SQL database requires inbound and outbound connectivity with your Kubernetes cluster, so these resources must exist in the same network.
+
+1. Set up any of the following SQL Server editions:
+
+ - SQL Server on premises
+ - [Azure SQL Database](/azure/azure-sql/database/sql-database-paas-overview)
+ - [Azure SQL Managed Instance](/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview)
+ - [SQL Server enabled by Azure Arc](/sql/sql-server/azure-arc/overview)
+
+ For more information, see [Set up SQL database storage for Standard logic app workflows](/azure/logic-apps/set-up-sql-db-storage-single-tenant-standard-workflows).
+
+1. Confirm that your SQL database is in the same network as your Arc-enabled Kubernetes cluster and SMB file share.
+
+1. Find and save the connection string for the SQL database that you created.
+
+<a name="set-up-smb-file-share"></a>
+
+## Set up SMB file share for artifacts storage
+
+To store artifacts such as maps, schemas, and assemblies for your container app resource, you need to have a file share that uses the [Server Message Block (SMB) protocol](/windows/win32/fileio/microsoft-smb-protocol-and-cifs-protocol-overview).
+
+- You need administrator access to set up your SMB file share.
+
+- Your SMB file share must exist in the same network as your Kubernetes cluster and SQL database.
+
+- Your SMB file share requires inbound and outbound connectivity with your Kubernetes cluster. If you enabled Azure virtual network restrictions, make sure that your file share exists in the same virtual network as your Kubernetes cluster or in a peered virtual network.
+
+- To deploy your logic app using Visual Studio Code, make sure that the local computer with Visual Studio Code can access the file share.
+
+### Set up your SMB file share on Windows
+
+Make sure that your SMB file share exists in the same virtual network as the cluster where you mount your file share.
+
+1. In Windows, go to the folder that you want to share, open the shortcut menu, select **Properties**.
+
+1. On the **Sharing** tab, select **Share**.
+
+1. In the box that opens, select a person who you want to have access to the file share.
+
+1. Select **Share**, and copy the link for the network path.
+
+ If your local computer isn't connected to a domain, replace the computer name in the network path with the IP address.
+
+1. Save the IP address to use later as the host name.
+
+### Set up Azure Files as your SMB file share
+
+Alternatively, for testing purposes, you can use [Azure Files as an SMB file share](/azure/storage/files/files-smb-protocol). Make sure that your SMB file share exists in the same virtual network as the cluster where you mount your file share.
+
+1. In the [Azure portal](https://portal.azure.com), [create an Azure storage account](/azure/storage/files/storage-how-to-create-file-share?tabs=azure-portal#create-a-storage-account).
+
+1. From the storage account menu, under **Data storage**, select **File shares**.
+
+1. From the **File shares** page toolbar, select **+ File share**, and provide the required information for your SMB file share.
+
+1. After deployment completes, select **Go to resource**.
+
+1. On the file share menu, select **Overview**, if not selected.
+
+1. On the **Overview** page toolbar, select **Connect**. On the **Connect** pane, select **Show script**.
+
+1. Copy the following values and save them somewhere safe for later use:
+
+ - File share's host name, for example, **mystorage.file.core.windows.net**
+ - File share path
+ - Username without **`localhost\`**
+ - Password
+
+1. On the **Overview** page toolbar, select **+ Add directory**, and provide a name to use for the directory. Save this name to use later.
+
+You need these saved values to provide your SMB file share information when you deploy your container app resource.
+
+For more information, see [Create an SMB Azure file share](/azure/storage/files/storage-how-to-create-file-share?tabs=azure-portal).
+
+## Confirm SMB file share connection
+
+To test the connection between your Arc-enabled Kubernetes cluster and your SMB file share, and to check that your file share is correctly set up, follow these steps:
+
+- If your SMB file share isn't on the same cluster, confirm that the ping operation works from your Arc-enabled Kubernetes cluster to the virtual machine that has your SMB file share. To check that the ping operation works, follow these steps:
+
+ 1. In your Arc-enabled Kubernetes cluster, create a test [pod](/azure/aks/core-aks-concepts#pods) that runs any Linux image, such as BusyBox or Ubuntu.
+
+ 1. Go to the container in your pod, and install the **iputils-ping** package by running the following Linux commands:
+
+ ```
+ apt-get update
+ apt-get install iputils-ping
+ ```
+
+- To confirm that your SMB file share is correctly set up, follow these steps:
+
+ 1. In your test pod with the same Linux image, create a folder that has the path named **mnt/smb**.
+
+ 1. Go to the root or home directory that contains the **mnt** folder.
+
+ 1. Run the following command:
+
+ **`- mount -t cifs //{ip-address-smb-computer}/{file-share-name}/mnt/smb -o username={user-name}, password={password}`**
+
+- To confirm that artifacts correctly upload, connect to the SMB file share path, and check whether artifact files exist in the correct folder that you specify during deployment.
+
+## Next steps
+
+[Create Standard logic app workflows for hybrid deployment on your own infrastructure](create-standard-workflows-hybrid-deployment.md)
logic-apps Tutorial Build Schedule Recurring Logic App Workflow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/tutorial-build-schedule-recurring-logic-app-workflow.md
You can create a similar workflow with a Standard logic app resource. However, t
The **Create Logic App** page appears and shows the following options:
- [!INCLUDE [logic-apps-host-plans](../../includes/logic-apps-host-plans.md)]
+ [!INCLUDE [logic-apps-host-plans](includes/logic-apps-host-plans.md)]
1. On the **Create Logic App** page, select **Consumption (Multi-tenant)**.
logic-apps Tutorial Process Email Attachments Workflow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/tutorial-process-email-attachments-workflow.md
After you confirm that your function works, create your logic app resource and w
The **Create Logic App** page appears and shows the following options:
- [!INCLUDE [logic-apps-host-plans](../../includes/logic-apps-host-plans.md)]
+ [!INCLUDE [logic-apps-host-plans](includes/logic-apps-host-plans.md)]
1. On the **Create Logic App** page, select **Consumption (Multi-tenant)**.
logic-apps Tutorial Process Mailing List Subscriptions Workflow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/logic-apps/tutorial-process-mailing-list-subscriptions-workflow.md
You can create a similar workflow with a Standard logic app resource where some
The **Create Logic App** page appears and shows the following options:
- [!INCLUDE [logic-apps-host-plans](../../includes/logic-apps-host-plans.md)]
+ [!INCLUDE [logic-apps-host-plans](includes/logic-apps-host-plans.md)]
1. On the **Create Logic App** page, select **Consumption (Multi-tenant)**.
migrate Migrate Support Matrix Vmware https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/migrate/vmware/migrate-support-matrix-vmware.md
Linux servers | Red Hat Enterprise Linux 5.1, 5.3, 5.11, 6.x, 7.x, 8.x <br /> Ub
Server requirements | VMware Tools (10.2.1 and later) must be installed and running on servers you want to analyze.<br /><br /> Servers must have PowerShell version 2.0 or later installed.<br /><br /> WMI should be enabled and available on Windows servers. vCenter Server account | The read-only account used by Azure Migrate and Modernize for assessment must have privileges for guest operations on VMware VMs. Windows server access | A user account (local or domain) with administrator permissions on servers.
-Linux server access | A sudo user account with permissions to execute ls and netstat commands. If you're providing a sudo user account, ensure that you enable **NOPASSWD** for the account to run the required commands without prompting for a password every time a sudo command is invoked. <br /><br /> Alternatively, you can create a user account that has the CAP_DAC_READ_SEARCH and CAP_SYS_PTRACE permissions on /bin/netstat and /bin/ls files set by using the following commands:<br /><code>sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/ls<br /> sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/netstat</code>
-Port access | The Azure Migrate appliance must be able to connect to TCP port 443 on ESXi hosts running the servers that have dependencies you want to discover. The server running vCenter Server returns an ESXi host connection to download the file containing the dependency data.
+Linux server access | A sudo user account with permissions to execute ls and netstat commands. If you're providing a sudo user account, ensure that you enable **NOPASSWD** for the account to run the required commands without prompting for a password every time a sudo command is invoked. <br /><br /> Alternatively, you can create a user account that has the CAP_DAC_READ_SEARCH and CAP_SYS_PTRACE permissions on /bin/netstat and /bin/ls files set by using the following commands:<br /><code>sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/ls<br /> sudo setcap CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE=ep /bin/netstat</code>|
+|Port access | The Azure Migrate appliance must be able to connect to TCP port 443 on ESXi hosts running the servers that have dependencies you want to discover. The server running vCenter Server returns an ESXi host connection to download the file containing the dependency data.
Discovery method | Dependency information between servers is gathered by using VMware Tools installed on the server running vCenter Server.<br /><br /> The appliance gathers the information from the server by using vSphere APIs.<br /><br /> No agent is installed on the server, and the appliance doesn't connect directly to servers.
+> [!Note]
+> In some recent Linux OS versions, the netstat command was replaced by the `ss` command; have that in mind when preparing the servers.
+ ::: zone-end ::: zone pivot="dependency-analysis-agent-based-requirements"
network-watcher Network Watcher Analyze Nsg Flow Logs Graylog https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/network-watcher/network-watcher-analyze-nsg-flow-logs-graylog.md
Previously updated : 09/26/2024 Last updated : 10/15/2024
In this example, both Graylog and Logstash are configured on an Ubuntu Server, d
- Refer to the [documentation](https://go2docs.graylog.org/5-0/downloading_and_installing_graylog/ubuntu_installation.html) from Graylog, for step by step instructions on how install onto Ubuntu. - Make sure to also configure the Graylog web interface by following the [documentation](https://archivedocs.graylog.org/en/3.2/pages/configuration/web_interface.html).
-This example uses the minimum Graylog setup (i.e a single instance of a Graylog), but Graylog can be architected to scale across resources depending on your system and production needs. For more information on architectural considerations or a deep architectural guide, see Graylog's [documentation](https://archivedocs.graylog.org/en/3.2/pages/architecture.html) and [architectural guide](https://www.slideshare.net/Graylog/graylog-engineering-design-your-architecture).
+This example uses the minimum Graylog setup (i.e. a single instance of a Graylog), but Graylog can be architected to scale across resources depending on your system and production needs. For more information on architectural considerations or a deep architectural guide, see Graylog's [documentation](https://archivedocs.graylog.org/en/3.2/pages/architecture.html) and [architectural guide](https://www.slideshare.net/Graylog/graylog-engineering-design-your-architecture).
Graylog can be installed in many ways, depending on your platform and preferences. For a full list of possible installation methods, refer to Graylog's official [documentation](https://archivedocs.graylog.org/en/3.2/pages/sidecar.html#installation). The Graylog server application runs on Linux distributions and has the following
The following instructions are used to install Logstash in Ubuntu. For instructi
} ```
- The Logstash config file provided is composed of three parts: the input, filter, and output. The input section designates the input source of the logs that Logstash will process - in this case, you are going to use an Azure blog input plugin (installed in the next steps) that allows us to access the network security group flow log JSON files stored in blob storage.
+ The Logstash config file provided is composed of three parts: the input, filter, and output. The input section designates the input source of the logs that Logstash will process - in this case, you're going to use an Azure blog input plugin (installed in the next steps) that allows us to access the network security group flow log JSON files stored in blob storage.
The filter section then flattens each flow log file so that each individual flow tuple and its associated properties becomes a separate Logstash event.
Now that you have established a connection to the flow logs using Logstash and s
1. Navigate to your Graylog Server web interface using the URL you configured for it. You can access the interface by directing your browser to `http://<graylog-server-ip>:9000/`
-2. To navigate to the configuration page, select the **System** drop-down menu in the top navigation bar to the right, and then click **Inputs**.
+2. To navigate to the configuration page, select the **System** drop-down menu in the top navigation bar to the right, and then select **Inputs**.
Alternatively, navigate to `http://<graylog-server-ip>:9000/system/inputs` ![Getting started](./media/network-watcher-analyze-nsg-flow-logs-graylog/getting-started.png)
Now that you have established a connection to the flow logs using Logstash and s
### Search through Graylog messages
-After allowing some time for your Graylog server to collect messages, you are able to search through the messages. To check the messages being sent to your Graylog server, from the **Inputs** configuration page click the "**Show received messages**" button of the GELF UDP input you created. You are directed to a screen that looks similar to the following picture:
+After allowing some time for your Graylog server to collect messages, you're able to search through the messages. To check the messages being sent to your Graylog server, from the **Inputs** configuration page select the "**Show received messages**" button of the GELF UDP input you created. You're directed to a screen that looks similar to the following picture:
![Screenshot shows the Graylog server that displays Search result, Histogram, and Messages.](./media/network-watcher-analyze-nsg-flow-logs-graylog/histogram.png)
-Clicking on the blue "%{Message}" link expands each message to show the parameters of each flow tuple, as shown in the following picture:
+Select the blue **%{Message}** link to expand the message to show the parameters of the flow tuple.
-![Screenshot shows message detail from the Graylog server.](./media/network-watcher-analyze-nsg-flow-logs-graylog/messages.png)
-
-By default, all message fields are included in the search if you don't select a specific message field to search for. If you want to search for specific messages (i.e - flow tuples from a specific source IP) you can use the Graylog search query language as [documented](https://archivedocs.graylog.org/en/3.2/pages/queries.html)
+By default, all message fields are included in the search if you don't select a specific message field to search for. If you want to search for specific messages (i.e. - flow tuples from a specific source IP) you can use the Graylog search query language as [documented](https://archivedocs.graylog.org/en/3.2/pages/queries.html)
## Analyze network security group flow logs using Graylog
Now that Graylog it set up running, you can use some of its functionality to bet
1. In the top navigation bar, select **Dashboards** or navigate to `http://<graylog-server-ip>:9000/dashboards/`
-2. From there, click the green **Create dashboard** button and fill out the short form with the title and description of your dashboard. Hit the
+2. From there, select the green **Create dashboard** button and fill out the short form with the title and description of your dashboard. Hit the
**Save** button to create the new dashboard. You see a dashboard similar to the following picture: ![Screenshot shows Graylog server Dashboards, with the options to create and edit dashboards.](./media/network-watcher-analyze-nsg-flow-logs-graylog/dashboards.png) ### Add widgets
-You can click the title of the dashboard to see it, but right now it's empty, since we haven't added any widgets. An easy and useful type widget to add to
+You can select the title of the dashboard to see it, but right now it's empty, since we haven't added any widgets. An easy and useful type widget to add to
the dashboard are **Quick Values** charts, which display a list of values of the selected field, and their distribution. 1. Navigate back to the search results of the UDP input that's receiving flow logs by selecting **Search** from the top navigation bar.
the dashboard are **Quick Values** charts, which display a list of values of the
2. Under the **Search result** panel to the left side of the screen, find the **Fields** tab, which lists the various fields of each incoming flow tuple message.
-3. Select any desired parameter in which to visualize (in this example, the IP source is selected). To show the list of possible widgets, click the blue drop-down arrow to the left of the field, then select **Quick values** to generate the widget. You should see something similar to the following picture:
+3. Select any desired parameter in which to visualize (in this example, the IP source is selected). To show the list of possible widgets, select the blue drop-down arrow to the left of the field, then select **Quick values** to generate the widget. You should see something similar to the following picture:
![Source IP](./media/network-watcher-analyze-nsg-flow-logs-graylog/srcip.png)
the dashboard are **Quick Values** charts, which display a list of values of the
By integrating Network Watcher with Graylog, you now have a convenient and centralized way to manage and visualize network security group flow logs. Graylog has a number of other powerful features such as streams and alerts that can also be used to further manage flow logs and better understand your network traffic. Now that you have Graylog set up and connected to Azure, feel free to continue to explore the other functionality that it offers.
-## Next steps
+## Next step
-Learn how to visualize your network security group flow logs with Power BI by visiting [Visualize network security group flows logs with Power
-BI](network-watcher-visualize-nsg-flow-logs-power-bi.md).
+> [!div class="nextstepaction"]
+> [Visualize network security group flows logs with Power BI](network-watcher-visualize-nsg-flow-logs-power-bi.md)
notification-hubs Ios Sdk Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/notification-hubs/ios-sdk-get-started.md
You'll also need the following:
- An iPhone or iPad running iOS version 10 or later. - Your physical device registered in the [Apple Portal](https://developer.apple.com/) and associated with your certificate.
-Be sure to read the [Azure Notification Hubs overview](notification-hubs-push-notification-overview.md) if youΓÇÖre not familiar with the service.
+Be sure to read the [Azure Notification Hubs overview](notification-hubs-push-notification-overview.md) if you're not familiar with the service.
> [!NOTE] > The notification hub will be configured to use the Sandbox authentication mode only. You should not use this authentication mode for production workloads.
Generate the Certificate Signing Request (CSR) file, which Apple uses to generat
2. Select **Keychain Access**, expand **Certificate Assistant**, and then select **Request a Certificate from a Certificate Authority**.
- :::image type="content" source="media/ios-sdk-get-started/image1.png" alt-text="Screenshot that highlights the Request a Certificate from a Certificate Authority menu option.":::
- > [!NOTE] > By default, Keychain Access selects the first item in the list. This can be a problem if you're in the **Certificates** category and **Apple Worldwide Developer Relations Certification Authority** is not the first item in the list. Make sure you have a non-key item, or the **Apple Worldwide Developer Relations Certification Authority** key is selected, before generating the CSR (Certificate Signing Request).
Apple, and also register for push notifications.
- **Description**: Type a descriptive name for your app. - **Bundle ID**: Enter a Bundle ID of the form **Organization Identifier.Product Name** as mentioned in the [App Distribution Guide](https://help.apple.com/xcode/mac/current/#/dev91fe7130a). The **Organization Identifier** and **Product Name** values must match the organization identifier and product name you use when you create your Xcode project. In the following screenshot, the **NotificationHubs** value is used as an organization identifier and the **GetStarted** value is used as the product name. Make sure the **Bundle Identifier** value matches the value in your Xcode project, so that Xcode uses the correct publishing profile.
- :::image type="content" source="media/ios-sdk-get-started/image6.png" alt-text="Register app ID":::
- - **Push Notifications**: Check the **Push Notifications** option in the **Capabilities** section. :::image type="content" source="media/ios-sdk-get-started/image7.png" alt-text="Register new app ID":::
The second option has a number of benefits compared to using certificates, as do
2. The **Apple Push Notification service SSL Certificates** window appears. Select the **Create Certificate** button in the **Development SSL Certificate** section.
- :::image type="content" source="media/ios-sdk-get-started/image10.png" alt-text="Create certificate":::
- The **Create a new Certificate** screen is displayed. > [!NOTE]
The second option has a number of benefits compared to using certificates, as do
4. After the portal creates the certificate, select the **Download** button. Save the certificate, and remember the location to which it's saved.
- :::image type="content" source="media/ios-sdk-get-started/image11.png" alt-text="Download certificate":::
-
- The certificate is downloaded and saved in your **Downloads** folder.
+ The certificate is downloaded and saved in your **Downloads** folder:
:::image type="content" source="media/ios-sdk-get-started/image12.png" alt-text="Locate certificate file"::: By default, the downloaded development certificate is named **aps_development.cer**.
-5. Double-click the downloaded push certificate **aps\_development.cer**. This action installs the new certificate in the Keychain, as shown in the following image:
-
- :::image type="content" source="media/ios-sdk-get-started/image13.png" alt-text="Keychain access":::
-
- Although the name in your certificate might be different, the name will be prefixed with **Apple Development iOS Push Services**.
+5. Double-click the downloaded push certificate **aps\_development.cer**. This action installs the new certificate in the Keychain.
6. In Keychain Access, right-click the new push certificate that you created in the **Certificates** category. Select **Export**, name the file, select the **.p12** format, and then select **Save**.
- :::image type="content" source="media/ios-sdk-get-started/image14.png" alt-text="Export certificate":::
- You can choose to protect the certificate with a password, but this is optional. Click **OK** if you want to bypass password creation. Make a note of the file name and location of the exported .p12 certificate. They are used to enable authentication with APNS. > [!NOTE]
You've now configured your notification hub with APNS. You also have the connect
## Next steps
-In this tutorial, you created and configured a notification hub in Azure and configured it to allow notifications to be sent to your application through Apple Push Notification Service (APNS). Next, weΓÇÖll create a sample iOS application and integrate the Azure Notifications Hubs SDK so that it can receive push notifications sent through the Azure portal. Advance to the following tutorial based on your language of choice:
+In this tutorial, you created and configured a notification hub in Azure and configured it to allow notifications to be sent to your application through Apple Push Notification Service (APNS). Next, we'll create a sample iOS application and integrate the Azure Notifications Hubs SDK so that it can receive push notifications sent through the Azure portal. Advance to the following tutorial based on your language of choice:
- [Tutorial: Send push notifications to iOS apps using Azure Notification Hubs](ios-sdk-current.md)
notification-hubs Notification Hubs Push Bing Spatial Data Geofencing Notification https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/notification-hubs/notification-hubs-push-bing-spatial-data-geofencing-notification.md
In this tutorial, you take the following steps:
![Screenshot of the Solution right-click menu with the Store and Associate App with the Store options highlighted.](./media/notification-hubs-geofence/vs-associate-with-store.png) 3. Once you sign in to your developer account, make sure you select an existing app or create a new one and associate the package with it. 4. Go to the Dev Center and open the app that you created. Choose **Services** > **Push Notifications** > **Live Services site**.-
- ![Screenshot of Windows Dev Center displaying the Push notifications page with Live Services site highlighted.](./media/notification-hubs-geofence/ms-live-services.png)
5. On the site, take note of the **Application Secret** and the **Package SID**. You need both in the Azure portal ΓÇô open your notification hub, choose **Settings** > **Notification Services** > **Windows (WNS)** and enter the information in the required fields. ![Screenshot showing the Settings page with the Notification Services and Windows (WNS) options highlighted and the Package SID and Security Key values filled in.](./media/notification-hubs-geofence/notification-hubs-wns.png)
notification-hubs Notification Hubs Push Notification Http2 Token Authentication https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/notification-hubs/notification-hubs-push-notification-http2-token-authentication.md
The key identifier can be obtained from the **Keys** page under **Certificates,
### Application identifier and application name
-The application name and identifier are also available in the **Certificates, Identifiers & Profiles** page in the developer account:
-
-![Certificates and IDs](./media/notification-hubs-push-notification-http2-token-authentification/app-name.png)
+The application name and identifier are also available in the **Certificates, Identifiers & Profiles** page in the developer account.
### Configure via the .NET SDK or the Azure portal
openshift Configure Azure Ad Ui https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/openshift/configure-azure-ad-ui.md
Provide a name for the application, for example **aro-azuread-auth**, and fill i
Navigate to **Certificates & secrets** and click on **New client secret** and fill in the details. Make note of the key value, as you'll use it in a later stage. You won't be able to retrieve it again.
-![Create a secret](media/aro4-ad-clientsecret.png)
- Navigate to the **Overview** and make note of the **Application (client) ID** and **Directory (tenant) ID**. You'll need them in a later stage.
-![Retrieve Application (client) and Directory (tenant) IDs](media/aro4-ad-ids.png)
- ## Configure optional claims Application developers can use [optional claims](../active-directory/develop/active-directory-optional-claims.md) in their Microsoft Entra applications to specify which claims they want in tokens sent to their application.
We'll configure OpenShift to use the `email` claim and fall back to `upn` to set
Navigate to **Token configuration** and click on **Add optional claim**. Select **ID** then check the **email** and **upn** claims.
-![Screenshot that shows the email and upn claims that were added.](media/aro4-ad-tokens.png)
- ## Assign users and groups to the cluster (optional) Applications registered in a Microsoft Entra tenant are, by default, available to all users of the tenant who authenticate successfully. Microsoft Entra ID allows tenant administrators and developers to restrict an app to a specific set of users or security groups in the tenant.
Scroll down to select **Add** under **Identity Providers** and select **OpenID C
Fill in the name as **Microsoft Entra ID**, the **Client ID** as the **Application ID** and the **Client Secret**. The **Issuer URL** is formatted as such: `https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0`. Replace the placeholder with the Tenant ID you retrieved earlier.
-![Fill in OAuth details](media/aro4-oauth-idp-1.png)
- Scroll down to the **Claims** section and update the **Preferred Username** to use the value from the **upn** claim.
-![Fill in claims details](media/aro4-oauth-idp-2.png)
- <a name='verify-login-through-azure-active-directory'></a> ## Verify login through Microsoft Entra ID
openshift Howto Deploy With S2i https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/openshift/howto-deploy-with-s2i.md
https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/
Launch the console URL in a browser and login using the `kubeadmin` credentials. - Switch to the *Developer* perspective instead of the *Administrator* perspective in the left-hand side menu and select `demoproject` in the list of projects. You should then be at the *Topology* page for the project. :::image type="content" source="media/s2i/project-topology.png" alt-text="Azure Red Hat OpenShift project topology":::
openshift Howto Deploy With Serverless https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/openshift/howto-deploy-with-serverless.md
https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/
Open a web browser and open the console URL. Log in using `kubeadmin` credentials. - ## Install the OpenShift Serverless operator When you're logged into the OpenShift web console, confirm that you're in *Administrator* view. Open the *Operator Hub* and select the **OpenShift Serverless** operator.
operator-nexus Howto Baremetal Run Data Extract https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/operator-nexus/howto-baremetal-run-data-extract.md
Title: Troubleshoot bare metal machine issues using the `az networkcloud baremetalmachine run-data-extract` command for Azure Operator Nexus description: Step by step guide on using the `az networkcloud baremetalmachine run-data-extract` to extract data from a bare metal machine for troubleshooting and diagnostic purposes.--++ Previously updated : 05/15/2023 Last updated : 10/11/2024 # Troubleshoot bare metal machine issues using the `az networkcloud baremetalmachine run-data-extract` command
-There may be situations where a user needs to investigate and resolve issues with an on-premises bare metal machine. Azure Operator Nexus provides a prescribed set of data extract commands via `az networkcloud baremetalmachine run-data-extract`. These commands enable users to get diagnostic data from a bare metal machine.
+There might be situations where a user needs to investigate and resolve issues with an on-premises bare metal machine. Azure Operator Nexus provides a prescribed set of data extract commands via `az networkcloud baremetalmachine run-data-extract`. These commands enable users to get diagnostic data from a bare metal machine.
-The command produces an output file containing the results of the data extract located in the Cluster Manager's Azure Storage Account.
+The command produces an output file containing the results of the data extract. Users should configure the Cluster resource with a storage account and identity that has access to the storage account to receive the output. There's a deprecated method of sending data to the Cluster Manager storage account if a storage account hasn't been provided on the Cluster. The Cluster Manager's storage account will be disabled in a future release as using a separate storage account is more secure.
## Prerequisites -- This article assumes that you've installed the Azure command line interface and the `networkcloud` command line interface extension. For more information, see [How to Install CLI Extensions](./howto-install-cli-extensions.md).-- The target bare metal machine is on and has readyState set to True.
+- This article assumes that the Azure command line interface and the `networkcloud` command line interface extension are installed. For more information, see [How to Install CLI Extensions](./howto-install-cli-extensions.md).
+- The target bare metal machine is on and ready.
- The syntax for these commands is based on the 0.3.0+ version of the `az networkcloud` CLI. - Get the Cluster Managed Resource group name (cluster_MRG) that you created for Cluster resource.
-## Verify Storage Account access
+## Create and configure storage resources (customer-managed storage)
-Verify you have access to the Cluster Manager's storage account
- 1. From Azure portal, navigate to Cluster Manager's Storage account.
- 1. In the Storage account details, select **Storage browser** from the navigation menu on the left side.
- 1. In the Storage browser details, select on **Blob containers**.
- 1. If you encounter a `403 This request is not authorized to perform this operation.` while accessing the storage account, storage accountΓÇÖs firewall settings need to be updated to include the public IP address.
- 1. Request access by creating a support ticket via Portal on the Cluster Manager resource. Provide the public IP address that requires access.
+1. Create a storage account, or identify an existing storage account that you want to use. See [Create an Azure storage account](/azure/storage/common/storage-account-create?tabs=azure-portal).
+2. In the storage account, create a blob storage container. See [Create a container](/azure/storage/blobs/storage-quickstart-blobs-portal#create-a-container).
+3. Assign the "Storage Blob Data Contributor" role to users and managed identities which need access to the run-data-extract output. See [Assign an Azure role for access to blob data](/azure/storage/blobs/assign-azure-role-data-access?tabs=portal). The role must also be assigned to either a user-assigned managed identity or the cluster's own system-assigned managed identity. For more information on managed identities, see [Managed identities for Azure resources](/entra/identity/managed-identities-azure-resources/overview).
-## Executing a run command
+When assigning a role to the cluster's system-assigned identity, make sure you select the resource with the type "Cluster (Operator Nexus)."
+
+## Configure the cluster to use a user-assigned managed identity for storage access
+
+Use this command to configure the cluster for a user-assigned identity:
+
+```azurecli-interactive
+az networkcloud cluster update --name "<cluster-name>" \
+ --resource-group "<cluster-resource-group>" \
+ --mi-user-assigned "<user-assigned-identity-resource-id>" \
+ --command-output-settings identity-type="UserAssignedIdentity" \
+ identity-resource-id="<user-assigned-identity-resource-id>" \
+ container-url="<container-url>" \
+ --subscription "<subscription>"
+```
+
+The identity resource ID can be found by clicking "JSON view" on the identity resource; the ID is at the top of the panel that appears. The container URL can be found on the Settings -> Properties tab of the container resource.
+
+## Configure the cluster to use a system-assigned managed identity for storage access
+
+Use this command to configure the cluster to use its own system-assigned identity:
+
+```azurecli-interactive
+az networkcloud cluster update --name "<cluster-name>" \
+ --resource-group "<cluster-resource-group>" \
+ --mi-system-assigned true \
+ --command-output-settings identity-type="SystemAssignedIdentity" \
+ container-url="<container-url>" \
+ --subscription "<subscription>"
+```
+
+To change the cluster from a user-assigned identity to a system-assigned identity, the CommandOutputSettings must first be cleared using the command in the next section, then set using this command.
+
+## Clear the cluster's CommandOutputSettings
+
+The CommandOutputSettings can be cleared, directing run-data-extract output back to the cluster manager's storage. However, it isn't recommended since it's less secure, and the option will be removed in a future release.
+
+However, the CommandOutputSettings do need to be cleared if switching from a user-assigned identity to a system-assigned identity.
+
+Use this command to clear the CommandOutputSettings:
+
+```azurecli-interactive
+az rest --method patch \
+ --url "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<cluster-resource-group>/providers/Microsoft.NetworkCloud/clusters/<cluster-name>?api-version=2024-08-01-preview" \
+ --body '{"properties": {"commandOutputSettings":null}}'
+```
+
+## Verify Storage Account access (cluster manager storage)
+
+If using the deprecated Cluster Manager storage method, verify you have access to the Cluster Manager's storage account
+
+1. From Azure portal, navigate to Cluster Manager's Storage account.
+1. In the Storage account details, select **Storage browser** from the navigation menu on the left side.
+1. In the Storage browser details, select on **Blob containers**.
+1. If you encounter a `403 This request is not authorized to perform this operation.` while accessing the storage account, storage accountΓÇÖs firewall settings need to be updated to include the public IP address.
+1. Request access by creating a support ticket via Portal on the Cluster Manager resource. Provide the public IP address that requires access.
+
+## Execute a run command
The run data extract command executes one or more predefined scripts to extract data from a bare metal machine.
The current list of supported commands are
- [SupportAssist/TSR collection for Dell troubleshooting](#hardware-support-data-collection)\ Command Name: `hardware-support-data-collection`\ Arguments: Type of logs requested+ - `SysInfo` - System Information - `TTYLog` - Storage TTYLog data - `Debug` - debug logs
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName"
--limit-time-seconds 600 ```
-__`hardware-support-data-collection` Output__
+**`hardware-support-data-collection` Output**
```azurecli ====Action Command Output====
Script execution result can be found in storage account:
https://cm2p9bctvhxnst.blob.core.windows.net/bmm-run-command-output/dd84df50-7b02-4d10-a2be-46782cbf4eef-action-bmmdataextcmd.tar.gz?se=2023-04-14T01%3A00%3A15Zandsig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%2BM6rmxDFqXE%3Dandsp=randspr=httpsandsr=bandst=2023-04-13T21%3A00%3A15Zandsv=2019-12-12 ```
-__Example list of hardware support files collected__
+**Example list of hardware support files collected**
``` Archive: TSR20240227164024_FM56PK3.pl.zip
Archive: TSR20240227164024_FM56PK3.pl.zip
creating: tsr/hardware/spd/ creating: tsr/hardware/sysinfo/ creating: tsr/hardware/sysinfo/inventory/
- inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_BIOSAttribute.xml
- inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Sensor.xml
- inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_View.xml
- inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_SoftwareIdentity.xml
- inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Capabilities.xml
- inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_StatisticalData.xml
+ inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_BIOSAttribute.xml
+ inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Sensor.xml
+ inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_View.xml
+ inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_SoftwareIdentity.xml
+ inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Capabilities.xml
+ inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_StatisticalData.xml
creating: tsr/hardware/sysinfo/lcfiles/
- inflating: tsr/hardware/sysinfo/lcfiles/lclog_0.xml.gz
- inflating: tsr/hardware/sysinfo/lcfiles/curr_lclog.xml
+ inflating: tsr/hardware/sysinfo/lcfiles/lclog_0.xml.gz
+ inflating: tsr/hardware/sysinfo/lcfiles/curr_lclog.xml
creating: tsr/hardware/psu/ creating: tsr/hardware/idracstateinfo/
- inflating: tsr/hardware/idracstateinfo/avc.log
- extracting: tsr/hardware/idracstateinfo/avc.log.persistent.1
+ inflating: tsr/hardware/idracstateinfo/avc.log
+ extracting: tsr/hardware/idracstateinfo/avc.log.persistent.1
[..snip..] ```
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName"
--limit-time-seconds 600 ```
-__`mde-agent-information` Output__
+**`mde-agent-information` Output**
```azurecli ====Action Command Output====
Script execution result can be found in storage account:
https://cmzhnh6bdsfsdwpbst.blob.core.windows.net/bmm-run-command-output/f5962f18-2228-450b-8cf7-cb8344fdss63b0-action-bmmdataextcmd.tar.gz?se=2023-07-26T19%3A07%3A22Z&sig=X9K3VoNWRFP78OKqFjvYoxubp65BbNTq%2BGnlHclI9Og%3D&sp=r&spr=https&sr=b&st=2023-07-26T15%3A07%3A22Z&sv=2019-12-12 ```
-__Example JSON object collected__
+**Example JSON object collected**
``` {
__Example JSON object collected__
### Collect MDE Support Diagnostics
-Data collected from the `mde-support-diagnostics` command uses the MDE Client Analyzer tool to bundle information from `mdatp` commands and relevant log files. The storage account `tgz` file will contain a `zip` file named `mde-support-diagnostics-<hostname>.zip`. The `zip` should be sent along with any support requests to ensure the supporting teams can use the logs for troubleshooting and root cause analysis, if needed.
+Data collected from the `mde-support-diagnostics` command uses the MDE Client Analyzer tool to bundle information from `mdatp` commands and relevant log files. The storage account `tgz` file contains a `zip` file named `mde-support-diagnostics-<hostname>.zip`. The `zip` should be sent along with any support requests to ensure the supporting teams can use the logs for troubleshooting and root cause analysis, if needed.
This example executes the `mde-support-diagnostics` command without arguments.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName"
--limit-time-seconds 600 ```
-__`mde-support-diagnostics` Output__
+**`mde-support-diagnostics` Output**
```azurecli ====Action Command Output====
Executing mde-support-diagnostics command
[2024-01-23 16:07:44.348][INFO] Collecting MDE Health [...snip...] ================================
-Script execution result can be found in storage account:
- https://cmmj627vvrzkst.blob.core.windows.net/bmm-run-command-output/7c5557b9-b6b6-a4a4-97ea-752c38918ded-action-bmmdataextcmd.tar.gz?se=2024-01-23T20%3A11%3A32Z&sig=9h20XlZO87J7fCr0S1234xcyu%2Fl%2BVuaDh1BE0J6Yfl8%3D&sp=r&spr=https&sr=b&st=2024-01-23T16%3A11%3A32Z&sv=2019-12-12
+Script execution result can be found in storage account:
+ https://cmmj627vvrzkst.blob.core.windows.net/bmm-run-command-output/7c5557b9-b6b6-a4a4-97ea-752c38918ded-action-bmmdataextcmd.tar.gz?se=2024-01-23T20%3A11%3A32Z&sig=9h20XlZO87J7fCr0S1234xcyu%2Fl%2BVuaDh1BE0J6Yfl8%3D&sp=r&spr=https&sr=b&st=2024-01-23T16%3A11%3A32Z&sv=2019-12-12
```
-After downloading the execution result file, the support files can be unzipped for analysis.
+After you download the execution result file, the support files can be unzipped for analysis.
-__Example list of information collected by the MDE Client Analyzer__
+**Example list of information collected by the MDE Client Analyzer**
```azurecli Archive: mde-support-diagnostics-rack1compute02.zip
- inflating: mde_diagnostic.zip
- inflating: process_information.txt
- inflating: auditd_info.txt
- inflating: auditd_log_analysis.txt
- inflating: auditd_logs.zip
- inflating: ebpf_kernel_config.txt
- inflating: ebpf_enabled_func.txt
- inflating: ebpf_syscalls.zip
- inflating: ebpf_raw_syscalls.zip
- inflating: messagess.zip
- inflating: conflicting_processes_information.txt
+ inflating: mde_diagnostic.zip
+ inflating: process_information.txt
+ inflating: auditd_info.txt
+ inflating: auditd_log_analysis.txt
+ inflating: auditd_logs.zip
+ inflating: ebpf_kernel_config.txt
+ inflating: ebpf_enabled_func.txt
+ inflating: ebpf_syscalls.zip
+ inflating: ebpf_raw_syscalls.zip
+ inflating: messagess.zip
+ inflating: conflicting_processes_information.txt
[...snip...] ``` ### Hardware Rollup Status Data is collected with the `hardware-rollup-status` command and formatted as JSON to `/hostfs/tmp/runcommand/rollupStatus.json`. The JSON file is found
-in the data extract zip file located in the storage account. The data collected will show the health of the machine subsystems.
+in the data extract zip file located in the storage account. The data collected shows the health of the machine subsystems.
This example executes the `hardware-rollup-status` command without arguments.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName"
--limit-time-seconds 600 ```
-__`hardware-rollup-status` Output__
+**`hardware-rollup-status` Output**
```azurecli ====Action Command Output====
Script execution result can be found in storage account:
https://cmkfjft8twwpst.blob.core.windows.net/bmm-run-command-output/20b217b5-ea38-4394-9db1-21a0d392eff0-action-bmmdataextcmd.tar.gz?se=2023-09-19T18%3A47%3A17Z&sig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%3D&sp=r&spr=https&sr=b&st=2023-09-19T14%3A47%3A17Z&sv=2019-12-12 ```
-__Example JSON Collected__
+**Example JSON Collected**
``` {
__Example JSON Collected__
"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus", "@odata.type" : "#DellRollupStatusCollection.DellRollupStatusCollection", "Description" : "A collection of DellRollupStatus resource",
- "Members" :
+ "Members" :
[ { "@odata.context" : "/redfish/v1/$metadata#DellRollupStatus.DellRollupStatus",
__Example JSON Collected__
### Generate Cluster CVE Report
-Vulnerability data is collected with the `cluster-cve-report` command and formatted as JSON to `{year}-{month}-{day}-nexus-cluster-vulnerability-report.json`. The JSON file is found in the data extract zip file located in the storage account. The data collected will include vulnerability data per container image in the cluster.
+Vulnerability data is collected with the `cluster-cve-report` command and formatted as JSON to `{year}-{month}-{day}-nexus-cluster-vulnerability-report.json`. The JSON file is found in the data extract zip file located in the storage account. The data collected includes vulnerability data per container image in the cluster.
This example executes the `cluster-cve-report` command without arguments.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName"
--limit-time-seconds 600 ```
-__`cluster-cve-report` Output__
+**`cluster-cve-report` Output**
```azurecli ====Action Command Output====
Script execution result can be found in storage account:
https://cmkfjft8twwpst.blob.core.windows.net/bmm-run-command-output/20b217b5-ea38-4394-9db1-21a0d392eff0-action-bmmdataextcmd.tar.gz?se=2023-09-19T18%3A47%3A17Z&sig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%3D&sp=r&spr=https&sr=b&st=2023-09-19T14%3A47%3A17Z&sv=2019-12-12 ```
-__CVE Report Schema__
+**CVE Report Schema**
```JSON {
__CVE Report Schema__
} ```
-__CVE Data Details__
+**CVE Data Details**
-The CVE data is refreshed per container image every 24-hours based on Kubernetes resource instantiation or whenever there is a change to the Kubernetes resource referencing the image (whichever occurs first).
+The CVE data is refreshed per container image every 24 hours or when there's a change to the Kubernetes resource referencing the image.
## Viewing the Output
-Note the provided link to the tar.gz zipped file from the command execution. The tar.gz file name identifies the file in the Storage Account of the Cluster Manager resource group. You can also use the link to directly access the output zip file. The tar.gz file also contains the zipped extract command file outputs. Download the output file from the storage blob to a local directory by specifying the directory path in the optional argument `--output-directory`.
-Note: Storage Account could be locked resulting in `403 This request is not authorized to perform this operation.` due to networking or firewall restrictions. Refer [Verify Storage Account access](#verify-storage-account-access) for procedure to verify/request access.
+The command provides another command (if using customer provided storage) or a link (if using cluster manager storage) to download the full output. The tar.gz file also contains the zipped extract command file outputs. Download the output file from the storage blob to a local directory by specifying the directory path in the optional argument `--output-directory`.
+> [!WARNING]
+> Using the `--output-directory` argument will overwrite any files in the local directory that have the same name as the new files being created.
+
+> [!NOTE]
+> Storage Account could be locked resulting in `403 This request is not authorized to perform this operation.` due to networking or firewall restrictions. Refer to the [customer-managed storage](#create-and-configure-storage-resources-customer-managed-storage) or [cluster manager storage](#verify-storage-account-access-cluster-manager-storage) sections for procedures to verify access.
operator-nexus Howto Baremetal Run Read https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/operator-nexus/howto-baremetal-run-read.md
Title: Troubleshoot BMM issues using the `az networkcloud baremetalmachine run-read-command` for Operator Nexus
+ Title: Troubleshoot baremetal machine issues using the `az networkcloud baremetalmachine run-read-command` for Operator Nexus
description: Step by step guide on using the `az networkcloud baremetalmachine run-read-command` to run diagnostic commands on a BMM.--++ Previously updated : 03/23/2023 Last updated : 10/11/2024 # Troubleshoot BMM issues using the `az networkcloud baremetalmachine run-read-command`
-There may be situations where a user needs to investigate & resolve issues with an on-premises BMM. Operator Nexus provides the `az networkcloud baremetalmachine run-read-command` so users can run a curated list of read only commands to get information from a BMM.
+There might be situations where a user needs to investigate & resolve issues with an on-premises BMM. Operator Nexus provides the `az networkcloud baremetalmachine run-read-command` so users can run a curated list of read only commands to get information from a BMM.
-The command execution produces an output file containing the results that can be found in the Cluster Manager's Storage account.
+The command produces an output file containing its results. Users should configure the Cluster resource with a storage account and identity that has access to the storage account to receive the output. There's a deprecated method of sending data to the Cluster Manager storage account if a storage account hasn't been provided on the Cluster. The Cluster Manager's storage account will be disabled in a future release as using a separate storage account is more secure.
## Prerequisites 1. Install the latest version of the
- [appropriate CLI extensions](./howto-install-cli-extensions.md)
+ [appropriate CLI extensions](./howto-install-cli-extensions.md)
1. Ensure that the target BMM must have its `poweredState` set to `On` and have its `readyState` set to `True` 1. Get the Managed Resource group name (cluster_MRG) that you created for `Cluster` resource
-## Verify Storage Account access
+## Create and configure storage resources (customer-managed storage)
-Verify you have access to the Cluster Manager's storage account
- 1. From Azure portal, navigate to Cluster Manager's Storage account.
- 1. In the Storage account details, select **Storage browser** from the navigation menu on the left side.
- 1. In the Storage browser details, select on **Blob containers**.
- 1. If you encounter a `403 This request is not authorized to perform this operation.` while accessing the storage account, storage accountΓÇÖs firewall settings need to be updated to include the public IP address.
- 1. Request access by creating a support ticket via Portal on the Cluster Manager resource. Provide the public IP address that requires access.
-
-## Executing a run-read command
+1. Create a storage account, or identify an existing storage account that you want to use. See [Create an Azure storage account](/azure/storage/common/storage-account-create?tabs=azure-portal).
+2. In the storage account, create a blob storage container. See [Create a container](/azure/storage/blobs/storage-quickstart-blobs-portal#create-a-container).
+3. Assign the "Storage Blob Data Contributor" role to users and managed identities which need access to the run-read-command output. See [Assign an Azure role for access to blob data](/azure/storage/blobs/assign-azure-role-data-access?tabs=portal). The role must also be assigned to either a user-assigned managed identity or the cluster's own system-assigned managed identity. For more information on managed identities, see [Managed identities for Azure resources](/entra/identity/managed-identities-azure-resources/overview).
+
+When assigning a role to the cluster's system-assigned identity, make sure you select the resource with the type "Cluster (Operator Nexus)."
+
+## Configure the cluster to use a user-assigned managed identity for storage access
+
+Use this command to configure the cluster for a user-assigned identity:
+
+```azurecli-interactive
+az networkcloud cluster update --name "<cluster-name>" \
+ --resource-group "<cluster-resource-group>" \
+ --mi-user-assigned "<user-assigned-identity-resource-id>" \
+ --command-output-settings identity-type="UserAssignedIdentity" \
+ identity-resource-id="<user-assigned-identity-resource-id>" \
+ container-url="<container-url>" \
+ --subscription "<subscription>"
+```
+
+The identity resource ID can be found by clicking "JSON view" on the identity resource; the ID is at the top of the panel that appears. The container URL can be found on the Settings -> Properties tab of the container resource.
+
+## Configure the cluster to use a system-assigned managed identity for storage access
+
+Use this command to configure the cluster to use its own system-assigned identity:
+
+```azurecli-interactive
+az networkcloud cluster update --name "<cluster-name>" \
+ --resource-group "<cluster-resource-group>" \
+ --mi-system-assigned true \
+ --command-output-settings identity-type="SystemAssignedIdentity" \
+ container-url="<container-url>" \
+ --subscription "<subscription>"
+```
+
+To change the cluster from a user-assigned identity to a system-assigned identity, the CommandOutputSettings must first be cleared using the command in the next section, then set using this command.
+
+## Clear the cluster's CommandOutputSettings
+
+The CommandOutputSettings can be cleared, directing run-read-command output back to the cluster manager's storage. However, it isn't recommended since it's less secure, and the option will be removed in a future release.
+
+However, the CommandOutputSettings do need to be cleared if switching from a user-assigned identity to a system-assigned identity.
+
+Use this command to clear the CommandOutputSettings:
+
+```azurecli-interactive
+az rest --method patch \
+ --url "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<cluster-resource-group>/providers/Microsoft.NetworkCloud/clusters/<cluster-name>?api-version=2024-08-01-preview" \
+ --body '{"properties": {"commandOutputSettings":null}}'
+```
+
+## Verify Storage Account access (cluster manager storage)
+
+If using the deprecated Cluster Manager storage method, verify you have access to the Cluster Manager's storage account
+
+1. From Azure portal, navigate to Cluster Manager's Storage account.
+1. In the Storage account details, select **Storage browser** from the navigation menu on the left side.
+1. In the Storage browser details, select on **Blob containers**.
+1. If you encounter a `403 This request is not authorized to perform this operation.` while accessing the storage account, storage accountΓÇÖs firewall settings need to be updated to include the public IP address.
+1. Request access by creating a support ticket via Portal on the Cluster Manager resource. Provide the public IP address that requires access.
+
+## Execute a run-read command
The run-read command lets you run a command on the BMM that doesn't change anything. Some commands have more than one word, or need an argument to work. These commands are made like this to separate them from the ones that can change things. For example, run-read-command can use `kubectl get` but not `kubectl apply`. When you
-use these commands, you have to put all the words in the ΓÇ£commandΓÇ¥ field. For example,
+use these commands, you have to put all the words in the "command" field. For example,
`{"command":"kubectl get","arguments":["nodes"]}` is right; `{"command":"kubectl","arguments":["get","nodes"]}` is wrong.
which requires the `query` argument be provided to enforce read-only.
> [!WARNING] > Microsoft does not provide or support any Operator Nexus API calls that expect plaintext username and/or password to be supplied. Please note any values sent will be logged and are considered exposed secrets, which should be rotated and revoked. The Microsoft documented method for securely using secrets is to store them in an Azure Key Vault, if you have specific questions or concerns please submit a request via the Azure Portal.
-The list below shows the commands you can use. Commands in `*italics*` cannot have `arguments`; the rest can.
+This list shows the commands you can use. Commands in `*italics*` can't have `arguments`; the rest can.
- `arp` - `brctl show` - `dmidecode`-- *`fdisk -l`*
+- _`fdisk -l`_
- `host`-- *`hostname`*-- *`ifconfig -a`*-- *`ifconfig -s`*
+- _`hostname`_
+- _`ifconfig -a`_
+- _`ifconfig -s`_
- `ip address show` - `ip link show` - `ip maddress show`
The list below shows the commands you can use. Commands in `*italics*` cannot ha
- `kubectl describe` - `kubectl get` - `kubectl logs`-- *`mount`*
+- _`mount`_
- `ping`-- *`ss`*
+- _`ss`_
- `tcpdump` - `traceroute` - `uname`-- *`ulimit -a`*
+- _`ulimit -a`_
- `uptime` - `nc-toolbox nc-toolbox-runread ipmitool channel authcap` - `nc-toolbox nc-toolbox-runread ipmitool channel info`
The list below shows the commands you can use. Commands in `*italics*` cannot ha
- `nc-toolbox nc-toolbox-runread ipmitool sol payload status` - `nc-toolbox nc-toolbox-runread ipmitool user list` - `nc-toolbox nc-toolbox-runread ipmitool user summary`-- *`nc-toolbox nc-toolbox-runread racadm arp`*-- *`nc-toolbox nc-toolbox-runread racadm coredump`*
+- _`nc-toolbox nc-toolbox-runread racadm arp`_
+- _`nc-toolbox nc-toolbox-runread racadm coredump`_
- `nc-toolbox nc-toolbox-runread racadm diagnostics` - `nc-toolbox nc-toolbox-runread racadm eventfilters get` - `nc-toolbox nc-toolbox-runread racadm fcstatistics` - `nc-toolbox nc-toolbox-runread racadm get` - `nc-toolbox nc-toolbox-runread racadm getconfig` - `nc-toolbox nc-toolbox-runread racadm gethostnetworkinterfaces`-- *`nc-toolbox nc-toolbox-runread racadm getled`*
+- _`nc-toolbox nc-toolbox-runread racadm getled`_
- `nc-toolbox nc-toolbox-runread racadm getniccfg` - `nc-toolbox nc-toolbox-runread racadm getraclog` - `nc-toolbox nc-toolbox-runread racadm getractime`
The list below shows the commands you can use. Commands in `*italics*` cannot ha
- `nc-toolbox nc-toolbox-runread racadm gettracelog` - `nc-toolbox nc-toolbox-runread racadm getversion` - `nc-toolbox nc-toolbox-runread racadm hwinventory`-- *`nc-toolbox nc-toolbox-runread racadm ifconfig`*-- *`nc-toolbox nc-toolbox-runread racadm inlettemphistory get`*
+- _`nc-toolbox nc-toolbox-runread racadm ifconfig`_
+- _`nc-toolbox nc-toolbox-runread racadm inlettemphistory get`_
- `nc-toolbox nc-toolbox-runread racadm jobqueue view` - `nc-toolbox nc-toolbox-runread racadm lclog view` - `nc-toolbox nc-toolbox-runread racadm lclog viewconfigresult` - `nc-toolbox nc-toolbox-runread racadm license view`-- *`nc-toolbox nc-toolbox-runread racadm netstat`*
+- _`nc-toolbox nc-toolbox-runread racadm netstat`_
- `nc-toolbox nc-toolbox-runread racadm nicstatistics` - `nc-toolbox nc-toolbox-runread racadm ping` - `nc-toolbox nc-toolbox-runread racadm ping6`-- *`nc-toolbox nc-toolbox-runread racadm racdump`*
+- _`nc-toolbox nc-toolbox-runread racadm racdump`_
- `nc-toolbox nc-toolbox-runread racadm sslcertview`-- *`nc-toolbox nc-toolbox-runread racadm swinventory`*-- *`nc-toolbox nc-toolbox-runread racadm systemconfig getbackupscheduler`*
+- _`nc-toolbox nc-toolbox-runread racadm swinventory`_
+- _`nc-toolbox nc-toolbox-runread racadm systemconfig getbackupscheduler`_
- `nc-toolbox nc-toolbox-runread racadm systemperfstatistics` (PeakReset argument NOT allowed)-- *`nc-toolbox nc-toolbox-runread racadm techsupreport getupdatetime`*
+- _`nc-toolbox nc-toolbox-runread racadm techsupreport getupdatetime`_
- `nc-toolbox nc-toolbox-runread racadm traceroute` - `nc-toolbox nc-toolbox-runread racadm traceroute6` - `nc-toolbox nc-toolbox-runread racadm usercertview`-- *`nc-toolbox nc-toolbox-runread racadm vflashsd status`*-- *`nc-toolbox nc-toolbox-runread racadm vflashpartition list`*-- *`nc-toolbox nc-toolbox-runread racadm vflashpartition status -a`*
+- _`nc-toolbox nc-toolbox-runread racadm vflashsd status`_
+- _`nc-toolbox nc-toolbox-runread racadm vflashpartition list`_
+- _`nc-toolbox nc-toolbox-runread racadm vflashpartition status -a`_
- `nc-toolbox nc-toolbox-runread mstregdump`-- `nc-toolbox nc-toolbox-runread mstconfig` (requires `query` arg )-- `nc-toolbox nc-toolbox-runread mstflint` (requires `query` arg )-- `nc-toolbox nc-toolbox-runread mstlink` (requires `query` arg )-- `nc-toolbox nc-toolbox-runread mstfwmanager` (requires `query` arg )
+- `nc-toolbox nc-toolbox-runread mstconfig` (requires `query` arg)
+- `nc-toolbox nc-toolbox-runread mstflint` (requires `query` arg)
+- `nc-toolbox nc-toolbox-runread mstlink` (requires `query` arg)
+- `nc-toolbox nc-toolbox-runread mstfwmanager` (requires `query` arg)
- `nc-toolbox nc-toolbox-runread mlx_temp` The command syntax is:+ ```azurecli az networkcloud baremetalmachine run-read-command --name "<machine-name>" --limit-time-seconds "<timeout>" \
Multiple commands can be provided in json format to `--commands` option.
For a command with multiple arguments, provide as a list to `arguments` parameter. See [Azure CLI Shorthand](https://github.com/Azure/azure-cli/blob/dev/doc/shorthand_syntax.md) for instructions on constructing the `--commands` structure.
-These commands can be long running so the recommendation is to set `--limit-time-seconds` to at least 600 seconds (10 minutes). Running multiple extracts might take longer that 10 minutes.
+These commands can be long running so the recommendation is to set `--limit-time-seconds` to at least 600 seconds (10 minutes). Running multiple commands might take longer than 10 minutes.
This command runs synchronously. If you wish to skip waiting for the command to complete, specify the `--no-wait --debug` options. For more information, see [how to track asynchronous operations](howto-track-async-operations-cli.md). When an optional argument `--output-directory` is provided, the output result is downloaded and extracted to the local directory.
+> [!WARNING]
+> Using the `--output-directory` argument will overwrite any files in the local directory that have the same name as the new files being created.
+ ### This example executes the `hostname` command and a `ping` command ```azurecli
This guide walks you through accessing the output file that is created in the Cl
1. Select the baremetal-run-command-output blob container.
-1. Storage Account could be locked resulting in `403 This request is not authorized to perform this operation.` due to networking or firewall restrictions. Refer [Verify Storage Account access](#verify-storage-account-access) for procedure to verify/request access.
+1. Storage Account could be locked resulting in `403 This request is not authorized to perform this operation.` due to networking or firewall restrictions. Refer to the [customer-managed storage](#create-and-configure-storage-resources-customer-managed-storage) or [cluster manager storage](#verify-storage-account-access-cluster-manager-storage) sections for procedures to verify access.
1. Select the output file from the run-read command. The file name can be identified from the `az rest --method get` command. Additionally, the **Last modified** timestamp aligns with when the command was executed.
private-link Disable Private Endpoint Network Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/private-link/disable-private-endpoint-network-policy.md
By default, network policies are disabled for a subnet in a virtual network. To
You can enable network policies either for network security groups only, for user-defined routes only, or for both.
-If you enable network security policies for user-defined routes, you can use a custom address prefix equal to or larger than the virtual network address space to invalidate the /32 default route propagated by the private endpoint. This capability can be useful if you want to ensure that private endpoint connection requests go through a firewall or virtual appliance. Otherwise, the /32 default route sends traffic directly to the private endpoint in accordance with the [longest prefix match algorithm](../virtual-network/virtual-networks-udr-overview.md#how-azure-selects-a-route).
+If you enable network security policies for user-defined routes, you can use a custom address prefix length (subnet mask) equal to or larger than the virtual network address space prefix length to invalidate the /32 default route propagated by the private endpoint. This capability can be useful if you want to ensure that private endpoint connection requests go through a firewall or virtual appliance. Otherwise, the /32 default route sends traffic directly to the private endpoint in accordance with the [longest prefix match algorithm](../virtual-network/virtual-networks-udr-overview.md#how-azure-selects-a-route).
> [!IMPORTANT]
-> To invalidate a private endpoint route, user-defined routes must have a prefix equal to or larger than the virtual network address space where the private endpoint is provisioned. For example, a user-defined routes default route (0.0.0.0/0) doesn't invalidate private endpoint routes. Network policies should be enabled in the subnet that hosts the private endpoint.
+> To invalidate a private endpoint route, user-defined routes must have a prefix size that is equal to or smaller than the virtual network address space where the private endpoint is provisioned. For example, a user-defined routes default route (0.0.0.0/0) won't invalidate private endpoint routes because it covers a broader range than the private endpoint's address space. The longest prefix match rule will give higher priority to more specific address prefixes. Additionally, ensure that network policies are enabled in the subnet hosting the private endpoint.
Use the following steps to enable or disable network policy for private endpoints:
This section describes how to disable subnet private endpoint policies by using
## Next steps -- To learn more, see [What is a private endpoint?](private-endpoint-overview.md).
+- To learn more, see [What is a private endpoint?](private-endpoint-overview.md).
private-link Private Endpoint Dns https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/private-link/private-endpoint-dns.md
For Azure services, use the recommended zone names as described in the following
>||||| >| Azure Search (Microsoft.Search/searchServices) | searchService | privatelink.search.windows.net | search.windows.net | >| Azure Relay (Microsoft.Relay/namespaces) | namespace | privatelink.servicebus.windows.net | servicebus.windows.net |
->| Azure Web Apps - Azure Function Apps (Microsoft.Web/sites) | sites | privatelink.azurewebsites.net </br> scm.privatelink.azurewebsites.net | azurewebsites.net </br> scm.azurewebsites.net |
+>| Azure Web Apps - Azure Function Apps (Microsoft.Web/sites) | sites | privatelink.azurewebsites.net </br> scm.privatelink.azurewebsites.net<sup>2</sup | azurewebsites.net </br> scm.azurewebsites.net |
>| SignalR (Microsoft.SignalRService/SignalR) | signalr | privatelink.service.signalr.net | service.signalr.net | >| Azure Static Web Apps (Microsoft.Web/staticSites) | staticSites | privatelink.azurestaticapps.net </br> privatelink.{partitionId}.azurestaticapps.net | azurestaticapps.net </br> {partitionId}.azurestaticapps.net | >| Azure Event Hubs (Microsoft.EventHub/namespaces) | namespace | privatelink.servicebus.windows.net | servicebus.windows.net | <sup>1</sup>To use with IoT Hub's built-in Event Hub compatible endpoint. To learn more, see [private link support for IoT Hub's built-in endpoint](../iot-hub/virtual-network-support.md#built-in-event-hubs-compatible-endpoint)
+<sup>2</sup>In scenarios where the Kudu console or Kudu REST API is used, you must create two DNS records pointing to the private endpoint IP in your Azure DNS private zone or custom DNS server. The first record is for your app, and the second record is for the SCM (Source Control Management) of your app.
+ >[!Note] >In the above text, **`{regionCode}`** refers to the region code (for example, **eus** for East US and **ne** for North Europe). Refer to the following lists for regions codes: >
For Azure services, use the recommended zone names as described in the following
>||||| >| Azure Search (Microsoft.Search/searchServices) | searchService | privatelink.search.azure.us | search.azure.us | >| Azure Relay (Microsoft.Relay/namespaces) | namespace | privatelink.servicebus.usgovcloudapi.net | servicebus.usgovcloudapi.net |
->| Azure Web Apps (Microsoft.Web/sites) | sites | privatelink.azurewebsites.us </br> scm.privatelink.azurewebsites.us | azurewebsites.us </br> scm.azurewebsites.us |
+>| Azure Web Apps (Microsoft.Web/sites) | sites | privatelink.azurewebsites.us </br> scm.privatelink.azurewebsites.us<sup>2</sup> | azurewebsites.us </br> scm.azurewebsites.us |
>| Azure Event Hubs (Microsoft.EventHub/namespaces) | namespace | privatelink.servicebus.usgovcloudapi.net | servicebus.usgovcloudapi.net |
+<sup>2</sup>In scenarios where the Kudu console or Kudu REST API is used, you must create two DNS records pointing to the private endpoint IP in your Azure DNS private zone or custom DNS server. The first record is for your app, and the second record is for the SCM (Source Control Management) of your app.
+ >[!Note] >In the above text, `{regionCode}` refers to the region code (for example, **eus** for East US and **ne** for North Europe). Refer to the following lists for regions codes: >- [US Gov](../azure-government/documentation-government-developer-guide.md)
private-link Private Link Service Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/private-link/private-link-service-overview.md
Previously updated : 02/23/2024 Last updated : 10/15/2024
Visibility controls the exposure settings whereas auto-approval controls the app
## Getting connection Information using TCP Proxy v2
+> [!NOTE]
+> Only one connection between a PLS and Internal Load Balancer is supported when using TCP Proxy v2
+ In the private link service, the source IP address of the packets coming from private endpoint is network address translated (NAT) on the service provider side using the NAT IP allocated from the provider's virtual network. The applications receive the allocated NAT IP address instead of actual source IP address of the service consumers. If your application needs an actual source IP address from the consumer side, you can enable proxy protocol on your service and retrieve the information from the proxy protocol header. In addition to source IP address, proxy protocol header also carries the LinkID of the private endpoint. Combination of source IP address and LinkID can help service providers uniquely identify their consumers. For more information on Proxy Protocol, visit [here](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt).
The following are the known limitations when using the Private Link service:
- For an Inbound NAT rule with type set to *backend pool* to operate with Azure Private Link Service, a load balancing rule must be configured.
+- TCP Proxy v2 only supports one connection between a PLS and Internal Load Balancer
+ ## Next steps - [Create a private link service using Azure PowerShell](create-private-link-service-powershell.md)
reliability Reliability Energy Data Services https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/reliability/reliability-energy-data-services.md
description: Find out about reliability in Azure Data Manager for Energy
-+ Last updated 06/07/2023
role-based-access-control Built In Roles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/built-in-roles.md
The following table provides a brief description of each built-in role. Click th
> | <a name='kubernetes-agentless-operator'></a>[Kubernetes Agentless Operator](./built-in-roles/containers.md#kubernetes-agentless-operator) | Grants Microsoft Defender for Cloud access to Azure Kubernetes Services | d5a2ae44-610b-4500-93be-660a0c5f5ca6 | > | <a name='kubernetes-clusterazure-arc-onboarding'></a>[Kubernetes Cluster - Azure Arc Onboarding](./built-in-roles/containers.md#kubernetes-clusterazure-arc-onboarding) | Role definition to authorize any user/service to create connectedClusters resource | 34e09817-6cbe-4d01-b1a2-e0eac5743d41 | > | <a name='kubernetes-extension-contributor'></a>[Kubernetes Extension Contributor](./built-in-roles/containers.md#kubernetes-extension-contributor) | Can create, update, get, list and delete Kubernetes Extensions, and get extension async operations | 85cb6faf-e071-4c9b-8136-154b5a04f717 |
+> | <a name='service-fabric-cluster-contributor'></a>[Service Fabric Cluster Contributor](./built-in-roles/containers.md#service-fabric-cluster-contributor) | Manage your Service Fabric Cluster resources. Includes clusters, application types, application type versions, applications, and services. You will need additional permissions to deploy and manage the cluster's underlying resources such as virtual machine scale sets, storage accounts, networks, etc. | b6efc156-f0da-4e90-a50a-8c000140b017 |
+> | <a name='service-fabric-managed-cluster-contributor'></a>[Service Fabric Managed Cluster Contributor](./built-in-roles/containers.md#service-fabric-managed-cluster-contributor) | Deploy and manage your Service Fabric Managed Cluster resources. Includes managed clusters, node types, application types, application type versions, applications, and services. | 83f80186-3729-438c-ad2d-39e94d718838 |
## Databases
role-based-access-control Containers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/built-in-roles/containers.md
Previously updated : 09/20/2024 Last updated : 10/13/2024
Can create, update, get, list and delete Kubernetes Extensions, and get extensio
} ```
+## Service Fabric Cluster Contributor
+
+Manage your Service Fabric Cluster resources. Includes clusters, application types, application type versions, applications, and services. You will need additional permissions to deploy and manage the cluster's underlying resources such as virtual machine scale sets, storage accounts, networks, etc.
+
+> [!div class="mx-tableFixed"]
+> | Actions | Description |
+> | | |
+> | [Microsoft.ServiceFabric](../permissions/compute.md#microsoftservicefabric)/clusters/* | |
+> | [Microsoft.Authorization](../permissions/management-and-governance.md#microsoftauthorization)/*/read | Read roles and role assignments |
+> | [Microsoft.Insights](../permissions/monitor.md#microsoftinsights)/alertRules/* | Create and manage a classic metric alert |
+> | [Microsoft.Resources](../permissions/management-and-governance.md#microsoftresources)/deployments/* | Create and manage a deployment |
+> | [Microsoft.Resources](../permissions/management-and-governance.md#microsoftresources)/subscriptions/resourceGroups/read | Gets or lists resource groups. |
+> | **NotActions** | |
+> | *none* | |
+> | **DataActions** | |
+> | *none* | |
+> | **NotDataActions** | |
+> | *none* | |
+
+```json
+{
+ "assignableScopes": [
+ "/"
+ ],
+ "description": "Manage your Service Fabric Cluster resources. Includes clusters, application types, application type versions, applications, and services. You will need additional permissions to deploy and manage the cluster's underlying resources such as virtual machine scale sets, storage accounts, networks, etc.",
+ "id": "/providers/Microsoft.Authorization/roleDefinitions/b6efc156-f0da-4e90-a50a-8c000140b017",
+ "name": "b6efc156-f0da-4e90-a50a-8c000140b017",
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.ServiceFabric/clusters/*",
+ "Microsoft.Authorization/*/read",
+ "Microsoft.Insights/alertRules/*",
+ "Microsoft.Resources/deployments/*",
+ "Microsoft.Resources/subscriptions/resourceGroups/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ],
+ "roleName": "Service Fabric Cluster Contributor",
+ "roleType": "BuiltInRole",
+ "type": "Microsoft.Authorization/roleDefinitions"
+}
+```
+
+## Service Fabric Managed Cluster Contributor
+
+Deploy and manage your Service Fabric Managed Cluster resources. Includes managed clusters, node types, application types, application type versions, applications, and services.
+
+> [!div class="mx-tableFixed"]
+> | Actions | Description |
+> | | |
+> | [Microsoft.ServiceFabric](../permissions/compute.md#microsoftservicefabric)/managedclusters/* | |
+> | [Microsoft.Authorization](../permissions/management-and-governance.md#microsoftauthorization)/*/read | Read roles and role assignments |
+> | [Microsoft.Insights](../permissions/monitor.md#microsoftinsights)/alertRules/* | Create and manage a classic metric alert |
+> | [Microsoft.Resources](../permissions/management-and-governance.md#microsoftresources)/deployments/* | Create and manage a deployment |
+> | [Microsoft.Resources](../permissions/management-and-governance.md#microsoftresources)/subscriptions/resourceGroups/read | Gets or lists resource groups. |
+> | **NotActions** | |
+> | *none* | |
+> | **DataActions** | |
+> | *none* | |
+> | **NotDataActions** | |
+> | *none* | |
+
+```json
+{
+ "assignableScopes": [
+ "/"
+ ],
+ "description": "Deploy and manage your Service Fabric Managed Cluster resources. Includes managed clusters, node types, application types, application type versions, applications, and services.",
+ "id": "/providers/Microsoft.Authorization/roleDefinitions/83f80186-3729-438c-ad2d-39e94d718838",
+ "name": "83f80186-3729-438c-ad2d-39e94d718838",
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.ServiceFabric/managedclusters/*",
+ "Microsoft.Authorization/*/read",
+ "Microsoft.Insights/alertRules/*",
+ "Microsoft.Resources/deployments/*",
+ "Microsoft.Resources/subscriptions/resourceGroups/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ],
+ "roleName": "Service Fabric Managed Cluster Contributor",
+ "roleType": "BuiltInRole",
+ "type": "Microsoft.Authorization/roleDefinitions"
+}
+```
+ ## Next steps - [Assign Azure roles using the Azure portal](/azure/role-based-access-control/role-assignments-portal)
sap Dbms Guide General https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sap/workloads/dbms-guide-general.md
Previously updated : 09/22/2020 Last updated : 10/14/2024
For Azure premium storage v1, the following caching options exist:
For premium storage v1, we recommend that you use **Read caching for data files** of the SAP database and choose **No caching for the disks of log file(s)**.
+> [!NOTE]
+> With some of the new M(b)v3 VM types, the usage of read cached Premium SSD v1 storage could result in lower read and write IOPS rates and throughput than you would get if you don't use read cache.
+ For M-Series deployments, we recommend that you use Azure Write Accelerator only for the disks of your log files. For details, restrictions, and deployment of Azure Write Accelerator, see [Enable Write Accelerator](/azure/virtual-machines/how-to-enable-write-accelerator). For premium storage v2, Ultra disk and Azure NetApp Files, no caching options are offered.
sap Dbms Guide Oracle https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sap/workloads/dbms-guide-oracle.md
keywords: 'SAP, Azure, Oracle, Data Guard'
Previously updated : 04/20/2024 Last updated : 10/14/2024
There are two recommended storage deployment patterns for SAP on Oracle on Azure
Customers currently running Oracle databases on EXT4 or XFS file systems with Logical Volume Manager (LVM) are encouraged to move to ASM. There are considerable performance, administration, and reliability advantages to running on ASM compared to LVM. ASM reduces complexity, improves supportability, and makes administration tasks simpler. This documentation contains links for Oracle Database Administrators (DBAs) to learn how to install and manage ASM.
-Azure provides [multiple storage solutions](/azure/virtual-machines/disks-types). The table below details the support status
+Azure provides [multiple storage solutions](/azure/virtual-machines/disks-types).
+
+The table below details the support status
| Storage type | Oracle support | Sector Size | Oracle Linux 8.x or higher | Windows Server 2019 | |--||--| | --|
Usually customers are using RMAN, Azure Backup for Oracle and/or disk snap techn
> [!NOTE]
-> Azure Host Disk Cache for the DATA ASM Disk Group can be set to either Read Only or None. All other ASM Disk Groups should be set to None. On BW or SCM a separate ASM Disk Group for TEMP can be considered for large or busy systems.
+> Azure Host Disk Cache for the DATA ASM Disk Group can be set to either Read Only or None. Consider that with some of the new M(b)v3 VM types, the usage of read cached Premium SSD v1 storage could result in lower read and write IOPS rates and throughput than you would get if you don't use read cache. All other ASM Disk Groups should be set to None. On BW or SCM a separate ASM Disk Group for TEMP can be considered for large or busy systems.
+ ### Adding Space to ASM + Azure Disks
Oracle Data Guard is supported for high availability and disaster recovery purpo
Disaster Recovery aspects for Oracle databases in Azure are presented in the article [<u>Disaster recovery for an Oracle Database 12c database in an Azure environment</u>](/azure/virtual-machines/workloads/oracle/oracle-disaster-recovery).
-Another good Oracle whitepaper [Setting up Oracle 12c Data Guard for SAP Customers](https://www.sap.com/documents/2016/12/a67bac51-9a7c-0010-82c7-eda71af511fa.html)
- ## Huge Pages & Large Oracle SGA Configurations VLDB SAP on Oracle on Azure deployments apply SGA sizes in excess of 3TB. Modern versions of Oracle handle large SGA sizes well and significantly reduce IO. Review the AWR report and increase the SGA size to reduce read IO. 
sap Dbms Guide Sapase https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sap/workloads/dbms-guide-sapase.md
Previously updated : 11/30/2022 Last updated : 10/14/2024 # SAP ASE Azure Virtual Machines DBMS deployment for SAP workload
-In this document, covers several different areas to consider when deploying SAP ASE in Azure IaaS. As a precondition to this document, you should have read the document [Considerations for Azure Virtual Machines DBMS deployment for SAP workload](dbms-guide-general.md) and other guides in the [SAP workload on Azure documentation](./get-started.md). This document covers SAP ASE running on Linux and on Windows Operating Systems. The minimum supported release on Azure is SAP ASE 16.0.02 (Release 16 Support Pack 2). It's recommended to deploy the latest version of SAP and the latest Patch Level. As a minimum SAP ASE 16.0.03.07 (Release 16 Support Pack 3 Patch Level 7) is recommended. The most recent version of SAP can be found in [Targeted ASE 16.0 Release Schedule and CR list Information](https://wiki.scn.sap.com/wiki/display/SYBASE/Targeted+ASE+16.0+Release+Schedule+and+CR+list+Information).
+In this document, covers several different areas to consider when deploying SAP ASE in Azure IaaS. As a precondition to this document, you read the document [Considerations for Azure Virtual Machines DBMS deployment for SAP workload](dbms-guide-general.md) and other guides in the [SAP workload on Azure documentation](./get-started.md). This document covers SAP ASE running on Linux and on Windows Operating Systems. The minimum supported release on Azure is SAP ASE 16.0.02 (Release 16 Support Pack 2). It's recommended to deploy the latest version of SAP with the most recent Patch Level. As a minimum SAP ASE 16.0.03.07 (Release 16 Support Pack 3 Patch Level 7) is recommended. The most recent version of SAP can be found in [Targeted ASE 16.0 Release Schedule and CR list Information](https://wiki.scn.sap.com/wiki/display/SYBASE/Targeted+ASE+16.0+Release+Schedule+and+CR+list+Information).
Additional information about release support with SAP applications or installation media location are found, besides in the SAP Product Availability Matrix in these locations:
Additional information about release support with SAP applications or installati
Remark: Throughout documentation within and outside the SAP world, the name of the product is referenced as Sybase ASE or SAP ASE or in some cases both. In order to stay consistent, we use the name **SAP ASE** in this documentation. ## Operating system support
-The SAP Product Availability Matrix contains the supported Operating System and SAP Kernel combinations for each SAP application. Linux distributions SLES 12.x, SLES 15.x, RHEL 7.x and RHEL 8.x are fully supported. Oracle Linux as operating system for SAP ASE isn't supported. It's recommended to use the most recent Linux releases available. Windows customers should use Windows Server 2016 or Windows Server 2019 releases. Older releases of Windows such as Windows 2012 are technically supported but the latest Windows version is always recommended.
+The SAP Product Availability Matrix contains the supported Operating System and SAP Kernel combinations for each SAP application. Linux distributions SLES 12.x, SLES 15.x, RHEL 7.x, and RHEL 8.x are fully supported. Oracle Linux as operating system for SAP ASE isn't supported. It's recommended to use the most recent Linux releases available. Windows customers should use Windows Server 2016 or Windows Server 2019 releases. Older releases of Windows such as Windows 2012 are technically supported but the latest Windows version is always recommended.
## Specifics to SAP ASE on Windows Starting with Microsoft Azure, you can migrate your existing SAP ASE applications to Azure Virtual Machines. SAP ASE in an Azure Virtual Machine enables you to reduce the total cost of ownership of deployment, management, and maintenance of enterprise breadth applications by easily migrating these applications to Microsoft Azure. With SAP ASE in an Azure Virtual Machine, administrators and developers can still use the same development and administration tools that are available on-premises.
-Microsoft Azure offers numerous different virtual machine types that allow you to run smallest SAP systems and landscapes up to large SAP systems and landscapes with thousands of users. SAP sizing SAPS numbers of the different SAP certified VM SKUs is provided in [SAP support note #1928533](https://launchpad.support.sap.com/#/notes/1928533).
+Microsoft Azure offers numerous different virtual machine types that allow you to run smallest SAP systems and landscapes up to large SAP systems and landscapes with thousands of users. SAP sizing SAPS numbers of the different SAP certified Virtual Machine (VM) SKUs is provided in [SAP support note #1928533](https://launchpad.support.sap.com/#/notes/1928533).
Documentation to install SAP ASE on Windows can be found in the [SAP ASE Installation Guide for Windows](https://help.sap.com/viewer/36031975851a4f82b1022a9df877280b/16.0.3.7/en-US/a660d3f1bc2b101487cbdbf10069c3ac.html)
-Lock Pages in Memory is a setting that will prevent the SAP ASE database buffer from being paged out. This setting is useful for large busy systems with a high memory demand. Contact BC-DB-SYB for more information.
+Lock Pages in Memory is a setting that is preventing the SAP ASE database buffer from being paged out. This setting is useful for large busy systems with a high memory demand. Contact BC-DB-SYB for more information.
## Linux operating system specific settings
Linux Huge Pages should be enabled by default and can be verified with command
`cat /proc/meminfo`
-The page size is typically 2048 KB. For details see the article [Huge Pages on Linux](https://help.sap.com/viewer/ecbccd52e7024feaa12f4e780b43bc3b/16.0.3.7/en-US/a703d580bc2b10149695f7d838203fad.html)
+The page size is typically 2,048 KB. For details see the article [Huge Pages on Linux](https://help.sap.com/viewer/ecbccd52e7024feaa12f4e780b43bc3b/16.0.3.7/en-US/a703d580bc2b10149695f7d838203fad.html)
## Recommendations on VM and disk structure for SAP ASE deployments
Typical VM types used for medium size SAP ASE database servers include Esv3. La
The SAP ASE transaction log disk write performance may be improved by enabling the M-series Write Accelerator. Write Accelerator should be tested carefully with SAP ASE due to the way that SAP ASE performs Log Writes. Review [SAP support note #2816580](/azure/virtual-machines/how-to-enable-write-accelerator) and consider running a performance test. Write Accelerator is designed for transaction log disk only. The disk level cache should be set to NONE. Don't be surprised if Azure Write Accelerator doesn't show similar improvements as with other DBMS. Based on the way, SAP ASE writes into the transaction log, it could be that there's little to no acceleration by Azure Write Accelerator.
+> [!NOTE]
+> With some of the new M(b)v3 VM types, the usage of read cached Premium SSD v1 storage could result in lower read and write IOPS rates and throughput than you would get if you don't use read cache.
+ Separate disks are recommended for Data devices and Log Devices. The system databases sybsecurity and `saptools` don't require dedicated disks and can be placed on the disks containing the SAP database data and log devices ![Storage configuration for SAP ASE](./media/dbms-guide-sap-ase/sap-ase-disk-structure.png) ### File systems, stripe size & IO balancing
-SAP ASE writes data sequentially into disk storage devices unless configured otherwise. This means an empty SAP ASE database with four devices will write data into the first device only. The other disk devices will only be written to when the first device is full. The amount of READ and WRITE IO to each SAP ASE device is likely to be different. To balance disk IO across all available Azure disks, either Windows Storage Spaces or Linux LVM2 needs to be used. On Linux, it's recommended to use XFS file system to format the disks. The LVM stripe size should be tested with a performance test. 128 KB stripe size is a good starting point. On Windows, the NTFS Allocation Unit Size (AUS) should be tested. 64 KB can be used as a starting value.
+SAP ASE writes data sequentially into disk storage devices unless configured otherwise. This means an empty SAP ASE database with four devices wwrites data into the first device only. The other disk devices are only written into when the first device is full. The amount of READ and WRITE IO to each SAP ASE device is likely to be different. To balance disk IO across all available Azure disks, either Windows Storage Spaces or Linux LVM2 needs to be used. On Linux, it's recommended to use XFS file system to format the disks. The LVM stripe size should be tested with a performance test. 128 KB stripe size is a good starting point. On Windows, the NTFS Allocation Unit Size (AUS) should be tested. 64 KB can be used as a starting value.
It's recommended to configure Automatic Database Expansion as described in the article [Configuring Automatic Database Space Expansion in SAP Adaptive Server Enterprise](https://blogs.sap.com/2014/07/09/configuring-automatic-database-space-expansion-in-sap-adaptive-server-enterprise/) and [SAP support note #1815695](https://launchpad.support.sap.com/#/notes/1815695).
-### Sample SAP ASE on Azure virtual machine, disk and file system configurations
+### Sample SAP ASE on Azure virtual machine, disk, and file system configurations
The templates below show sample configurations for both Linux and Windows. Before confirming the virtual machine and disk configuration, ensure that the network and storage bandwidth quotas of the individual VM are sufficient to meet the business requirement. Also keep in mind that different Azure VM types have different maximum numbers of disks that can be attached to the VM. For example, a E4s_v3 VM has a limit 48 MB/sec storage IO throughput. If the storage throughput required by database backup activity demands more than 48 MB/sec then a larger VM type with more storage bandwidth throughput is unavoidable. When configuring Azure storage, you also need to keep in mind that especially with [Azure Premium storage](/azure/virtual-machines/premium-storage-performance) the throughput, and IOPS per GB of capacity do change. See more on this topic in the article [What disk types are available in Azure?](/azure/virtual-machines/disks-types). The quotas for specific Azure VM types are documented in the article [Memory optimized virtual machine sizes](/azure/virtual-machines/sizes-memory) and articles linked to it. > [!NOTE] > If a DBMS system is being moved from on-premises to Azure, it's recommended to perform monitoring on the VM and assess the CPU, memory, IOPS and storage throughput. Compare the peak values observed with the VM quota limits documented in the articles mentioned above
-The examples given below are for illustrative purposes and can be modified based on individual needs. Due to the design of SAP ASE, the number of data devices isn't as critical as with other databases. The number of data devices detailed in this document is a guide only. The configurations suggested should be treated as what they're. They are starting points for you. But they are configurations that are going to need some fine-tuning to your workload and cost efficiencies.
+The examples given below are for illustrative purposes and can be modified based on individual needs. Due to the design of SAP ASE, the number of data devices isn't as critical as with other databases. The number of data devices detailed in this document is a guide only. The configurations suggested should be treated as what they're. They're starting points for you. But they're configurations that are going to need some fine-tuning to your workload and cost efficiencies.
An example of a configuration for a little SAP ASE DB Server with a database size between 50 GB ΓÇô 250 GB could look like
The HADR Users Guide details the setup and configuration of a two-node SAP ASE
There are two supported High Availability configurations for SAP ASE on Azure: - HA Aware with Fault Manager - The SAP Kernel is an ΓÇ£HA AwareΓÇ¥ application and knows about the primary and secondary SAP ASE servers. There are no close integrations between the SAP ASE ΓÇ£HA AwareΓÇ£ solution and Azure, the Azure Internal load balancer isn't used. The solution is documented in the [SAP ASE HADR Users Guide](https://help.sap.com/viewer/efe56ad3cad0467d837c8ff1ac6ba75c/16.0.3.7/en-US/a6645e28bc2b1014b54b8815a64b87ba.html)-- Floating IP with Fault Manager ΓÇô This solution can be used for SAP Business Suite and non-SAP Business Suite applications. This solution utilizes the Azure ILB and the SAP ASE database engine provides a Probe Port. The Fault Manager will call SAPHostAgent to start or stop a secondary Floating IP on the ASE hosts. This solution is documented in [SAP note #3086679 - SYB: Fault
+- Floating IP with Fault Manager ΓÇô This solution can be used for SAP Business Suite and non-SAP Business Suite applications. This solution utilizes the Azure ILB and the SAP ASE database engine provides a Probe Port. The Fault Manager calls the SAPHostAgent to start or stop a secondary Floating IP on the ASE hosts. This solution is documented in [SAP note #3086679 - SYB: Fault
> [!NOTE]
SAP Software provisioning Manager (SWPM) is giving an option to encrypt the data
- [SAP support note #2593925](https://launchpad.support.sap.com/#/notes/2593925) > [!NOTE]
-> If a SAP ASE database is encrypted then Backup Dump Compression will not work. See also [SAP support note #2680905](https://launchpad.support.sap.com/#/notes/2680905)
+> If a SAP ASE database is encrypted then Backup Dump Compression is not working. See also [SAP support note #2680905](https://launchpad.support.sap.com/#/notes/2680905)
## SAP ASE on Azure deployment checklist - Deploy SAP ASE 16.0.03.07 or higher - Update to latest version and patches of FaultManager and SAPHostAgent-- Deploy on latest certified OS available such as Windows 2019, SLES 15 or RHEL 8
+- Deploy on latest certified OS available such as Windows 2019, SLES 15, or RHEL 8
- Use SAP Certified VMs ΓÇô high memory Azure VM SKUs such as Es_v3 or for x-large systems M-Series VM SKUs are recommended - Match the disk IOPS and total VM aggregate throughput quota of the VM with the disk design. Deploy sufficient number of disks - Aggregate disks using Windows Storage Spaces or Linux LVM2 with correct stripe size and file system
As with on-premises systems several steps are required to enable all SAP NetWeav
> >
-and the links generated in transaction DBACockpit look similar to:
+And the links generated in transaction DBACockpit look similar to:
> https:\//\<fullyqualifiedhostname>:44300/sap/bc/webdynpro/sap/dba_cockpit >
The starting page for [SAP ASE 16.0.03.07 Documentation](https://help.sap.com/vi
- SAP ASE Learning Journey - Administration & Monitoring - SAP ASE Learning Journey - Installation & Upgrade
-are helpful. Another useful document is [SAP Applications on SAP Adaptive Server Enterprise Best Practices for Migration and Runtime](https://assets.cdn.sap.com/sapcom/docs/2016/06/26450353-767c-0010-82c7-eda71af511fa.pdf).
+Are helpful. Another useful document is [SAP Applications on SAP Adaptive Server Enterprise Best Practices for Migration and Runtime](https://assets.cdn.sap.com/sapcom/docs/2016/06/26450353-767c-0010-82c7-eda71af511fa.pdf).
Other helpful SAP support notes are:
sap Dbms Guide Sqlserver https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sap/workloads/dbms-guide-sqlserver.md
There's some SQL Server in IaaS specific information you should know before cont
* **Multiple SAP databases in one single SQL Server instance in a single VM**: Configurations like these are supported. Considerations of multiple SAP databases sharing the shared resources of a single SQL Server instance are the same as for on-premises deployments. Keep other limits like number of disks that can be attached to a specific VM type in mind. Or network and storage quota limits of specific VM types as detailed [Sizes for virtual machines in Azure](/azure/virtual-machines/sizes).
+## New M-series VMs and SQL Server
+Azure released a few new families of M-series SKUs under the family of Mv3. Some of the VM types in this family should not be used for SQL Server, including SQL Server 2022. Reason is the number of NUMA nodes presented into the guest OS which with larger than 64 vCPUs is too large for SQL Server to accomodate. The specific VM types are:
+- M176(d)s_3_v3 - use M176bds_4_v3 or M176bds_4_v3 as alternative
+- M176(d)s_4_v3 - use M176bds_4_v3 as alternative
+- M624(d)s_12_v3 - use M416ms_v2 as alternative
+- M832(d)s_12_v3 - use M416ms_v2 as alternative
+- M832i(d)s_16_v3 - use M416ms_v2 as alternative
+
+> [!NOTE]
+> With some of the new M(b)v3 VM types, the usage of read cached Premium SSD v1 storage could result in lower read and write IOPS rates and throughput than you would get if you don't use read cache.
+ ## Recommendations on VM/VHD structure for SAP-related SQL Server deployments In accordance with the general description, Operating system, SQL Server executables, the SAP executables should be located or installed separate Azure disks. Typically, most of the SQL Server system databases aren't utilized at a high level with SAP NetWeaver workload. Nevertheless the system databases of SQL Server should be, together with the other SQL Server directories on a separate Azure disk. SQL Server tempdb should be either located on the nonperisisted D:\ drive or on a separate disk.
SQL Server proportional fill mechanism distributes reads and writes to all dataf
### Special for M-Series VMs For Azure M-Series VM, the latency writing into the transaction log can be reduced, compared to Azure premium storage performance v1, when using Azure Write Accelerator. If the premium storage v1 provided latency is limiting scalability of the SAP workload, the disk that stores the SQL Server transaction log file can be enabled for Write Accelerator. Details can be read in the document [Write Accelerator](/azure/virtual-machines/how-to-enable-write-accelerator). Azure Write Accelerator doesn't work with Azure premium storage v2 and Ultra disk. In both cases, the latency is better than what Azure premium storage v1 delivers. Write Accelerator is not supporting Premium SSD v2.+
+> [!NOTE]
+> With some of the new M(b)v3 VM types, the usage of read cached Premium SSD v1 storage could result in lower read and write IOPS rates and throughput than you would get if you don't use read cache.
### Formatting the disks
sap Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sap/workloads/get-started.md
In the SAP workload documentation space, you can find the following areas:
## Change Log
+- October 14, 2024: Change several database guides mentioning that with several Mv3 VM types, IOPS and throughput could be lower when using read cached Premium SSD v1 disks compared to using non-cached disks
- October 7, 2024: Changes in [SQL Server Azure Virtual Machines DBMS deployment for SAP NetWeaver](./dbms-guide-sqlserver.md), documenting new Mv3 SKUs that will not work with SQL Server because of NUMA nodes larger than 64 vCPUs - October 5, 2024: Changes in documenting active/active and active/passive application layer in [SAP workload configurations with Azure Availability Zones](./high-availability-zones.md). Eliminating the list of regions for each of the cases - September 16, 2024: Included section on supported clock sources in Azure VMs in [SAP HANA infrastructure configurations and operations on Azure](./hana-vm-operations.md)
sap Hana Vm Premium Ssd V1 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sap/workloads/hana-vm-premium-ssd-v1.md
keywords: 'SAP, Azure HANA, Storage Ultra disk, Premium storage'
Previously updated : 09/03/2024 Last updated : 10/14/2024
The caching recommendations for Azure premium disks below are assuming the I/O c
- **/hana/shared** - read caching - **OS disk** - don't change default caching that is set by Azure at creation time of the VM
+> [!NOTE]
+> With some of the new M(b)v3 VM types, the usage of read cached Premium SSD v1 storage could result in lower read and write IOPS rates and throughput than you would get if you don't use read cache.
### Azure burst functionality for premium storage For Azure premium storage disks smaller or equal to 512 GiB in capacity, burst functionality is offered. The exact way how disk bursting works is described in the article [Disk bursting](/azure/virtual-machines/disk-bursting). When you read the article, you understand the concept of accruing I/O Operations per second (IOPS) and throughput in the times when your I/O workload is below the nominal IOPS and throughput of the disks (for details on the nominal throughput see [Managed Disk pricing](https://azure.microsoft.com/pricing/details/managed-disks/)). You're going to accrue the delta of IOPS and throughput between your current usage and the nominal values of the disk. The bursts are limited to a maximum of 30 minutes.
sentinel Automation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/sentinel/automation/automation.md
After onboarding your Microsoft Sentinel workspace to the unified security opera
| Functionality | Description | | | | | **Automation rules with alert triggers** | In the unified security operations platform, automation rules with alert triggers act only on Microsoft Sentinel alerts. <br><br>For more information, see [Alert create trigger](../automate-incident-handling-with-automation-rules.md#alert-create-trigger). |
-| **Automation rules with incident triggers** | In both the Azure portal and the unified security operations platform, the **Incident provider** condition property is removed, as all incidents have *Microsoft Defender XDR* as the incident provider (the value in the *ProviderName* field). <br><br>At that point, any existing automation rules run on both Microsoft Sentinel and Microsoft Defender XDR incidents, including those where the **Incident provider** condition is set to only *Microsoft Sentinel* or *Microsoft 365 Defender*. <br><br>However, automation rules that specify a specific analytics rule name will run only on the incidents that were created by the specified analytics rule. This means that you can define the **Analytic rule name** condition property to an analytics rule that exists only in Microsoft Sentinel to limit your rule to run on incidents only in Microsoft Sentinel. <br><br>For more information, see [Incident trigger conditions](../automate-incident-handling-with-automation-rules.md#conditions). |
-| **Changes to existing incident names** | In the unified SOC operations platform, the Defender portal uses a unique engine to correlate incidents and alerts. When onboarding your workspace to the unified SOC operations platform, existing incident names might be changed if the correlation is applied. To ensure that your automation rules always run correctly, we therefore recommend that you avoid using incident titles as condition criteria in your automation rules, and suggest instead to use the name of the analytics rule that created the incident, and tags if more specificity is required. |
+| **Automation rules with incident triggers** | In both the Azure portal and the unified security operations platform, the **Incident provider** condition property is removed, as all incidents have *Microsoft Defender XDR* as the incident provider (the value in the *ProviderName* field). <br><br>At that point, any existing automation rules run on both Microsoft Sentinel and Microsoft Defender XDR incidents, including those where the **Incident provider** condition is set to only *Microsoft Sentinel* or *Microsoft 365 Defender*. <br><br>However, automation rules that specify a specific analytics rule name run only on incidents that contain alerts that were created by the specified analytics rule. This means that you can define the **Analytic rule name** condition property to an analytics rule that exists only in Microsoft Sentinel to limit your rule to run on incidents only in Microsoft Sentinel. <br><br>For more information, see [Incident trigger conditions](../automate-incident-handling-with-automation-rules.md#conditions). |
+| **Changes to existing incident names** | In the unified SOC operations platform, the Defender portal uses a unique engine to correlate incidents and alerts. When onboarding your workspace to the unified SOC operations platform, existing incident names might be changed if the correlation is applied. To ensure that your automation rules always run correctly, we therefore recommend that you avoid using incident titles as condition criteria in your automation rules, and suggest instead to use the name of any analytics rule that created alerts included in the incident, and tags if more specificity is required. |
| ***Updated by* field** | <li>After onboarding your workspace, the **Updated by** field has a [new set of supported values](../automate-incident-handling-with-automation-rules.md#incident-update-trigger), which no longer include *Microsoft 365 Defender*. In existing automation rules, *Microsoft 365 Defender* is replaced by a value of *Other* after onboarding your workspace. <br><br><li>If multiple changes are made to the same incident in a 5-10 minute period, a single update is sent to Microsoft Sentinel, with only the most recent change. <br><br>For more information, see [Incident update trigger](../automate-incident-handling-with-automation-rules.md#incident-update-trigger). | | **Automation rules that add incident tasks** | If an automation rule adds an incident task, the task is shown only in the Azure portal. | | **Microsoft incident creation rules** | Microsoft incident creation rules aren't supported in the unified security operations platform. <br><br>For more information, see [Microsoft Defender XDR incidents and Microsoft incident creation rules](../microsoft-365-defender-sentinel-integration.md#microsoft-defender-xdr-incidents-and-microsoft-incident-creation-rules). |
site-recovery Azure To Azure Support Matrix https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/site-recovery/azure-to-azure-support-matrix.md
This table summarized support for the Azure VM OS disk, data disk, and temporary
**Component** | **Support** | **Details** | | Disk renaming | Supported |
-OS disk maximum size | 4096 GB | [Learn more](/azure/virtual-machines/managed-disks-overview) about VM disks.
+OS disk maximum size | [4095 GiB](/azure/virtual-machines/managed-disks-overview#os-disk) | [Learn more](/azure/virtual-machines/managed-disks-overview) about VM disks.
Temporary disk | Not supported | The temporary disk is always excluded from replication.<br/><br/> Don't store any persistent data on the temporary disk. [Learn more](/azure/virtual-machines/managed-disks-overview).
-Data disk maximum size | 32 TB for managed disks<br></br>4 TB for unmanaged disks|
-Data disk minimum size | No restriction for unmanaged disks. 1 GB for managed disks |
+Data disk maximum size | 32 TiB for managed disks<br></br>4 TiB for unmanaged disks|
+Data disk minimum size | No restriction for unmanaged disks. 1 GiB for managed disks |
Data disk maximum number | Up to 64, in accordance with support for a specific Azure VM size | [Learn more](/azure/virtual-machines/sizes) about VM sizes.
-Data disk maximum size per storage account (for unmanaged disks) | 35 TB | This is an upper limit for cumulative size of page blobs created in a premium Storage Account
+Data disk maximum size per storage account (for unmanaged disks) | 35 TiB | This is an upper limit for cumulative size of page blobs created in a premium Storage Account
Data disk change rate | Maximum of 20 MBps per disk for premium storage. Maximum of 2 MBps per disk for Standard storage. | If the average data change rate on the disk is continuously higher than the maximum, replication won't catch up.<br/><br/> However, if the maximum is exceeded sporadically, replication can catch up, but you might see slightly delayed recovery points. Data disk - standard storage account | Supported | Data disk - premium storage account | Supported | If a VM has disks spread across premium and standard storage accounts, you can select a different target storage account for each disk, to ensure you have the same storage configuration in the target region.
storage Container Storage Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/container-storage/container-storage-faq.md
Title: Frequently asked questions for Azure Container Storage
description: Get answers to Azure Container Storage frequently asked questions (FAQ). Previously updated : 07/24/2024 Last updated : 10/15/2024
* <a id="azure-container-storage-ephemeralosdisk"></a> **Does Azure Container Storage use the capacity from Ephemeral OS disks for ephemeral disk storage pool?** No, Azure Container Storage only discovers and uses the capacity from ephemeral data disks for ephemeral disk storage pool.-
-* <a id="azure-container-storage-installation"></a>
- **I encountered installation issues due to Azure Policy. What is the recommended approach?**
-
- If youΓÇÖre experiencing installation issues with Azure Container Storage in your AKS cluster, it might be due to Azure Policy restrictions. To resolve this,
- youΓÇÖll need to add the `acstor` namespace to the exclusion list of your Azure Policy. Azure Policy is used to create and enforce rules for managing resources
- within Azure, including AKS clusters. In some cases, policies might block the creation of Azure Container Storage pods and components. You can find more details
- on working with Azure Policy for Kubernetes by consulting [Azure Policy for Kubernetes](/azure/governance/policy/concepts/policy-for-kubernetes).
- To resolve this, follow these steps:
- - [Create your Azure Kubernetes cluster](install-container-storage-aks.md)
- - Enable Azure Policy for AKS
- - Create a policy that you suspect is blocking the installation of Azure Container Storage
- - Attempt to install Azure Container Storage in the AKS cluster
- - Check the logs for the gatekeeper-controller pod to confirm any policy violations
- - Add the `acstor` namespace to the exclusion list of the policy
- - Attempt to install Azure Container Storage in the AKS cluster again
## See also
storage Troubleshoot Container Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/container-storage/troubleshoot-container-storage.md
Title: Troubleshoot Azure Container Storage
description: Troubleshoot common problems with Azure Container Storage, including installation and storage pool issues. Previously updated : 07/24/2024 Last updated : 10/15/2024
## Troubleshoot installation issues
-### Azure Container Storage fails to install
+### Azure Container Storage fails to install due to missing configuration
After running `az aks create`, you might see the message *Azure Container Storage failed to install. AKS cluster is created. Please run `az aks update` along with `--enable-azure-container-storage` to enable Azure Container Storage*.
To install Azure Container Storage on the cluster and create a storage pool, run
az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type> ```
+### Azure Container Storage fails to install due to Azure Policy restrictions
+
+Azure Container Storage might fail to install if Azure Policy restrictions are in place. Specifically, Azure Container Storage relies on privileged containers, which can be blocked by Azure Policy. When this happens, the installation of Azure Container Storage might timeout or fail, and you might see errors in the `gatekeeper-controller` logs such as:
+
+```output
+{"level":"info","ts":1722622443.9484184,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: prereq, securityContext: {\"privileged\": true, \"runAsUser\": 0}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-prereq-gt58x","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
+{"level":"info","ts":1722622443.9839077,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: metrics-exporter, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-metrics-exporter-286np","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
+{"level":"info","ts":1722622444.0515249,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: csi-node, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-csi-node-7hcd7","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
+{"level":"info","ts":1722622444.0729053,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: io-engine, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-io-engine-84hwx","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
+{"level":"info","ts":1722622444.0742755,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: ndm, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-ndm-x6q5n","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
+{"level":"info","ts":1722622449.2412128,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: ndm, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-ndm-b5nfg","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
+```
+
+To resolve this, youΓÇÖll need to add the `acstor` namespace to the exclusion list of your Azure Policy. Azure Policy is used to create and enforce rules for managing resources within Azure, including AKS clusters. In some cases, policies might block the creation of Azure Container Storage pods and components. You can find more details on working with Azure Policy for Kubernetes by consulting [Azure Policy for Kubernetes](/azure/governance/policy/concepts/policy-for-kubernetes).
+
+To add the `acstor` namespace to the exclusion list, follow these steps:
+
+1. [Create your Azure Kubernetes cluster](install-container-storage-aks.md).
+1. Enable Azure Policy for AKS.
+1. Create a policy that you suspect is blocking the installation of Azure Container Storage.
+1. Attempt to install Azure Container Storage in the AKS cluster.
+1. Check the logs for the gatekeeper-controller pod to confirm any policy violations.
+1. Add the `acstor` namespace to the exclusion list of the policy.
+1. Attempt to install Azure Container Storage in the AKS cluster again.
+ ### Can't set storage pool type to NVMe If you try to install Azure Container Storage with Ephemeral Disk, specifically with local NVMe on a cluster where the virtual machine (VM) SKU doesn't have NVMe drives, you get the following error message: *Cannot set --storage-pool-option as NVMe as none of the node pools can support ephemeral NVMe disk*.
storage Redundancy Premium File Shares https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/files/redundancy-premium-file-shares.md
Previously updated : 09/26/2023 Last updated : 10/14/2024
Zone-redundant storage (ZRS) replicates your storage account synchronously across three Azure availability zones in the primary region. ## Applies to+ | File share type | SMB | NFS | |-|:-:|:-:| | Standard file shares (GPv2), LRS/ZRS | ![No](../media/icons/no-icon.png) | ![No](../media/icons/no-icon.png) |
Zone-redundant storage (ZRS) replicates your storage account synchronously acros
| Premium file shares (FileStorage), LRS/ZRS | ![Yes](../media/icons/yes-icon.png) | ![Yes](../media/icons/yes-icon.png) | ## Premium file share accounts+ ZRS is supported for premium Azure file shares through the `FileStorage` storage account kind.
+ZRS for premium file shares is available for a subset of Azure regions:
+
+- (Africa) South Africa North
+- (Asia Pacific) Australia East
+- (Asia Pacific) China North 3
+- (Asia Pacific) Southeast Asia
+- (Asia Pacific) Korea Central
+- (Asia Pacific) East Asia
+- (Asia Pacific) Japan East
+- (Asia Pacific) Central India
+- (Canada) Canada Central
+- (Europe) France Central
+- (Europe) Germany West Central
+- (Europe) North Europe
+- (Europe) West Europe
+- (Europe) UK South
+- (Europe) Poland Central
+- (Europe) Norway East
+- (Europe) Spain Central
+- (Europe) Sweden Central
+- (Europe) Switzerland North
+- (Europe) Italy North
+- (Middle East) Qatar Central
+- (Middle East) Israel Central
+- (Middle East) UAE North
+- (North America) East US
+- (North America) East US 2
+- (North America) West US 2
+- (North America) West US 3
+- (North America) Central US
+- (North America) South Central US
+- (North America) Mexico Central
+- (South America) Brazil South
+- (US Government) US Gov Virginia
## See also
virtual-desktop Compare Remote Desktop Clients https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/compare-remote-desktop-clients.md
The following table compares which display features are supported on which platf
1. Up to 16 monitors. ::: zone-end - ::: zone pivot="remote-desktop-services,remote-pc" | Feature | Windows<br />(MSTSC) | Windows<br />(RD Store) | macOS | iOS/<br />iPadOS | Android/<br />Chrome OS | Web browser | |--|:-:|:-:|:-:|:-:|:-:|:-:|
The following table provides a description for each of the multimedia features:
::: zone pivot="azure-virtual-desktop" | Feature | Description | |--|--|
-| [Multimedia redirection](multimedia-redirection-intro.md) | Redirect media content from the desktop or app to the physical machine for faster processing and rendering. |
+| [Multimedia redirection](multimedia-redirection-video-playback-calls.md?pivots=azure-virtual-desktop) | Redirect video playback and calls from the desktop or app to the physical machine for faster processing and rendering. |
| [Teams media optimizations](teams-on-avd.md) | Optimized Microsoft Teams calling and meeting experience. | ::: zone-end
The following table provides a description for each of the multimedia features:
::: zone pivot="windows-365,dev-box" | Feature | Description | |--|--|
-| Multimedia redirection | Redirect media content from the Cloud PC or dev box to the physical machine for faster processing and rendering. |
+| [Multimedia redirection](multimedia-redirection-video-playback-calls.md?pivots=windows-365) | Redirect video playback and calls from the Cloud PC or dev box to the physical machine for faster processing and rendering. |
| [Teams media optimizations](/windows-365/enterprise/teams-on-cloud-pc) | Optimized Microsoft Teams calling and meeting experience. | ::: zone-end - ## Redirection The following sections detail the redirection support available on each platform.
virtual-desktop Configure Session Lock Behavior https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/configure-session-lock-behavior.md
To configure the session lock experience using Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Disconnect remote session on lock for Microsoft identity platform authentication** to **Enabled** or **Disabled**:
- - To disconnect the remote session when the session locks, toggle the switch to **Enabled**, then select **OK**.
+ - To disconnect the remote session when the session locks, toggle the switch to **Enabled**.
- - To show the remote lock screen when the session locks, toggle the switch to **Disabled**, then select **OK**.
+ - To show the remote lock screen when the session locks, toggle the switch to **Disabled**.
- For legacy authentication protocols:
To configure the session lock experience using Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Disconnect remote session on lock for legacy authentication** to **Enabled** or **Disabled**:
- - To disconnect the remote session when the session locks, toggle the switch to **Enabled**, then select **OK**.
+ - To disconnect the remote session when the session locks, toggle the switch to **Enabled**.
- - To show the remote lock screen when the session locks, toggle the switch to **Disabled**, then select **OK**.
+ - To show the remote lock screen when the session locks, toggle the switch to **Disabled**.
1. Select **Next**.
virtual-desktop Multimedia Redirection Developer Integration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/multimedia-redirection-developer-integration.md
+
+ Title: Developer integration with multimedia redirection for WebRTC-based calling apps in a remote session
+description: Learn how to integrate a website with multimedia redirection for WebRTC-based calling apps in a remote session from Azure Virtual Desktop, a Windows 365 Cloud PC, or Microsoft Dev Box.
+++ Last updated : 10/04/2024++
+# Developer integration with multimedia redirection for WebRTC-based calling apps in a remote session
+
+Multimedia redirection redirects video playback and calls in a remote session from Azure Virtual Desktop, a Windows 365 Cloud PC, or Microsoft Dev Box to your local device for faster processing and rendering.
+
+Call redirection optimizes audio calls for WebRTC-based calling apps, reducing latency, and improving call quality. The connection happens between the local device and the telephony app server, where WebRTC calls are offloaded from a remote session to a local device. After the connection is established, call quality becomes dependent on the web page or app providers, just as it would with a non-redirected call.
+
+Call redirection can work with most WebRTC-based calling apps without modifications. However, there might be unsupported scenarios or you might want to provide a different experience in a remote session.
+
+This article provides information about supported API interfaces and instance methods, and shows JavaScript code snippets that you can use with the [`mediaDevices` property of the Navigator interface](https://developer.mozilla.org/docs/Web/API/Navigator/mediaDevices).
+
+The navigator interface is part of the [Media Capture and Streams API](https://developer.mozilla.org/docs/Web/API/Media_Capture_and_Streams_API) to integrate your website with call redirection. Together with the [WebRTC API](https://developer.mozilla.org/docs/Web/API/WebRTC_API), these APIs provide support for streaming audio and video data with WebRTC-based calling apps. Multimedia redirection replaces the implementation of the `mediaDevices` object in the APIs to detect call redirection, handle disconnection and reconnection events, and collect diagnostic information.
+
+> [!TIP]
+> When you want to test your integration with multimedia redirection, you can enable call redirection to be available for all websites. For more information, see [Enable call redirection for all sites for testing](multimedia-redirection-video-playback-calls.md#enable-call-redirection-for-all-sites-for-testing).
+
+## Supported API interfaces and instance methods
+
+Call redirection is designed to seamlessly replace standard WebRTC usage with an implementation that redirects calls from a remote session to the local device.
+
+Here's a list of the supported interfaces and instance methods used by call redirection from the [Media Capture and Streams API](https://developer.mozilla.org/docs/Web/API/Media_Capture_and_Streams_API) and [WebRTC API](https://developer.mozilla.org/docs/Web/API/WebRTC_API):
+
+- [`AnalyserNode`](https://developer.mozilla.org/docs/Web/API/AnalyserNode)
+- [`AudioContext`](https://developer.mozilla.org/docs/Web/API/AudioContext)
+- [`HTMLAudioElement`](https://developer.mozilla.org/docs/Web/API/HTMLAudioElement)
+- [`MediaDevices`](https://developer.mozilla.org/docs/Web/API/MediaDevices)
+ - [`enumerateDevices`](https://developer.mozilla.org/docs/Web/API/MediaDevices/enumerateDevices)
+ - [`getUserMedia`](https://developer.mozilla.org/docs/Web/API/MediaDevices/getUserMedia)
+- [`MediaStream`](https://developer.mozilla.org/docs/Web/API/MediaStream)
+- [`MediaStreamAudioDestinationNode`](https://developer.mozilla.org/docs/Web/API/MediaStreamAudioDestinationNode)
+- [`MediaStreamAudioSourceNode`](https://developer.mozilla.org/docs/Web/API/MediaStreamAudioSourceNode)
+- [`MediaStreamTrack`](https://developer.mozilla.org/docs/Web/API/MediaStreamTrack)
+- [`RTCDataChannel`](https://developer.mozilla.org/docs/Web/API/RTCDataChannel)
+- [`RTCPeerConnection`](https://developer.mozilla.org/docs/Web/API/RTCPeerConnection)
+- [`RTCRtpReceiver`](https://developer.mozilla.org/docs/Web/API/RTCRtpReceiver)
+- [`RTCRtpSender`](https://developer.mozilla.org/docs/Web/API/RTCRtpSender)
+- [`RTCRtpTransceiver`](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver)
+
+### Known limitations
+
+Call redirection has the following API limitations:
+
+- Only a limited number of `WebAudio` nodes are supported currently.
+
+- `setSinkId` on an `HTMLAudioElement` works for WebRTC `srcObject` tracks, however any local playback, such as a ringtone, always plays on the default audio output of the remote session.
+
+- As some APIs return synchronously under normal conditions but have to be proxies when used with call redirection, it's possible that the state of an object isn't available immediately.
+
+## Detecting call redirection
+
+To detect whether call redirection is active, you can check the `isRemote` property of the `MediaDevices` object. If this property is `true`, call redirection is active. If this property is `undefined` or `false`, call redirection isn't active.
+
+```javascript
+window.navigator.mediaDevices['isRemote'] = true;
+```
+
+## Detecting disconnection from a remote session
+
+When a user disconnects and reconnects to a remote session when using call redirection on a web page, the local WebRTC instance that supported the objects is no longer available. Typically, if a user refreshes the page, they're able to make calls again.
+
+The web page can detect and handle these disconnect and reconnect events by tearing down and recreating all WebRTC objects, audio or video elements, and `MediaStream` or `MediaStreamTrack` interfaces. This approach eliminates the need to refresh the web page.
+
+To get notified of these events, register the `rdpClientConnectionStateChanged` event on the `MediaDevices` object, as shown in the following example. This event contains the new state, which can be either `connected` or `disconnected`.
+
+```javascript
+navigator.mediaDevices.addEventListener('rdpClientConnectionStateChanged', () =>
+ console.log("state change: " + event.detail.state);
+);
+```
+
+## Call redirection diagnostics
+
+The following example lists the properties exposed on the `MediaDevices` object. They provide specific diagnostic info about the versions of call redirection being used and session identifiers. This information is useful when reporting issues to Microsoft and we recommend you collect it as part of your own telemetry or diagnostics data.
+
+```javascript
+window.navigator.mediaDevices['mmrClientVersion'];
+window.navigator.mediaDevices['mmrHostVersion'];
+window.navigator.mediaDevices['mmrExtensionVersion'];
+
+window.navigator.mediaDevices['activityId'];
+window.navigator.mediaDevices['connectionId'];
+```
+
+Here's what each property represents:
+
+- **mmrClientVersion**: the version of the file `MsMmrDVCPlugin.dll` on the local machine, which comes as part of Windows App and the Remote Desktop app.
+
+- **mmrHostVersion**: the version of the file `MsMMRHost.exe` installed on the session host, Cloud PC, or dev box.
+
+- **mmrExtensionVersion**: the version of the Microsoft Multimedia Redirection extension running in the browser.
+
+- **activityId**: a unique identifier that Microsoft uses to associate telemetry to a specific session and maps to current web page multimedia redirection is redirecting.
+
+- **connectionId**: a unique identifier that Microsoft uses to associate telemetry to a specific session and relates to the given connection between the local device and the remote session.
+
+All of this information is available to the end user in the details of the browser extension, but this example provides a programmatic way to collect it.
+
+## Call redirection logs
+
+By default, multimedia redirection doesn't log to the console. The browser extension has a button to for users to collect logs. The following example shows how you can enable console logs programmatically. You might want to do enable console logs programmatically if you're working on integration or capturing an issue that requires longer running logs than the option in the browser extension interface provides.
+
+```javascript
+window.navigator.mediaDevices['mmrConsoleLoggingEnabled'] = true;
+```
+
+You might also want to programmatically collect multimedia redirection logs to aid in investigations. All logs for the web page are also available by registering for the `mmrExtensionLog` event on the document.
+
+The event object has two properties under **detail**:
+
+- **Level**: denotes what kind of trace the entry is and allows you to filter for specific events. Level is one of the following values:
+ - info
+ - verbose
+ - warning
+ - error
+
+- **Message**: the text-based trace message.
+
+The following example shows how to register for the `mmrExtensionLog` event:
+
+```javascript
+document.addEventListener('mmrExtensionLog', () =>
+ console.log("MMR event, level:" + event.detail.level + " : " + event.detail.message);
+);
+```
+
+## Related content
+
+Learn more about [Multimedia redirection for video playback and calls in a remote session](multimedia-redirection-video-playback-calls.md).
virtual-desktop Multimedia Redirection Intro https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/multimedia-redirection-intro.md
- Title: Understanding multimedia redirection on Azure Virtual Desktop - Azure
-description: An overview of multimedia redirection on Azure Virtual Desktop.
-- Previously updated : 06/27/2024---
-# Understanding multimedia redirection for Azure Virtual Desktop
-
-> [!IMPORTANT]
-> Call redirection is currently in PREVIEW.
-> See the [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/) for legal terms that apply to Azure features that are in beta, preview, or otherwise not yet released into general availability.
-
-Multimedia redirection redirects media content from Azure Virtual Desktop and Windows 365 to your local machine for faster processing and rendering. Both Microsoft Edge and Google Chrome support this feature when using the Windows Desktop client.
-
-Multimedia redirection has two key components:
--- Video playback redirection, which optimizes video playback experience for streaming sites and websites with embedded videos like YouTube and Facebook. For more information about which sites are compatible with this feature, see [Video playback redirection](#video-playback-redirection).-- Call redirection (preview), which optimizes audio calls for WebRTC-based calling apps. For more information about which sites are compatible with this feature, see [Call redirection](#call-redirection).-
- Call redirection only affects the connection between the local client device and the telephony app server, as shown in the following diagram.
-
- :::image type="content" source="media/multimedia-redirection-intro/call-redirection.png" alt-text="A diagram depicting the relationship between the telephony web app server, the Azure Virtual Desktop user, the web app, and other callers." lightbox="media/multimedia-redirection-intro/call-redirection.png":::
-
- Call redirection offloads WebRTC calls from session hosts to local client devices to reduce latency and improve call quality. However, after the connection is established, call quality becomes dependent on the website or app providers just as it would with a non-redirected call.
-
-## Websites that work with multimedia redirection
-
-The following lists show websites that are known to work with multimedia redirection. Multimedia redirection works with these sites by default.
-
-### Video playback redirection
-
-The following sites work with video playback redirection:
-
- :::column span="":::
- - AnyClip
- - AWS Training
- - BBC
- - Big Think
- - Bleacher Report
- - Brightcove
- - CNBC
- - Coursera\*
- - Daily Mail
- - Facebook
- - Fidelity
- :::column-end:::
- :::column span="":::
- - Flashtalking
- - Fox Sports
- - Fox Weather
- - IMDB
- - Infosec Institute
- - LinkedIn Learning\*
- - Microsoft Learn\*
- - Microsoft Stream
- - NBC Sports
- - The New York Times
- - Pluralsight
- - Politico
- - Reuters
- :::column-end:::
- :::column span="":::
- - Skillshare
- - The Guardian
- - Twitch
- - Udemy\*
- - UMU
- - U.S. News
- - Vidazoo
- - Vimeo
- - The Wall Street Journal
- - X
- - Yahoo
- - Yammer
- - YouTube (including sites with embedded YouTube videos).
- :::column-end:::
-
-\* Multimedia redirection only supports non-DRM content on these sites. Any digital rights managed content can only be played with regular video playback without multimedia redirection.
-
-### Call redirection
-
-The following websites work with call redirection:
--- [WebRTC Sample Site](https://webrtc.github.io/samples)-- [Content Guru Storm App](https://www.contentguru.com/en-us/news/content-guru-announces-its-storm-ccaas-solution-is-now-compatible-with-microsoft-azure-virtual-desktop/)-- [Twilio Flex](https://www.twilio.com/en-us/blog/public-beta-flex-microsoft-azure-virtual-desktop#join-the-flex-for-azure-virtual-desktop-public-beta)-
-Microsoft Teams live events aren't media-optimized for Azure Virtual Desktop and Windows 365 when using the native Teams app. However, if you use Teams live events with a browser that supports Teams live events and multimedia redirection, multimedia redirection is a workaround that provides smoother Teams live events playback on Azure Virtual Desktop and Windows 365. Multimedia redirection supports Enterprise Content Delivery Network (ECDN) for Teams live events.
-
-### Check if multimedia redirection is active
-
-To quickly tell if multimedia redirection is active in your browser, we've added the following icon states:
-
-| Icon State | Definition |
-|--|--|
-| :::image type="content" source="./media/mmr-extension-unsupported.png" alt-text="The multimedia redirection extension icon greyed out, indicating that the website can't be redirected or the extension isn't loading."::: | A greyed out icon means that multimedia content on the website can't be redirected or the extension isn't loading. |
-| :::image type="content" source="./media/mmr-extension-disconnect.png" alt-text="The multimedia redirection extension icon with a red square with an x that indicates the client can't connect to multimedia redirection."::: | The red square with an "X" inside of it means that the client can't connect to multimedia redirection. You may need to uninstall and reinstall the extension, then try again. |
-| :::image type="content" source="./media/mmr-extension-supported.png" alt-text="The multimedia redirection extension icon with no status applied."::: | The default icon appearance with no status applied. This icon state means that multimedia content on the website can be redirected and is ready to use. |
-| :::image type="content" source="./media/mmr-extension-playback.png" alt-text="The multimedia redirection extension icon with a green square with a play button icon inside of it, indicating that multimedia redirection is working."::: | The green square with a play button icon inside of it means that the extension is currently redirecting video playback. |
-| :::image type="content" source="./media/mmr-extension-webrtc.png" alt-text="The multimedia redirection extension icon with a green square with telephone icon inside of it, indicating that multimedia redirection is working."::: | The green square with a phone icon inside of it means that the extension is currently redirecting a WebRTC call. This icon also appears when both video playback and calls are being redirected at the same time. |
-
-Selecting the icon in your browser will display a pop-up menu where it lists the features supported on the current page. You can select to enable or disable video playback redirection and call redirection on all websites, and collect logs. It also lists the version numbers for each component of multimedia redirection.
-
-You can use the icon to check the status of the extension by following the directions in [Check the extension status](multimedia-redirection.md#check-the-extension-status).
-
-## Next steps
-
-To learn how to use this feature, see [Multimedia redirection for Azure Virtual Desktop](multimedia-redirection.md).
-
-To troubleshoot issues or view known issues, see [our troubleshooting article](troubleshoot-multimedia-redirection.md).
-
-If you're interested in video streaming on other parts of Azure Virtual Desktop, check out [Teams for Azure Virtual Desktop](teams-on-avd.md).
virtual-desktop Multimedia Redirection Video Playback Calls https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/multimedia-redirection-video-playback-calls.md
+
+ Title: Multimedia redirection for video playback and calls in a remote session
+description: Learn how multimedia redirection redirects video playback and calls in a remote session from Azure Virtual Desktop, a Windows 365 Cloud PC, or Microsoft Dev Box to your local device for faster processing and rendering.
+
+zone_pivot_groups: rdp-products-features
++ Last updated : 09/30/2024++
+# Multimedia redirection for video playback and calls in a remote session
++
+Multimedia redirection redirects video playback and calls in a remote session from Azure Virtual Desktop, a Windows 365 Cloud PC, or Microsoft Dev Box to your local device for faster processing and rendering. Specifically, these two functions work in the following ways:
+
+- **Video playback redirection**: optimizes video playback experience for web pages with embedded videos like YouTube and Facebook. The browser in the remote session fetches video content, but the bitstream of video data is sent to the local device where it decodes and renders the video in the correct place on the screen.
+
+ :::image type="content" source="media/multimedia-redirection/video-playback-redirection.png" alt-text="A diagram depicting the relationship between the video source, the remote session, and the local device." lightbox="media/multimedia-redirection/video-playback-redirection.png":::
+
+- **Call redirection**: optimizes audio calls for WebRTC-based calling apps, reducing latency, and improving call quality. The connection happens between the local device and the telephony app server, where WebRTC calls are offloaded from a remote session to a local device, as shown in the following diagram. However, after the connection is established, call quality becomes dependent on the web page or app providers, just as it would with a non-redirected call.
+
+ :::image type="content" source="media/multimedia-redirection/call-redirection.png" alt-text="A diagram depicting the relationship between the telephony web app server, the user, the web app, and other callers." lightbox="media/multimedia-redirection/call-redirection.png":::
+
+There are two components you need to install for multimedia redirection:
+
+- Remote Desktop Multimedia Redirection Service
+- Browser extension for Microsoft Edge or Google Chrome browsers
+
+This article shows you install and configure multimedia redirection in a remote session from Azure Virtual Desktop, a Windows 365 Cloud PC, or Microsoft Dev Box with Microsoft Edge or Google Chrome browsers, and manage settings for the browser extension using Microsoft Intune or Group Policy. Additionally, this article shows you how to manage settings for the browser extension in Microsoft Edge using the Microsoft Edge management service.
+
+Later in the article you can find a list of websites that work with multimedia redirection for [video playback](#websites-for-video-playback-redirection) and [calls](#websites-for-call-redirection).
+
+## Prerequisites
+
+Before you can use multimedia redirection, you need:
+
+- An existing host pool with session hosts.
+
+- Local administrator privilege on your session hosts to install and update the Remote Desktop Multimedia Redirection Service.
+
+- The latest version of Microsoft Edge or Google Chrome installed on your session hosts.
+
+- Microsoft Visual C++ Redistributable 2015-2022, version 14.32.31332.0 or later installed on your session hosts and local Windows devices. You can download the latest version from [Microsoft Visual C++ Redistributable latest supported downloads](/cpp/windows/latest-supported-vc-redist).
+
+- An existing Cloud PC.
+
+- Local administrator privilege on your Cloud PC to install and update the Remote Desktop Multimedia Redirection Service.
+
+- The latest version of Microsoft Edge or Google Chrome installed on your Cloud PC.
+
+- Microsoft Visual C++ Redistributable 2015-2022, version 14.32.31332.0 or later installed on your Cloud PC and local Windows devices. You can download the latest version from [Microsoft Visual C++ Redistributable latest supported downloads](/cpp/windows/latest-supported-vc-redist).
+
+- An existing dev box.
+
+- Local administrator privilege on your dev box to install and update the Remote Desktop Multimedia Redirection Service.
+
+- The latest version of Microsoft Edge or Google Chrome installed on your dev box.
+
+- Microsoft Visual C++ Redistributable 2015-2022, version 14.32.31332.0 or later installed on your dev box and local Windows devices. You can download the latest version from [Microsoft Visual C++ Redistributable latest supported downloads](/cpp/windows/latest-supported-vc-redist).
+
+- To configure multimedia redirection using Microsoft Intune, you need:
+
+ - Microsoft Entra ID account that is assigned the [Policy and Profile manager](/mem/intune/fundamentals/role-based-access-control-reference#policy-and-profile-manager) built-in RBAC role.
+ - A group containing the devices you want to configure.
+
+- To configure multimedia redirection using Group Policy, you need:
+
+ - A domain account that has permission to create or edit Group Policy objects.
+ - A security group or organizational unit (OU) containing the devices you want to configure.
+
+- You need to connect to a remote session from one of the following supported apps and platforms:
+ - Windows App on Windows, version 2.0.297.0 or later.
+ - Remote Desktop app on Windows, version 1.2.5709 or later.
+
+- Your local Windows device must meet the [hardware requirements for Teams on a Windows PC](/microsoftteams/hardware-requirements-for-the-teams-app#hardware-requirements-for-teams-on-a-windows-pc/).
+
+> [!NOTE]
+> Multimedia redirection isn't supported on Azure Virtual Desktop for Azure US Government, or Windows 365 for Microsoft 365 Government (GCC), GCC-High environments, and Microsoft 365 DoD.
+
+## Install multimedia redirection on session hosts
+
+There are two components you need to install on your session hosts:
+
+## Install multimedia redirection on a Cloud PC
+
+> [!IMPORTANT]
+> Multimedia redirection is already installed on Microsoft gallery images for Windows 365. You only need to install multimedia redirection on your Cloud PC if you're using a custom image.
+
+There are two components you need to install on your Cloud PC:
+
+## Install multimedia redirection on a dev box
+
+There are two components you need to install on your dev box:
+
+- Remote Desktop Multimedia Redirection Service
+- Browser extension for Microsoft Edge or Google Chrome browsers
+
+You install both the multimedia redirection service and browser extension from a single `.msi` file, which you can run manually, use Intune [Win32 app management](/mem/intune/apps/apps-win32-app-management), or your enterprise deployment tool with [msiexec](/windows-server/administration/windows-commands/msiexec). To install the `.msi` file:
+
+1. Download the [multimedia redirection installer](https://aka.ms/avdmmr/msi).
+
+1. Make sure Microsoft Edge or Google Chrome isn't running. Check in Task Manager that there are no instances of `msedge.exe` or `chrome.exe` listed in the **Details** tab.
+
+1. Install the `.msi` file using one of the following methods:
+
+ - To install it manually, open the file that you downloaded to run the setup wizard, then follow the prompts. After it's installed, select **Finish**.
+
+ - Alternatively, use the following command with Intune or your enterprise deployment tool as an administrator from Command Prompt. This example specifies there's no UI or user interaction required during the installation process.
+
+ ```cmd
+ msiexec /i <path to the MSI file> /qn
+ ```
+
+After you install the multimedia redirection service and browser extension, next you need to enable the browser extension.
+
+> [!IMPORTANT]
+> The Remote Desktop Multimedia Redirection Service doesn't update automatically. You need to update the service manually when a new version is available. You can download the latest version from the same URL in this section and install using the same steps, which automatically replaces the previous version. For information about the latest version, see [What's new in multimedia redirection](whats-new-multimedia-redirection.md).
+>
+> The browser extension updates automatically when a new version is available.
+
+## Enable the browser extension
+
+By default, users are automatically prompted to enable the extension when they open their browser. You can also enable and manage the browser extension from Microsoft Edge Add-ons or the Chrome Web Store for all users by using Microsoft Intune or Group Policy, or the Microsoft Edge management service (for Microsoft Edge only).
+
+Managing the browser extension has the following benefits:
+
+- Enable the browser extension silently and without user interaction.
+- Restrict which web pages use multimedia redirection.
+- Show or hide advanced settings for the browser extension.
+- Pin the browser extension to the browser toolbar.
+
+Select the relevant tab for your scenario.
+
+For Windows 365, we recommend using Microsoft Intune to enable the multimedia redirection browser extension.
+
+# [Microsoft Intune](#tab/intune)
+
+To enable the multimedia redirection browser extension using Microsoft Intune, expand one of the following sections, depending on which browser you're using:
+
+<br />
+
+<details>
+ <summary>For <b>Microsoft Edge</b>, expand this section.</summary>
+
+1. Sign in to the [Microsoft Intune admin center](https://endpoint.microsoft.com/).
+
+1. [Create or edit a configuration profile](/mem/intune/configuration/administrative-templates-windows) for **Windows 10 and later** devices, with the **Settings catalog** profile type.
+
+1. In the settings picker, browse to **Microsoft Edge** > **Extensions**.
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-extensions-intune.png" alt-text="A screenshot showing the Microsoft Edge extensions options in the Microsoft Intune portal." lightbox="media/multimedia-redirection/microsoft-edge-extensions-intune.png":::
+
+1. Check the box for **Configure extension management settings**, then close the settings picker.
+
+1. Expand the **Microsoft Edge** category, then toggle the switch for **Configure extension management settings** to **Enabled**
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-extensions-intune-configure-extension-management-settings.png" alt-text="A screenshot showing the Microsoft Edge extensions management settings in the Microsoft Intune portal." lightbox="media/multimedia-redirection/microsoft-edge-extensions-intune-configure-extension-management-settings.png":::
+
+1. In the box that appears for **Configure extension management settings (Device)**, enter the following JSON as a single line string. This example installs the extension with the required update URL:
+
+ ```json
+ {
+ "joeclbldhdmoijbaagobkhlpfjglcihd": {
+ "installation_mode": "force_installed",
+ "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
+ }
+ }
+ ```
+
+ > [!NOTE]
+ > You can specify additional parameters to allow or block specific sites for redirection and to show or hide advanced settings. For more information, see:
+ > - [Common policy configuration parameters](#common-policy-configuration-parameters).
+ > - [Allow or block video playback redirection for specific domains](#allow-or-block-video-playback-redirection-for-specific-domains).
+ > - [Enable call redirection for specific domains](#enable-call-redirection-for-specific-domains).
+
+1. Select **Next**.
+
+1. *Optional*: On the **Scope tags** tab, select a scope tag to filter the profile. For more information about scope tags, see [Use role-based access control (RBAC) and scope tags for distributed IT](/mem/intune/fundamentals/scope-tags).
+
+1. On the **Assignments** tab, select the group containing the computers providing a remote session you want to configure, then select **Next**.
+
+1. On the **Review + create** tab, review the settings, then select **Create**.
+
+1. After the policy applies to the computers providing a remote session, restart them for the settings to take effect.
+</details>
+
+<br />
+
+<details>
+ <summary>For <b>Google Chrome</b>, expand this section.</summary>
+
+1. Download the [administrative template for Google Chrome](https://chromeenterprise.google/browser/download/#manage-policies-tab). Select the option **Chrome ADM/ADMX templates** to download the ZIP file.
+
+1. Sign in to the [Microsoft Intune admin center](https://endpoint.microsoft.com/).
+
+1. Follow the steps to [Import custom ADMX and ADML administrative templates into Microsoft Intune](/mem/intune/configuration/administrative-templates-import-custom). You need to import the `google.admx` and `google.adml` first, then import `chrome.admx` and `chrome.adml`.
+
+1. After you imported the Google Chrome administrative template, follow the steps to [Create a profile using your imported files](/mem/intune/configuration/administrative-templates-import-custom#create-a-profile-using-your-imported-files)
+
+1. In configuration settings, browse to **Computer Configuration** > **Google** > **Google Chrome** > **Extensions**.
+
+ :::image type="content" source="media/multimedia-redirection/google-chrome-extensions-administrative-template-intune.png" alt-text="A screenshot showing the Google Chrome extensions options in the Microsoft Intune portal." lightbox="media/multimedia-redirection/google-chrome-extensions-administrative-template-intune.png":::
+
+1. Select **Extension management settings**, which opens a new pane. Scroll to the end, then select **Enabled**.
+
+ :::image type="content" source="media/multimedia-redirection/google-chrome-extensions-administrative-template-intune-enabled.png" alt-text="A screenshot showing the Google Chrome extensions management settings in the Microsoft Intune portal." lightbox="media/multimedia-redirection/google-chrome-extensions-administrative-template-intune-enabled.png":::
+
+1. In the box, enter the following JSON as a single line string. This example installs the extension with the required update URL:
+
+ ```json
+ {
+ "lfmemoeeciijgkjkgbgikoonlkabmlno": {
+ "installation_mode": "force_installed",
+ "update_url": "https://clients2.google.com/service/update2/crx",
+ }
+ }
+ ```
+
+ > [!NOTE]
+ > You can specify additional parameters to allow or block specific sites for redirection and to show or hide advanced settings. For more information, see:
+ > - [Common policy configuration parameters](#common-policy-configuration-parameters).
+ > - [Allow or block video playback redirection for specific domains](#allow-or-block-video-playback-redirection-for-specific-domains).
+ > - [Enable call redirection for specific domains](#enable-call-redirection-for-specific-domains).
+
+1. Select **OK**, then select **Next**.
+
+1. *Optional*: On the **Scope tags** tab, select a scope tag to filter the profile. For more information about scope tags, see [Use role-based access control (RBAC) and scope tags for distributed IT](/mem/intune/fundamentals/scope-tags).
+
+1. On the **Assignments** tab, select the group containing the computers providing a remote session you want to configure, then select **Next**.
+
+1. On the **Review + create** tab, review the settings, then select **Create**.
+
+1. After the policy applies to the computers providing a remote session, restart them for the settings to take effect.
+</details>
+
+# [Group Policy](#tab/group-policy)
+
+To enable the multimedia redirection browser extension using Group Policy:
+
+<br />
+
+<details>
+ <summary>For <b>Microsoft Edge</b>, expand this section.</summary>
+
+1. Download and install the Microsoft Edge administrative template by following the directions in [Configure Microsoft Edge policy settings on Windows devices](/deployedge/configure-microsoft-edge#1-download-and-install-the-microsoft-edge-administrative-template).
+
+1. Open the **Group Policy Management** console on device you use to manage the Active Directory domain.
+
+1. Create or edit a policy that targets the computers providing a remote session you want to configure.
+
+1. Navigate to **Computer Configuration** > **Policies** > **Administrative Templates** > **Microsoft Edge** > **Extensions**.
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-extensions-group-policy.png" alt-text="A screenshot showing the Microsoft Edge extensions options in the Group Policy editor." lightbox="media/multimedia-redirection/microsoft-edge-extensions-group-policy.png":::
+
+1. Double-click the policy setting **Configure extension management settings** to open it.
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-extensions-group-policy-extension-management-settings-enabled.png" alt-text="A screenshot showing the Microsoft Edge extensions management settings in the Group Policy editor." lightbox="media/multimedia-redirection/microsoft-edge-extensions-group-policy-extension-management-settings-enabled.png":::
+
+1. Select **Enabled**, then in the field for **Configure extension management settings**, enter the following JSON as a single line string. This example installs the extension with the required update URL:
+
+ ```json
+ {
+ "joeclbldhdmoijbaagobkhlpfjglcihd": {
+ "installation_mode": "force_installed",
+ "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
+ }
+ }
+ ```
+
+ > [!NOTE]
+ > You can specify additional parameters to allow or block specific sites for redirection and to show or hide advanced settings. For more information, see:
+ > - [Common policy configuration parameters](#common-policy-configuration-parameters).
+ > - [Allow or block video playback redirection for specific domains](#allow-or-block-video-playback-redirection-for-specific-domains).
+ > - [Enable call redirection for specific domains](#enable-call-redirection-for-specific-domains).
+
+1. Ensure the policy is applied to the computers providing a remote session, then restart them for the settings to take effect.
+</details>
+
+<br />
+
+<details>
+ <summary>For <b>Google Chrome</b>, expand this section.</summary>
+
+1. Download the [administrative template for Google Chrome](https://chromeenterprise.google/browser/download/#manage-policies-tab). Select the option **Chrome ADM/ADMX templates** to download the ZIP file.
+
+1. On your domain controllers, copy and paste the following files to the relevant location, depending if you store Group Policy templates in the local `PolicyDefinitions` folder or the [Group Policy Central Store](/troubleshoot/windows-client/group-policy/create-and-manage-central-store). Replace `contoso.com` with your domain name, and `en-US` if you're using a different language.
+
+ - **Filename**: `terminalserver-avd.admx`
+ - **Local location**: `C:\Windows\PolicyDefinitions\`
+ - **Central Store**: `\\contoso.com\SYSVOL\contoso.com\Policies\PolicyDefinitions`
+
+ - **Filename**: `en-US\terminalserver-avd.adml`
+ - **Local location**: `C:\Windows\PolicyDefinitions\en-US\`
+ - **Central Store**: `\\contoso.com\SYSVOL\contoso.com\Policies\PolicyDefinitions\en-US`
+
+1. Open the **Group Policy Management** console on device you use to manage the Active Directory domain.
+
+1. Create or edit a policy that targets the computers providing a remote session you want to configure.
+
+1. Navigate to **Computer Configuration** > **Policies** > **Administrative Templates** > **Google** > **Google Chrome** > **Extensions**.
+
+ :::image type="content" source="media/multimedia-redirection/google-chrome-extensions-group-policy.png" alt-text="A screenshot showing the Google Chrome extensions options in the Group Policy editor." lightbox="media/multimedia-redirection/google-chrome-extensions-group-policy.png":::
+
+1. Double-click the policy setting **Extension management settings** to open it.
+
+ :::image type="content" source="media/multimedia-redirection/google-chrome-extensions-group-policy-extension-management-settings-enabled.png" alt-text="A screenshot showing the Google Chrome extensions management settings in the Group Policy editor." lightbox="media/multimedia-redirection/google-chrome-extensions-group-policy-extension-management-settings-enabled.png":::
+
+1. Select **Enabled**, then in the field for **Extension management settings**, enter the following JSON as a single line string. This example installs the extension with the required update URL:
+
+ ```json
+ {
+ "lfmemoeeciijgkjkgbgikoonlkabmlno": {
+ "installation_mode": "force_installed",
+ "update_url": "https://clients2.google.com/service/update2/crx",
+ }
+ }
+ ```
+
+ > [!NOTE]
+ > You can specify additional parameters to allow or block specific sites for redirection and to show or hide advanced settings. For more information, see:
+ > - [Common policy configuration parameters](#common-policy-configuration-parameters).
+ > - [Allow or block video playback redirection for specific domains](#allow-or-block-video-playback-redirection-for-specific-domains).
+ > - [Enable call redirection for specific domains](#enable-call-redirection-for-specific-domains).
+
+1. Ensure the policy is applied to the computers providing a remote session, then restart them for the settings to take effect.
+</details>
+
+# [Microsoft Edge management service](#tab/edge)
+
+To enable the multimedia redirection browser extension using the Microsoft Edge management service:
+
+1. Sign in to the [Microsoft 365 admin center](https://admin.microsoft.com/Adminportal/).
+
+1. [Create a configuration profile](/deployedge/microsoft-edge-management-service) for Microsoft Edge.
+
+1. After the profile is created, select it, then select **Extensions**.
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-configuration-profile-extensions-empty.png" alt-text="A screenshot showing the empty extensions tab in a Microsoft Edge configuration profile." lightbox="media/multimedia-redirection/microsoft-edge-configuration-profile-extensions-empty.png":::
+
+1. Select **+ Select extension**.
+
+1. In the new pane that opens, enter extension ID `joeclbldhdmoijbaagobkhlpfjglcihd` into the search box. The Microsoft Multimedia Redirection extension appears in the search results. Select **Select** and close the pane. You can't search for it by name.
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-configuration-profile-extensions-multimedia-redirection-search.png" alt-text="A screenshot showing the search results for the Microsoft Multimedia Redirection extension in a Microsoft Edge configuration profile." lightbox="media/multimedia-redirection/microsoft-edge-configuration-profile-extensions-multimedia-redirection-search.png":::
+
+1. Select the **Microsoft Multimedia Redirection** extension display name, which opens a new pane. From this pane you can configure the extension settings, based on your requirements. You can also use any of the JSON examples for Microsoft Edge in this article to add the extension or modify its settings.
+
+ :::image type="content" source="media/multimedia-redirection/microsoft-edge-configuration-profile-extensions-multimedia-redirection-settings.png" alt-text="A screenshot showing the Microsoft Multimedia Redirection extension settings in a Microsoft Edge configuration profile." lightbox="media/multimedia-redirection/microsoft-edge-configuration-profile-extensions-multimedia-redirection-settings.png":::
+
+1. Follow the steps to [Assign a configuration profile to a Microsoft Entra group](/deployedge/microsoft-edge-management-service#assign-a-configuration-profile-to-a-microsoft-entra-group), then [Configure Microsoft Edge to use a configuration profile](/deployedge/microsoft-edge-management-service#configure-microsoft-edge-to-use-a-configuration-profile) to apply the profile to the groups of users you specify.
+++
+## Common policy configuration parameters
+
+The following sections show some examples of policy configuration parameters for the browser you can use to manage the multimedia redirection browser extension that are common for both video playback and call redirection. You can use these examples as part of the steps in [Enable the browser extension](#enable-the-browser-extension). Combine these examples with the parameters you require for your users.
+
+> [!NOTE]
+> The following examples are for Microsoft Edge. For Google Chrome:
+>
+> - Change `joeclbldhdmoijbaagobkhlpfjglcihd` to `lfmemoeeciijgkjkgbgikoonlkabmlno`.
+> - Change the `update_url` to `https://clients2.google.com/service/update2/crx`.
+
+### Show or hide the extension on the browser toolbar
+
+You can show or hide the extension icon on the browser toolbar. By default, extension icons are hidden from the toolbar.
+
+The following example installs the extension and shows the extension icon on the toolbar by default, but still allows users to hide it. Other values are `force_shown` and `default_hidden`. For more information about configuring extensions for Microsoft Edge, see [A detailed guide to configuring extensions using the ExtensionSettings policy](/deployedge/microsoft-edge-manage-extensions-ref-guide).
+
+```json
+{
+ "joeclbldhdmoijbaagobkhlpfjglcihd": {
+ "installation_mode": "force_installed",
+ "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
+ "toolbar_state": "default_shown"
+ }
+}
+```
+
+### Show or hide advanced settings button
+
+You can show or hide the advanced settings button to users in the extension. By default, the advanced settings button is shown and users have access to toggle each setting on or off. If you hide the advanced settings button, users can still collect logs.
+
+Here's what the extension looks like when the advanced settings button is hidden:
++
+This example installs the extension and hides the advanced settings button. Alternatively, to show the advanced settings button, set `HideAdvancedSettings` to `false`.
+
+```json
+{
+ "joeclbldhdmoijbaagobkhlpfjglcihd": {
+ "installation_mode": "force_installed",
+ "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
+ "HideAdvancedSettings": true
+ }
+}
+```
+
+## Browser extension status
+
+The extension icon changes based on whether multimedia redirection is available on the current web page and which features are supported. The following table shows the different states of the extension icon and their definitions:
+
+| Icon State | Definition |
+|--|--|
+| :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-loaded.png" alt-text="The multimedia redirection extension is loaded, indicating that content on the web page can be redirected."::: | The multimedia redirection extension is loaded, indicating that the website can be redirected. |
+| :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-not-loaded.png" alt-text="The multimedia redirection extension isn't loaded, indicating that content on the web page isn't redirected."::: | The multimedia redirection extension isn't loaded, indicating that content on the web page isn't redirected. |
+| :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-video-playback.png" alt-text="The multimedia redirection extension is currently redirecting video playback."::: | The multimedia redirection extension is currently redirecting video playback. |
+| :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-call.png" alt-text="The multimedia redirection extension is currently redirecting a call."::: | The multimedia redirection extension is currently redirecting a call. |
+| :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-error.png" alt-text="The multimedia redirection extension failed to load correctly. You might need to uninstall and reinstall the extension or the Remote Desktop Multimedia Redirection Service, then try again."::: | The multimedia redirection extension failed to load correctly. You might need to uninstall and reinstall the extension or the Remote Desktop Multimedia Redirection Service, then try again. |
+
+## Video playback redirection
+
+The following sections contain information about how to test video playback redirection and how you can configure advanced settings.
+
+### Websites for video playback redirection
+
+The following websites are known to work with video playback redirection, and which work by default.
+
+ :::column span="":::
+ - `AnyClip`
+ - `AWS Training`
+ - `BBC`
+ - `Big Think`
+ - `Bleacher Report`
+ - `Brightcove`
+ - `CNBC`
+ - `Coursera`
+ - `Daily Mail`
+ - `Facebook`
+ - `Fidelity`
+ - `Flashtalking`
+ - `Fox Sports`
+ :::column-end:::
+ :::column span="":::
+ - `Fox Weather`
+ - `IMDB`
+ - `Infosec Institute`
+ - `LinkedIn Learning`
+ - `Microsoft Learn`
+ - `Microsoft Stream`
+ - `Microsoft Teams live events`
+ - `NBC Sports`
+ - `The New York Times`
+ - `Pluralsight`
+ - `Politico`
+ - `Reuters`
+ - `Skillshare`
+ :::column-end:::
+ :::column span="":::
+ - `The Guardian`
+ - `Twitch`
+ - `Udemy`\*
+ - `UMU`
+ - `U.S. News`
+ - `Vidazoo`
+ - `Vimeo`
+ - `The Wall Street Journal`
+ - `X`
+ - `Yahoo`
+ - `Yammer`
+ - `YouTube` (including sites with embedded `YouTube` videos).
+ :::column-end:::
+
+> [!IMPORTANT]
+> Video playback redirection doesn't support protected content. Protected content can be played without multimedia redirection using regular video playback.
+
+### Test video playback redirection
+
+After you enable multimedia redirection, you can test it by visiting a web page with video playback from the list in [Websites for video playback redirection](#websites-for-video-playback-redirection) and following these steps:
+
+1. Open the web page in Microsoft Edge or Google Chrome on your remote session.
+
+1. Select the Microsoft Multimedia Redirection extension icon in the extension bar on the top-right corner of your browser. If you're on a web page where multimedia redirection is available, the icon has a blue border (rather than grey), and shows the message **The extension is loaded**. For web pages that support video playback redirection, **Video Playback Redirection** has a green check mark.
+
+ :::image type="content" source="media/multimedia-redirection/browser-extension-loaded-video-playback-redirection.png" alt-text="A screenshot of the multimedia redirection extension in the Microsoft Edge extension bar with video playback redirection enabled." lightbox="media/multimedia-redirection/browser-extension-loaded-video-playback-redirection.png":::
+
+1. On the web page, play a video. Check the status of the extension icon that multimedia redirection is active in your browser, which should look like the following image:
+
+ :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-video-playback.png" alt-text="Testing video playback redirection, the multimedia redirection extension is currently redirecting video playback.":::
+
+#### Microsoft Teams live events
+
+Microsoft Teams live events aren't media-optimized when using the native Teams app in a remote session. However, if you use Teams live events with a browser that supports Teams live events and multimedia redirection, multimedia redirection is a workaround that provides smoother Teams live events playback in a remote session. Multimedia redirection supports Enterprise Content Delivery Network (ECDN) for Teams live events.
+
+To use multimedia redirection with Teams live events, you must use the web version of Teams. Multimedia redirection isn't supported with the native Teams app. When you launch the live event in your browser, make sure you select **Watch on the web instead**. The Teams live event should automatically start playing in your browser with multimedia redirection enabled.
++
+### Advanced settings for video playback redirection
+
+The following advanced settings are available for video playback redirection. You can also hide the advanced settings button from users; for more information, see [Show or hide advanced settings button](#show-or-hide-advanced-settings-button).
+
+- **Enable video playback for all sites (beta)**: By default, video playback redirection is limited to the sites listed in [Websites for video playback redirection](#websites-for-video-playback-redirection). You can enable video playback redirection for all sites to test the feature with other web pages. This setting is experimental and might not work as expected.
+
+- **Video status overlay**: When enabled, a short message appears at the top of the video player that indicates the redirection status of the current video. The message disappears after five seconds.
+
+- **Enable redirected video playback overlay**: When enabled, a bright highlighted border appears around the video playback element that is being redirected.
+
+To enable these advanced settings:
+
+1. Select the extension icon in your browser.
+
+1. Select **Show Advanced Settings**.
+
+1. Toggle the settings you want to enable to **on**.
+
+### Allow or block video playback redirection for specific domains
+
+If you configure multimedia redirection using Microsoft Intune or Group Policy, you can allow or block specific domains for video playback redirection.
+
+> [!NOTE]
+> The following example is for Microsoft Edge. For Google Chrome:
+>
+> - Change `joeclbldhdmoijbaagobkhlpfjglcihd` to `lfmemoeeciijgkjkgbgikoonlkabmlno`.
+> - Change the `update_url` to `https://clients2.google.com/service/update2/crx`.
+
+This example installs the extension and allows **learn.microsoft.com** and **youtube.com**, but blocks all other domains. You can use this example as part of the steps in [Enable the browser extension](#enable-the-browser-extension).
+
+```json
+{
+ "joeclbldhdmoijbaagobkhlpfjglcihd": {
+ "installation_mode": "force_installed",
+ "runtime_allowed_hosts": [ "*://*.learn.microsoft.com";"*://*.youtube.com" ],
+ "runtime_blocked_hosts": [ "*://*" ],
+ "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
+ "toolbar_state": "default_shown"
+ }
+}
+```
+
+## Call redirection
+
+The following sections contain information about how to test call redirection and how you can configure advanced settings.
+
+### Websites for call redirection
+
+The following websites are known to work with call redirection, and which work by default.
+
+- [`WebRTC Sample Site`](https://webrtc.github.io/samples)
+- [`Content Guru Storm App`](https://www.contentguru.com/en-us/news/content-guru-announces-its-storm-ccaas-solution-is-now-compatible-with-microsoft-azure-virtual-desktop/)
+- [`Twilio Flex`](https://www.twilio.com/en-us/blog/public-beta-flex-microsoft-azure-virtual-desktop#join-the-flex-for-azure-virtual-desktop-public-beta)
+
+### Test call redirection
+
+After you enable multimedia redirection, you can test it by visiting a web page with calling from the list in [Websites for call redirection](#websites-for-call-redirection) and following these steps:
+
+1. Open the web page in Microsoft Edge or Google Chrome on your remote session.
+
+1. Select the Microsoft Multimedia Redirection extension icon in the extension bar on the top-right corner of your browser. If you're on a web page where multimedia redirection is available, the icon has a blue border (rather than grey), and shows the message **The extension is loaded**. For web pages that support call redirection, **Call Redirection** has a green check mark.
+
+ :::image type="content" source="media/multimedia-redirection/browser-extension-loaded-call-redirection.png" alt-text="A screenshot of the multimedia redirection extension in the Microsoft Edge extension bar with call redirection enabled." lightbox="media/multimedia-redirection/browser-extension-loaded-call-redirection.png":::
+
+1. On the web page, make a call. Check the status of the extension icon that multimedia redirection is active in your browser, which should look like the following image:
+
+ :::image type="content" source="./media/multimedia-redirection/browser-extension-icon-call.png" alt-text="Testing call redirection, the multimedia redirection extension is currently redirecting video playback.":::
+
+### Enable call redirection for specific domains
+
+If you configure multimedia redirection using Microsoft Intune or Group Policy, you can enable one or more domains for call redirection. This parameter enables you to specify extra sites in addition to the [Websites for call redirection](#websites-for-call-redirection). The supported format is the fully qualified domain name (FQDN) with up to one subdirectory. The following formats are supported:
+
+- `contoso.com`
+- `conferencing.contoso.com`
+- `contoso.com/conferencing`
+
+The following formats aren't supported:
+
+- `www.contoso.com`
+- `contoso.com/conferencing/groups`
+- `contoso.com/`
+
+> [!NOTE]
+> The following example is for Microsoft Edge. For Google Chrome:
+>
+> - Change `joeclbldhdmoijbaagobkhlpfjglcihd` to `lfmemoeeciijgkjkgbgikoonlkabmlno`.
+> - Change the `update_url` to `https://clients2.google.com/service/update2/crx`.
+
+This example installs the extension and adds calling sites `contoso.com`, `conferencing.contoso.com`, and `contoso.com/conferencing`, which are separated by a semicolon `;`:
+
+```json
+{
+ "joeclbldhdmoijbaagobkhlpfjglcihd": {
+ "installation_mode": "force_installed",
+ "AllowedCallRedirectionSites": "contoso.com;conferencing.contoso.com;contoso.com/conferencing",
+ "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
+ "toolbar_state": "default_shown"
+ }
+}
+```
+
+### Enable call redirection for all sites for testing
+
+You can enable call redirection for all sites to allow you to test web pages that aren't listed in [Websites for call redirection](#websites-for-call-redirection). This setting is experimental and can be useful when developing integration of your website with call redirection.
+
+To enable call redirection for all sites:
+
+1. On a local Windows device, add the following registry key and value:
+
+ - **Key**: `HKEY_CURRENT_USER\Software\Microsoft\MMR`
+ - **Type**: `REG_DWORD`
+ - **Value**: `AllowCallRedirectionAllSites`
+ - **Data**: `1`
+
+1. Connect to a remote session and load a web browser, then select the extension icon in your browser.
+
+1. Select **Show Advanced Settings**.
+
+1. Toggle **Enable call redirection for all sites (experimental)** to **on**.
+
+ :::image type="content" source="./media/multimedia-redirection/browser-extension-loaded-advanced-settings-call-redirection-all-sites.png" alt-text="A screenshot showing the browser extension with the option Enable call redirection for all sites (experimental) set to on.":::
+
+## Next step
+
+To troubleshoot issues or view known issues, see [our troubleshooting article](troubleshoot-multimedia-redirection.md).
virtual-desktop Multimedia Redirection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/multimedia-redirection.md
- Title: Use multimedia redirection on Azure Virtual Desktop - Azure
-description: How to use multimedia redirection on Azure Virtual Desktop.
-- Previously updated : 06/27/2024--
-# Use multimedia redirection on Azure Virtual Desktop
-
-> [!IMPORTANT]
-> Multimedia redirection call redirection is currently in PREVIEW.
-> See the [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/) for legal terms that apply to Azure features that are in beta, preview, or otherwise not yet released into general availability.
-
-This article will show you how to use multimedia redirection for Azure Virtual Desktop and Windows 365 with Microsoft Edge or Google Chrome browsers. For more information about how multimedia redirection works, see [Understanding multimedia redirection for Azure Virtual Desktop](multimedia-redirection-intro.md).
-
-## Prerequisites
-
-Before you can use multimedia redirection on Azure Virtual Desktop and Windows 365, you'll need the following things:
--- An Azure Virtual Desktop or Windows 365 deployment.-- Microsoft Edge or Google Chrome installed on your session hosts or Cloud PCs.-- Windows Desktop client:
- - To use video playback redirection, you must install [Windows Desktop client, version 1.2.3916 or later](/windows-server/remote/remote-desktop-services/clients/windowsdesktop-whatsnew). This feature is only compatible with version 1.2.3916 or later of the Windows Desktop client.
-
- - To use call redirection, you must install the Windows Desktop client, version 1.2.4337 or later with [Insider releases enabled](users/client-features-windows.md#enable-insider-releases).
--- Microsoft Visual C++ Redistributable 2015-2022, version 14.32.31332.0 or later installed on your session hosts and Windows client devices. You can download the latest version from [Microsoft Visual C++ Redistributable latest supported downloads](/cpp/windows/latest-supported-vc-redist).--- Your device must meet the [hardware requirements for Teams on a Windows PC](/microsoftteams/hardware-requirements-for-the-teams-app#hardware-requirements-for-teams-on-a-windows-pc/).-
-> [!NOTE]
-> Multimedia redirection isn't supported on Azure Virtual Desktop for Microsoft 365 Government (GCC), GCC-High environments, and Microsoft 365 DoD.
-
-## Install the multimedia redirection extension
-
-For multimedia redirection to work, there are two parts to install on your session hosts: the host component and the browser extension for Edge or Chrome. You install both the host component and browser extension for Edge or Chrome browsers on your session hosts from an MSI file. You can also get and install the browser extension from Microsoft Edge Add-ons or the Chrome Web Store.
-
-### Install the host component and browser extension from an MSI file
-
-To install the host component on your session hosts, you can install the MSI manually on each session host or use your enterprise deployment tool with `msiexec`. To install the MSI manually, you'll need to:
-
-1. Sign in to a session host as a local administrator.
-
-1. Download the [multimedia redirection host MSI installer](https://aka.ms/avdmmr/msi).
-
-1. Open the file that you downloaded to run the setup wizard.
-
-1. Follow the prompts. Once it's finished installing, select **Finish**.
-
-### Enable the browser extension
-
-Next, users need to enable the browser extension in a remote session to use multimedia redirection with Edge or Chrome.
-
-> [!TIP]
-> You can also automate installing and enabling the browser extension from Microsoft Edge Add-ons or the Chrome Web Store for all users by [using Group Policy](#install-the-browser-extension-using-group-policy).
-
-1. Sign in to Azure Virtual Desktop and open Edge or Chrome.
-
-1. When opening the browser, after a short while, users will see a prompt that says **New Extension added**. Once the prompt appears, users should select **Turn on extension**. Users should also pin the extension so that they can see from the icon if multimedia redirection is connected.
-
- :::image type="content" source="./media/mmr-extension-enable.png" alt-text="A screenshot of the prompt to enable the extension.":::
-
- >[!IMPORTANT]
- >If the user selects **Remove extension**, it will be removed from the browser and they will need to add it from Microsoft Edge Add-ons or the Chrome Web Store. To install it again, see [Install the browser extension manually (optional)](#install-the-browser-extension-manually-optional).
-
-Using Group Policy has the following benefits:
--- You can install the extension silently and without user interaction.-- You can restrict which websites use multimedia redirection.-- You can pin the extension icon in Google Chrome by default.-
-#### Install the browser extension manually (optional)
-
-If installing the host component doesn't automatically install the extension, you can also download it from Microsoft Edge Add-ons or the Chrome Web Store.
-
-To install the multimedia redirection extension manually, follow these steps:
-
-1. Sign in to Azure Virtual Desktop.
-
-1. In your browser, open one of the following links, depending on which browser you're using:
-
- - For **Microsoft Edge**: [Microsoft multimedia redirection Extension](https://microsoftedge.microsoft.com/addons/detail/wvd-multimedia-redirectio/joeclbldhdmoijbaagobkhlpfjglcihd)
-
- - For **Google Chrome**: [Microsoft multimedia redirection Extension](https://chrome.google.com/webstore/detail/wvd-multimedia-redirectio/lfmemoeeciijgkjkgbgikoonlkabmlno)
-
-1. Install the extension by selecting **Get** (for Microsoft Edge) or **Add to Chrome** (for Google Chrome), then at the additional prompt, select **Add extension**. Once the installation is finished, you'll see a confirmation message saying that you've successfully added the extension.
-
-#### Install the browser extension using Group Policy
-
-You can install the multimedia redirection extension using Group Policy, either centrally from your domain for session hosts that are joined to an Active Directory (AD) domain, or using the Local Group Policy Editor for each session host. This process will change depending on which browser you're using.
-
-# [Edge](#tab/edge)
-
-1. Download and install the Microsoft Edge administrative template by following the directions in [Configure Microsoft Edge policy settings on Windows devices](/deployedge/configure-microsoft-edge#1-download-and-install-the-microsoft-edge-administrative-template)
-
-1. Next, decide whether you want to configure Group Policy centrally from your domain or locally for each session host:
-
- - To configure it from an AD Domain, open the **Group Policy Management Console (GPMC)** and create or edit a policy that targets your session hosts.
-
- - To configure it locally, open the **Local Group Policy Editor** on the session host.
-
-1. Go to **Computer Configuration** > **Administrative Templates** > **Microsoft Edge** > **Extensions**.
-
-1. Open the policy setting **Configure extension management settings** and set it to **Enabled**.
-
-1. In the field for **Configure extension management settings**, enter the following:
-
- ```json
- { "joeclbldhdmoijbaagobkhlpfjglcihd": { "installation_mode": "force_installed", "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx" } }
- ```
-
- You can specify additional parameters to allow or block specific domains. For example, to only allow *youtube.com*, enter the following:
-
- ```json
- { "joeclbldhdmoijbaagobkhlpfjglcihd": { "installation_mode": "force_installed", "runtime_allowed_hosts": [ "*://*.youtube.com" ], "runtime_blocked_hosts": [ "*://*" ], "update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx" } }
- ```
-
-1. Apply the changes by running the following command in Command Prompt or PowerShell on each session host:
-
- ```cmd
- gpupdate /force
- ```
-
-# [Google Chrome](#tab/google-chrome)
-
-1. Download and install the Google Chrome administrative template by following the instructions in [Set Chrome Browser policies on managed PCs](https://support.google.com/chrome/a/answer/187202#zippy=%2Cwindows)
-
-1. Next, decide whether you want to configure Group Policy centrally from your domain or locally for each session host:
-
- - To configure it from an AD Domain, open the **Group Policy Management Console (GPMC)** and create or edit a policy that targets your session hosts.
-
- - To configure it locally, open the **Local Group Policy Editor** on the session host.
-
-1. Go to **Computer Configuration** > **Administrative Templates** > **Google** > **Google Chrome** > **Extensions**.
-
-1. Open the policy setting **Extension management settings** and set it to **Enabled**.
-
-1. In the field for **Extension management settings**, enter the following:
-
- ```json
- { "lfmemoeeciijgkjkgbgikoonlkabmlno": { "installation_mode": "force_installed", "update_url": "https://clients2.google.com/service/update2/crx" } }
- ```
-
- You can specify additional parameters to allow or block specific domains. For example, to only allow *youtube.com* and pin the extension to the toolbar, enter the following:
-
- ```json
- { "lfmemoeeciijgkjkgbgikoonlkabmlno": { "installation_mode": "force_installed", "runtime_allowed_hosts": [ "*://*.youtube.com" ], "runtime_blocked_hosts": [ "*://*" ], "toolbar_pin": "force_pinned", "update_url": "https://clients2.google.com/service/update2/crx" } }
- ```
-
-1. Apply the changes by running the following command in Command Prompt or PowerShell on each session host:
-
- ```cmd
- gpupdate /force
- ```
---
-## Configure call redirection (preview) for the Remote Desktop client only
-
-If you want to test the call redirection (preview) feature, you first need to configure the Remote Desktop client to use [Insider features](users/client-features-windows.md#enable-insider-releases).
-
-## Check the extension status
-
-Once you've installed the extension, you can check its status by visiting a website with media content, such as one from the list at [Websites that work with multimedia redirection](multimedia-redirection-intro.md#websites-that-work-with-multimedia-redirection), and hovering your mouse cursor over [the multimedia redirection extension icon](multimedia-redirection-intro.md#check-if-multimedia-redirection-is-active) in the extension bar on the top-right corner of your browser. A message will appear and tell you about the current status, as shown in the following screenshot.
--
-### Features supported on current page
-
-To find out what types of redirections are enabled on the webpage you're visiting, you can open up the extension menu and look for the section named **Features supported on current page**. If a feature is currently enabled, you'll see a green check mark next to it, as shown in the following screenshot.
--
-## Teams live events
-
-To use multimedia redirection with Teams live events:
-
-1. Sign in to Azure Virtual Desktop.
-
-1. Open the link to the Teams live event in either the Edge or Chrome browser.
-
-1. Make sure you can see a green play icon as part of the [multimedia redirection status icon](multimedia-redirection-intro.md#check-if-multimedia-redirection-is-active). If the green play icon is there, multimedia redirection is enabled for Teams live events.
-
-1. Select **Watch on the web instead**. The Teams live event should automatically start playing in your browser. Make sure you only select **Watch on the web instead**, as shown in the following screenshot. If you use the native Teams app, multimedia redirection won't work.
-
- :::image type="content" source="./media/teams-live-events.png" alt-text="A screenshot of the 'Watch the live event in Microsoft Teams' page. The status icon and 'watch on the web instead' options are highlighted in red.":::
-
-## Advanced settings
-
-The following sections describe additional settings you can configure in multimedia redirection.
-
-### Video playback redirection
-
-The following sections will show you how to enable and use various features related to video playback redirection for Azure Virtual Desktop.
-
-#### Enable video playback for all sites
-
-Video playback redirection is currently limited to the sites listed in [Websites that work with multimedia redirection](multimedia-redirection-intro.md#websites-that-work-with-multimedia-redirection) by default. However, you can enable video playback redirection for all sites to allow you to test the feature with other websites. To enable video playback redirection for all sites:
-
-1. Select the extension icon in your browser.
-
-1. Select **Show Advanced Settings**.
-
-1. Toggle **Enable video playback for all sites (beta)** to **on**.
-
-#### Enable redirected video overlay
-
-Redirected video outlines will allow you to highlight the currently redirected video elements. When this is enabled, you will see a bright highlighted border around the video element that is being redirected. To enable redirected video outlines:
-
-1. Select the extension icon in your browser.
-
-1. Select **Show Advanced Settings**.
-
-1. Toggle **Redirected video outlines** to **on**. You will need to refresh the webpage for the change to take effect.
-
-#### Video status overlay
-
-When you enable video status overlay, you'll see a short message at the top of the video player that indicates the redirection status of the current video. The message will disappear after five seconds. To enable video status overlay:
-
-1. Select the extension icon in your browser.
-
-1. Select **Show Advanced Settings**.
-
-1. Toggle **Video Status Overlay** to **on**. You'll need to refresh the webpage for the change to take effect.
-
-### Call redirection
-
-The following section will show you how to use advanced features for call redirection.
-
-#### Enable call redirection for all sites
-
-Call redirection is currently limited to the web apps listed in [Websites that work with multimedia redirection](multimedia-redirection-intro.md#websites-that-work-with-multimedia-redirection) by default. If you're using one of the calling apps listed in [Call redirection](multimedia-redirection-intro.md#call-redirection) with an internal URL, you must turn the **Enable WebRTC for all sites** setting to use call redirection. You can also enable call redirection for all sites to test the feature with web apps that aren't officially supported yet.
-
-To enable call redirection for all sites:
-
-1. On your client device, create a registry key with the following values:
-
- - **Key**: HKCU\Software\Microsoft\MMR
- - **Type**: REG_DWORD
- - **Name**: AllowCallRedirectionAllSites
- - **Value data**: 1
-
-1. Next, connect to a remote session, then select the **extension icon** in your browser.
-
-1. Select **Show Advanced Settings**.
-
-1. Toggle **Enable call redirection for all sites (experimental)** on.
-
-## Next steps
-
-For more information about multimedia redirection and how it works, see [What is multimedia redirection for Azure Virtual Desktop?](multimedia-redirection-intro.md).
-
-To troubleshoot issues or view known issues, see [our troubleshooting article](troubleshoot-multimedia-redirection.md).
-
-If you're interested in learning more about using Teams for Azure Virtual Desktop, check out [Teams for Azure Virtual Desktop](teams-on-avd.md).
virtual-desktop Redirection Configure Audio Video https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-audio-video.md
This article provides information about the supported redirection methods and ho
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the session host, host pool RDP properties, or local device. > > - [Microsoft Teams](teams-on-avd.md) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
This article provides information about the supported redirection methods and ho
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the Cloud PC or local device. > > - [Microsoft Teams](/windows-365/enterprise/teams-on-cloud-pc) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
This article provides information about the supported redirection methods and ho
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the dev box or local device. > > - [Microsoft Teams](/windows-365/enterprise/teams-on-cloud-pc) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
To configure the audio output location using host pool RDP properties:
1. Select **Save**.
-1. To test the configuration, connect to a remote session and play audio. Verify that you can hear audio as expected. Make sure you're not using Microsoft Teams or a web page that's redirected with [multimedia redirection](multimedia-redirection-intro.md) for this test.
+1. To test the configuration, connect to a remote session and play audio. Verify that you can hear audio as expected. Make sure you're not using Microsoft Teams or a web page that's redirected with [multimedia redirection](multimedia-redirection-video-playback-calls.md) for this test.
::: zone-end ::: zone pivot="azure-virtual-desktop"
To allow or disable audio and video playback redirection, and limit audio playba
1. Expand the **Administrative templates** category, then toggle the switch for **Allow audio and video playback redirection**, depending on your requirements:
- - To allow audio and video playback redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To allow audio and video playback redirection, toggle the switch to **Enabled**.
- - To disable audio and video playback redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To disable audio and video playback redirection, toggle the switch to **Disabled**.
1. If you selected **Limit audio playback quality**, select the audio quality from the drop-down list.
To allow or disable audio and video playback redirection, and limit audio playba
1. Once the policy applies to the computers providing a remote session, restart them for the settings to take effect.
-1. To test the configuration, connect to a remote session and play audio. Verify that you can hear audio as expected. Make sure you're not using Microsoft Teams or a web page that's redirected with [multimedia redirection](multimedia-redirection-intro.md) for this test.
+1. To test the configuration, connect to a remote session and play audio. Verify that you can hear audio as expected. Make sure you're not using Microsoft Teams or a web page that's redirected with [multimedia redirection](multimedia-redirection-video-playback-calls.md) for this test.
# [Group Policy](#tab/group-policy)
To allow or disable audio and video playback redirection, and limit audio playba
1. Ensure the policy is applied to the computers providing a remote session, then restart them for the settings to take effect.
-1. To test the configuration, connect to a remote session and play audio. Verify that you can hear audio as expected. Make sure you're not using Microsoft Teams or a web page that's redirected with [multimedia redirection](multimedia-redirection-intro.md) for this test.
+1. To test the configuration, connect to a remote session and play audio. Verify that you can hear audio as expected. Make sure you're not using Microsoft Teams or a web page that's redirected with [multimedia redirection](multimedia-redirection-video-playback-calls.md) for this test.
virtual-desktop Redirection Configure Camera Webcam Video Capture https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-camera-webcam-video-capture.md
This article provides information about the supported redirection methods and ho
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the session host, host pool RDP properties, or local device. > > - [Microsoft Teams](teams-on-avd.md) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
This article provides information about the supported redirection methods and ho
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the Cloud PC or local device. > > - [Microsoft Teams](/windows-365/enterprise/teams-on-cloud-pc) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
This article provides information about the supported redirection methods and ho
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the dev box or local device. > > - [Microsoft Teams](/windows-365/enterprise/teams-on-cloud-pc) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
To allow or disable video capture redirection, which includes cameras and webcam
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow video capture redirection** to **Enabled** or **Disabled**, depending on your requirements:
- - To allow video capture redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow video capture redirection, toggle the switch to **Disabled**.
- - To disable video capture redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable video capture redirection, toggle the switch to **Enabled**.
1. Select **Next**.
For iOS/iPadOS and Android devices, you can disable camera redirection using Int
Video encoding redirection controls whether to encode video in a remote session or redirected to the local device, and is configured with a host pool RDP property. The corresponding RDP property is `encode redirected video capture:i:<value>`. For more information, see [Supported RDP properties](rdp-properties.md#device-redirection). > [!TIP]
-> Redirect video encoding is different to [multimedia redirection](multimedia-redirection-intro.md), which redirects video playback and calls to your local device for faster processing and rendering.
+> Redirect video encoding is different to [multimedia redirection](multimedia-redirection-video-playback-calls.md), which redirects video playback and calls to your local device for faster processing and rendering.
To configure redirect video encoding:
virtual-desktop Redirection Configure Clipboard https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-clipboard.md
To enable or disable clipboard redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow Clipboard redirection** to **Enabled** or **Disabled**, depending on your requirements:
- - To allow clipboard redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow clipboard redirection, toggle the switch to **Disabled**.
- - To disable clipboard redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable clipboard redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Redirection Configure Drives Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-drives-storage.md
To enable or disable drive redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow drive redirection** to **Enabled** or **Disabled**, depending on your requirements:
- - To allow drive redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow drive redirection, toggle the switch to **Disabled**.
- - To disable drive redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable drive redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Redirection Configure Plug Play Mtp Ptp https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-plug-play-mtp-ptp.md
To allow or disable MTP and PTP redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then set toggle the switch for **Do not allow supported Plug and Play device redirection**, depending on your requirements:
- - To allow MTP and PTP redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow MTP and PTP redirection, toggle the switch to **Disabled**.
- - To disable MTP and PTP redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable MTP and PTP redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Redirection Configure Printers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-printers.md
To allow or disable printer redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow client printer redirection** to **Enabled** or **Disabled**, depending on your requirements:
- - To allow printer redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow printer redirection, toggle the switch to **Disabled**.
- - To disable printer redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable printer redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Redirection Configure Serial Com Ports https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-serial-com-ports.md
To allow or disable serial or COM port redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow COM port redirection** to **Enabled** or **Disabled**, depending on your requirements:
- - To allow serial or COM port redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow serial or COM port redirection, toggle the switch to **Disabled**.
- - To disable serial or COM port redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable serial or COM port redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Redirection Configure Smart Cards https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-smart-cards.md
To allow or disable smart card device redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow smart card device redirection**, depending on your requirements:
- - To allow smart card device redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow smart card device redirection, toggle the switch to **Disabled**.
- - To disable smart card device redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable smart card device redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Redirection Configure Usb https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-usb.md
Some USB peripherals might have functions that use opaque low-level USB redirect
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the session host, host pool RDP properties, or local device. > > - [Microsoft Teams](teams-on-avd.md) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
Some USB peripherals might have functions that use opaque low-level USB redirect
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the Cloud PC or local device. > > - [Microsoft Teams](/windows-365/enterprise/teams-on-cloud-pc) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
Some USB peripherals might have functions that use opaque low-level USB redirect
> If you use the following features in a remote session, they have their own optimizations that are independent from the redirection configuration on the dev box or local device. > > - [Microsoft Teams](/windows-365/enterprise/teams-on-cloud-pc) for camera, microphone, and audio redirection.
-> - [Multimedia redirection](multimedia-redirection-intro.md) for audio, video and call redirection.
+> - [Multimedia redirection](multimedia-redirection-video-playback-calls.md) for audio, video and call redirection.
::: zone-end
virtual-desktop Redirection Configure Webauthn https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/redirection-configure-webauthn.md
To allow or disable WebAuthn redirection using Microsoft Intune:
1. Expand the **Administrative templates** category, then toggle the switch for **Do not allow WebAuthn redirection** to **Enabled** or **Disabled**, depending on your requirements:
- - To allow WebAuthn redirection, toggle the switch to **Disabled**, then select **OK**.
+ - To allow WebAuthn redirection, toggle the switch to **Disabled**.
- - To disable WebAuthn redirection, toggle the switch to **Enabled**, then select **OK**.
+ - To disable WebAuthn redirection, toggle the switch to **Enabled**.
1. Select **Next**.
virtual-desktop Troubleshoot Multimedia Redirection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/troubleshoot-multimedia-redirection.md
This article describes known issues and troubleshooting instructions for multime
## Known issues and limitations
-The following issues are ones we're already aware of, so you won't need to report them:
+Here are the current known issues and limitations for multimedia redirection:
-- In the first browser tab a user opens, the extension pop-up might show a message that says "The extension is not loaded" or a message that says video playback or call redirection isn't supported while redirection is working correctly in the tab. You can resolve this issue by opening a second tab.
+- In the first browser tab a user opens, the extension pop-up might show the message **The extension is not loaded** or a message that says video playback or call redirection isn't supported while redirection is working correctly in the tab. You can resolve this issue by opening a second tab.
-- Multimedia redirection only works on the [Windows Desktop client](users/connect-windows.md). Any other clients, such as the macOS, iOS, Android, or Web client, don't support multimedia redirection.
+- Multimedia redirection only works on Windows. Any other platforms, such as the macOS, iOS, Android, or connecting to a remote session in a web browser on any platform, don't support multimedia redirection.
-- Multimedia redirection won't work as expected if the session hosts in your deployment are blocking cmd.exe.
+- Multimedia redirection doesn't work as expected if the session hosts in your deployment block `cmd.exe`.
-- If you aren't using the default Windows size settings for video players, such as not fitting the player to window, not maximizing the window, and so on), parts of video players may not appear correctly. If you encounter this issue, you should change the settings back to Default mode.
+- If you aren't using the default Windows size settings for video players, such as not fitting the player to window, not maximizing the window, parts of video players might not appear correctly. If you encounter this issue, you should change the settings back to the default settings.
-- If your monitor or browser scale factor isn't set to 100%, you may see a gray pattern appear on the video screen.
+- If your monitor or browser scale factor isn't set to 100%, you might see a grey pattern appear on the video screen.
-### The MSI installer doesn't work
+### Known issues for video playback redirection
-- There's a small chance that the MSI installer won't be able to install the extension during internal testing. If you run into this issue, you need to install the multimedia redirection extension from the Microsoft Edge Store or Google Chrome Store.
+- Video playback redirection doesn't support protected content.
- - [Multimedia redirection browser extension (Microsoft Edge)](https://microsoftedge.microsoft.com/addons/detail/wvd-multimedia-redirectio/joeclbldhdmoijbaagobkhlpfjglcihd)
- - [Multimedia browser extension (Google Chrome)](https://chrome.google.com/webstore/detail/wvd-multimedia-redirectio/lfmemoeeciijgkjkgbgikoonlkabmlno)
+- When you resize the video window, the window's size adjusts faster than the video itself. You also see this issue when minimizing and maximizing the window.
-- Installing the extension on host machines with the MSI installer will prompt users to either accept the extension the first time they open the browser or display a warning or error message. If users deny this prompt, it can cause the extension to not load. To avoid this issue, install the extensions by [editing the group policy](multimedia-redirection.md#install-the-browser-extension-using-group-policy).
+- If you access a video site, sometimes the video remains in a loading or buffering state but never actually start playing. For now, you can make videos load again by signing out of your remote session and signing in again.
-- Sometimes the host and client version number disappears from the extension status message, which prevents the extension from loading on websites that support it. If you installed the extension correctly, this issue is because your host machine doesn't have the latest C++ Redistributable installed. To fix this issue, install the [latest supported Visual C++ Redistributable downloads](/cpp/windows/latest-supported-vc-redist).
+### Known issues for call redirection
-### Known issues for video playback redirection
+- Call redirection only works for WebRTC-based audio calls on the sites listed in [Call redirection](multimedia-redirection-video-playback-calls.md#call-redirection).
-- Video playback redirection doesn't currently support protected content, so videos that use protected content, such as from Pluralsight and Netflix, won't work.
+- When you disconnect from a remote session, call redirection might stop working. You can make redirection start working again by refreshing the webpage.
-- When you resize the video window, the window's size adjusts faster than the video itself. You'll also see this issue when minimizing and maximizing the window.
+- If you see issues on a supported WebRTC audio calling site and enabled the **Enable video playback for all sites** setting in the multimedia redirection extension pop-up, disable the setting and try again.
-- If you access a video site, sometimes the video remains in a loading or buffering state but never actually start playing. We're aware of this issue and are currently investigating it. For now, you can make videos load again by signing out of Azure Virtual Desktop and restarting your session.
+### The MSI installer doesn't install the browser extension
-### Known issues for call redirection
+- If the `.msi` file doesn't install the browser extension, you can install the multimedia redirection extension from the Microsoft Edge Store or Google Chrome Store. You need to use the following links as the extension isn't searchable:
-- Call redirection only works for WebRTC-based audio calls on the sites listed in [Call redirection](multimedia-redirection-intro.md#call-redirection).
+ - [Multimedia redirection browser extension (Microsoft Edge)](https://microsoftedge.microsoft.com/addons/detail/wvd-multimedia-redirectio/joeclbldhdmoijbaagobkhlpfjglcihd)
+ - [Multimedia browser extension (Google Chrome)](https://chrome.google.com/webstore/detail/wvd-multimedia-redirectio/lfmemoeeciijgkjkgbgikoonlkabmlno)
-- When disconnecting from a remote session, call redirection might stop working. You can make redirection start working again by refreshing the webpage.
+- Installing the extension on host machines with the MSI installer prompts users to either accept the extension the first time they open the browser or display a warning or error message. If users deny this prompt, it can cause the extension to not load. To avoid this issue, install the extensions by [editing the group policy](multimedia-redirection.md#install-the-browser-extension-using-group-policy).
-- If you enabled the **Enable video playback for all sites** setting in the multimedia redirection extension pop-up and see issues on a supported WebRTC audio calling site, disable the setting and try again.
+- Sometimes the host and client version number disappears from the extension status message, which prevents the extension from loading on websites that support it. If you installed the extension correctly, this issue is because your host machine doesn't have the latest C++ Redistributable installed. To fix this issue, install the [latest supported Visual C++ Redistributable downloads](/cpp/windows/latest-supported-vc-redist).
## Getting help for call redirection and video playback If you can start a call with multimedia redirection enabled and can see the green phone icon on the extension icon while calling, but the call quality is low, you should contact the app provider for help.
-If calls aren't going through, certain features don't work as expected while multimedia redirection is enabled, or multimedia redirection won't enable at all, you must submit a [Microsoft support ticket](/azure/azure-portal/supportability/how-to-create-azure-support-request).
+If calls aren't going through, certain features don't work as expected while multimedia redirection is enabled, or multimedia redirection doesn't enable at all, you must submit a [Microsoft support ticket](/azure/azure-portal/supportability/how-to-create-azure-support-request).
If you encounter any video playback issues that this guide doesn't address or resolve, submit a [Microsoft support ticket](/azure/azure-portal/supportability/how-to-create-azure-support-request).
-## Log collection
-
-If you encounter any issues, you can collect logs from the extension and provide them to your IT admin or support.
+## Collect logs
-To enable log collection:
+If a web page isn't working as expected with multimedia redirection, you can collect logs to help troubleshoot the issue. To collect logs:
-1. Select the multimedia redirection extension icon in your browser.
+1. Select the extension icon in your browser.
1. Select **Show Advanced Settings**. 1. For **Collect logs**, select **Start**.
+1. Reproduce the issue on the web page, then select the extension icon again and for **Collect logs**, select **Stop**. Your browser automatically prompts you to download one or more log files that you can save and use with support cases.
+ ## Next steps
-For more information about this feature and how it works, see [What is multimedia redirection for Azure Virtual Desktop?](multimedia-redirection-intro.md).
+For more information about this feature and how it works, see [What is multimedia redirection for Azure Virtual Desktop?](multimedia-redirection-video-playback-calls.md).
To learn how to use this feature, see [Multimedia redirection for Azure Virtual Desktop](multimedia-redirection.md).
virtual-desktop Whats New Documentation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/whats-new-documentation.md
In July 2023, we made the following changes to the documentation:
- Updated autoscale articles for the preview of autoscale for personal host pools. Learn more at [Autoscale scaling plans and example scenarios](autoscale-scenarios.md) and [Create an autoscale scaling plan](autoscale-scaling-plan.md). -- Updated multimedia redirection articles for the preview of call redirection. Learn more at [Understanding multimedia redirection](multimedia-redirection-intro.md).
+- Updated multimedia redirection articles for the preview of call redirection. Learn more at [Multimedia redirection for video playback and calls in a remote session](multimedia-redirection-video-playback-calls.md).
- Updated [Watermarking](watermarking.md) for general availability.
virtual-desktop Whats New Multimedia Redirection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/whats-new-multimedia-redirection.md
Title: What's new in multimedia redirection MMR? - Azure Virtual Desktop
+ Title: What's new in multimedia redirection? - Azure Virtual Desktop
description: New features and product updates for multimedia redirection for Azure Virtual Desktop.
# What's new in multimedia redirection?
-This article has the latest updates for host component of multimedia redirection (MMR) for Azure Virtual Desktop.
+This article has the latest updates for host component of multimedia redirection for Azure Virtual Desktop.
## Latest available version
-The following table shows the latest available version of the MMR extension for Azure Virtual Desktop. For setup instructions, see [Use multimedia redirection on Azure Virtual Desktop](multimedia-redirection.md).
+The following table shows the latest available version of multimedia redirection for Azure Virtual Desktop. For setup instructions, see [Multimedia redirection for video playback and calls in a remote session](multimedia-redirection.md).
| Release | Latest version | Download | ||-|-|
-| Public | 1.0.2404.4003 | [MMR extension](https://aka.ms/avdmmr/msi) |
+| Public | 1.0.2404.4003 | [Multimedia redirection](https://aka.ms/avdmmr/msi) |
## Updates for version 1.0.2404.4003
In this release, we've made the following changes:
In this release, we've made the following changes: -- Released general availability-compatible MMR host.
+- Released general availability-compatible multimedia redirection host.
- Fixed an issue where content can cause the service to stop working instead of just giving a playback error. ## Updates for version 0.3.2210.12012
In this release, we've made the following changes:
## Next steps
-Learn more about MMR at [Understanding multimedia direction for Azure Virtual Desktop](multimedia-redirection-intro.md) and [Use multimedia redirection for Azure Virtual Desktop](multimedia-redirection.md).
+Learn more about multimedia redirection at [Multimedia redirection for video playback and calls in a remote session](multimedia-redirection-video-playback-calls.md).
virtual-desktop Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/whats-new.md
Here's what changed in July 2023:
Call redirection, which optimizes audio calls for WebRTC-based calling apps, is now in preview. Multimedia redirection redirects media content from Azure Virtual Desktop to your local machine for faster processing and rendering. Both Microsoft Edge and Google Chrome support this feature when using the Windows Desktop client.
-For more information about which sites are compatible with this feature, see [Call redirection](multimedia-redirection-intro.md#call-redirection).
+For more information about which sites are compatible with this feature, see [Call redirection](multimedia-redirection-video-playback-calls.md#call-redirection).
### Autoscale for personal host pools is currently in preview
This feature is an extension of the generally available Remote Desktop Protocol
### Multimedia redirection enhancements now generally available
-Multimedia Redirection (MMR) is now generally available. MMR enables smooth video playback while viewing videos in a browser running on Azure Virtual Desktop. For more information, see [our blog post](https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/announcing-general-availability-of-multimedia-redirection-mmr-on/ba-p/3736489) or [Understanding multimedia redirection for Azure Virtual Desktop](multimedia-redirection-intro.md).
+Multimedia redirection is now generally available. Multimedia redirection enables smooth video playback while viewing videos in a browser running on Azure Virtual Desktop. For more information, see [our blog post](https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/announcing-general-availability-of-multimedia-redirection-mmr-on/ba-p/3736489) or [Multimedia redirection for video playback and calls in a remote session](multimedia-redirection-video-playback-calls.md).
### New User Interface for Azure Virtual Desktop web client now in preview
The ability to collect graphics data for your Azure Virtual Desktop connections
### Multimedia redirection enhancements now in preview
-An upgraded version of multimedia redirection (MMR) for Azure Virtual Desktop is now in preview. We've made various improvements to this version, including more supported websites, RemoteApp browser support, and enhancements to media controls for better clarity and one-click tracing. Learn more at [Use multimedia redirection on Azure Virtual Desktop (preview)](multimedia-redirection.md) and [our blog post](https://techcommunity.microsoft.com/t5/azure-virtual-desktop/new-multimedia-redirection-upgrades-on-azure-virtual-desktop-are/m-p/3639520).
+An upgraded version of multimedia redirection for Azure Virtual Desktop is now in preview. We've made various improvements to this version, including more supported websites, RemoteApp browser support, and enhancements to media controls for better clarity and one-click tracing. Learn more at [Multimedia redirection on Azure Virtual Desktop (preview)](multimedia-redirection.md) and [our blog post](https://techcommunity.microsoft.com/t5/azure-virtual-desktop/new-multimedia-redirection-upgrades-on-azure-virtual-desktop-are/m-p/3639520).
### Grouping costs by Azure Virtual Desktop host pool now in preview
Accessibility has always been important to us, so we're pleased to announce that
### Multimedia redirection enhancements now in preview
-An upgraded version of multimedia redirection (MMR) for Azure Virtual Desktop is now in preview. We've made various improvements to this version, including more supported websites and media controls for our users. Learn more at [Multimedia redirection for Azure Virtual Desktop](multimedia-redirection.md) and [our blog post](https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/new-multimedia-redirection-upgrades-on-azure-virtual-desktop-are/ba-p/3264146).
+An upgraded version of multimedia redirection for Azure Virtual Desktop is now in preview. We've made various improvements to this version, including more supported websites and media controls for our users. Learn more at [Multimedia redirection for Azure Virtual Desktop](multimedia-redirection.md) and [our blog post](https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/new-multimedia-redirection-upgrades-on-azure-virtual-desktop-are/ba-p/3264146).
### FSLogix version 2201 is now generally available
virtual-network-manager Concept User Defined Route https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network-manager/concept-user-defined-route.md
A route collection consists of the following settings:
| **Attribute** | **Description** | ||--| | **Name** | The name of the route collection. |
-| **Local routing settings** | The local routing settings for the route collection. |
| **Enable BGP route propagation** | The BGP settings for the route collection. | | **Target network group** | The target network group for the route collection. | | **Route rules** | The route rules that describe the desired routing behavior for the target network group. |
Here are the common routing scenarios that you can simplify and automate by usin
| hub and spoke network with Spoke network to on-premises needs to go via Network Virtual Appliance | | | Gateway -> Network Virtual Appliance -> Spoke network | |
-## Local routing settings
-
-When you create a rule collection, you define the local routing settings. The local routing settings determine how traffic is routed within the same virtual network or subnet. The following are the local routing settings:
-
-| **Local routing setting** | **Description** |
-||--|
-| **Direct routing within virtual network** | Route traffic directly to the destination within the same virtual network. |
-| **Direct routing within subnet** | Route traffic directly to the destination within the same subnet. |
-| **Not specified** | Route traffic to the next hop specified in the route rule. |
-
-When you select **Direct routing within virtual network** or **Direct routing within subne**t, a UDR with a virtual network next hop is created for local traffic routing within the same virtual network or subnet. However, if the destination CIDR is fully contained within the source CIDR under these selections and direct routing is selected, a UDR specifying a network appliance as the next hop won't be set up.
- ## Adding additional virtual networks When you add additional virtual networks to a network group, the routing configuration is automatically applied to the new virtual network. Your network manager automatically detects the new virtual network and applies the routing configuration to it. When you remove a virtual network from the network group, the applied routing configuration is automatically removed as well.
+Newly created or deleted subnets will have their route table updated with eventual consistency. The processing time may vary based on the volume of subnet creation and deletion.
+ ## Limitations of UDR management
The following are the limitations of UDR management with Azure Virtual Network M
- When you create a route rule with the same destination as an existing route in the route table, the routing rule is ignored. - When a virtual network manager-created UDR is manually modified in the route table, the route isn't up when an empty commit is performed. Also, any update to the rule isn't reflected in the route with the same destination. - Existing Azure services in the Hub virtual network maintain their existing limitations with respect to Route Table and UDRs.-- Azure Virtual Network Manager requires a managed resource group to store the route table. If you need to delete the resource group, deletion must happen before any new deployments are attempted for resources in the same subscription.
+- Azure Virtual Network Manager requires a managed resource group to store the route table. If you need to delete the resource group, deletion must happen before any new deployments are attempted for resources in the same subscription.
+- UDR Management supports creating 1000 UDRs within a route table. This means that you can create a routing configuration with a maximum of 1000 routing rules.
## Next step
virtual-network-manager How To Configure Cross Tenant Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network-manager/how-to-configure-cross-tenant-cli.md
Previously updated : 03/22/2024 Last updated : 10/15/2024 # Customer intent: As a cloud admin, I need to manage multiple tenants from a single network manager so that I can easily manage all network resources governed by Azure Virtual Network Manager.
In this task, you set up a scope connection to add a subscription from a target
```azurecli # Create a scope connection in the network manager in the central management tenant
-az network manager scope-connection create --resource-group "myRG" --network-manager-name "myAVNM" --name "ToTargetManagedTenant" --description "This is a connection to manage resources in the target managed tenant" --resource-id "/subscriptions/13579864-1234-5678-abcd-0987654321ab" --tenant-id "24680975-1234-abcd-56fg-121314ab5643"
+az network manager scope-connection create --resource-group "myRG" --network-manager-name "myAVNM" --name "ToTargetManagedTenant" --description "This is a connection to manage resources in the target managed tenant" --resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e" --tenant-id "aaaabbbb-0000-cccc-1111-dddd2222eeee"
``` ## Create a network manager connection on a subscription in another tenant
After you create the scope connection, you switch to your target tenant for the
# Log in to the target managed tenant # Change the --tenant value to the appropriate tenant ID
- az login --tenant "12345678-12a3-4abc-5cde-678909876543"
+ az login --tenant "aaaabbbb-0000-cccc-1111-dddd2222eeee"
``` You're required to complete authentication with your organization, based on your organization's policies.
After you create the scope connection, you switch to your target tenant for the
```azurecli # Set the Azure subscription
- az account set --subscription 87654321-abcd-1234-1def-0987654321ab
+ az account set --subscription aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
# Create a cross-tenant connection to the central management tenant
- az network manager connection subscription create --connection-name "toCentralManagementTenant" --description "This connection allows management of the tenant by a central management tenant" --network-manager-id "/subscriptions/13579864-1234-5678-abcd-0987654321ab/resourceGroups/myRG/providers/Microsoft.Network/networkManagers/myAVNM"
+ az network manager connection subscription create --connection-name "toCentralManagementTenant" --description "This connection allows management of the tenant by a central management tenant" --network-manager-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Network/networkManagers/myAVNM"
``` ## Verify the connection status
In this task, you add a cross-tenant virtual network to your network group by us
```azurecli # Create a network group with a static member from the target managed tenant
-az network manager group static-member create --network-group-name "CrossTenantNetworkGroup" --network-manager-name "myAVNM" --resource-group "myAVNMResourceGroup" --static-member-name "targetVnet01" --resource-id="/subscriptions/87654321-abcd-1234-1def-0987654321ab
+az network manager group static-member create --network-group-name "CrossTenantNetworkGroup" --network-manager-name "myAVNM" --resource-group "myAVNMResourceGroup" --static-member-name "targetVnet01" --resource-id="/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
/resourceGroups/myScopeAVNM/providers/Microsoft.Network/virtualNetworks/targetVnet01" ``` ## Delete network manager configurations
virtual-network-manager How To Create User Defined Route https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network-manager/how-to-create-user-defined-route.md
In this step, you define the UDRs for the network group by creating a routing co
| - | -- | | **Name** | Enter **rule-collection-1**. | | **Description** | *(Optional)* Provide a description about this rule collection. |
- | **Local route setting** | Select **Direct routing within virtual network**. |
+ | **Enable BGP route propagation** | Leave **unchecked**. |
| **Target network groups** | select **ng-spoke**. | :::image type="content" source="media/how-to-deploy-user-defined-routes/add-rule-collection.png" alt-text="Screenshot of Add a rule collection window with target network group selected.":::
- > [!NOTE]
- > With the **Local route setting** option, you can choose how to route traffic within the same virtual network or subnet. For more information, see [Local route settings](concept-user-defined-route-management.md#local-routing-settings).
- 1. Under **Routing rules**, select **+ add**. 1. In **Add a routing rule**, enter, or select the following information:
virtual-network Create Peering Different Subscriptions Service Principal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/create-peering-different-subscriptions-service-principal.md
Create **spn1-peer-vnet** with a scope to the virtual network created in the pre
```output {
- "appId": "baa9d5f8-c1f9-4e74-b9fa-b5bc551e6cd0",
+ "appId": "11112222-bbbb-3333-cccc-4444dddd5555",
"displayName": "spn-1-peer-vnet", "password": "",
- "tenant": "c2d26d12-71cc-4f3b-8557-1fa18d077698"
+ "tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
} ```
Create **spn-2-peer-vnet** with a scope to the virtual network created in the pr
```output {
- "appId": "19b439a8-614b-4c8e-9e3e-b0c901346362",
+ "appId": "22223333-cccc-4444-dddd-5555eeee6666",
"displayName": "spn-2-peer-vnet", "password": "",
- "tenant": "24baaf57-f30d-4fba-a20e-822030f7eba3"
+ "tenant": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
} ```
virtual-network Deploy Container Networking https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/deploy-container-networking.md
The json example that follows is for a cluster with the following properties:
} }, "servicePrincipalProfile": {
- "clientId": "dd438987-aa12-4754-b47d-375811889714",
+ "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"secret": "azure123" } }
virtual-network How To Create Encryption https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/how-to-create-encryption.md
# Create a virtual network with encryption by using the Azure portal
-Azure Virtual Network encryption is a feature of Azure Virtual Network. With Virtual Network encryption, you can seamlessly encrypt and decrypt internal network traffic over the wire, with minimal effect to performance and scale. Virtual Network encryption protects data that traverses your virtual network from virtual machine to virtual machine and from virtual machine to on-premises.
+Azure Virtual Network encryption is a feature of Azure Virtual Network. With Virtual Network encryption, you can seamlessly encrypt and decrypt internal network traffic over the wire, with minimal effect to performance and scale. Virtual Network encryption protects data that traverses your virtual network from virtual machine to virtual machine.
## Prerequisites
virtual-network Virtual Network Encryption Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/virtual-network-encryption-overview.md
Virtual network encryption is supported in the following scenarios:
| Scenario | Support | | | |
-| VMs in the same virtual network (including virtual machine scale sets and their internal load balancer) | Supported on traffic between VMs from these [SKUs](#requirements). |
-| Virtual network peering | Supported on traffic between VMs across regional peering. |
-| Global virtual network peering | Supported on traffic between VMs across global peering. |
+| Virtual machines in the same virtual network (including virtual machine scale sets and their internal load balancer) | Supported on traffic between virtual machines from these [SKUs](#requirements). |
+| Virtual network peering | Supported on traffic between virtual machines across regional peering. |
+| Global virtual network peering | Supported on traffic between virtual machines across global peering. |
| Azure Kubernetes Service (AKS) | - Supported on AKS using Azure CNI (regular or overlay mode), Kubenet, or BYOCNI: node and pod traffic is encrypted.<br> - Partially supported on AKS using Azure CNI Dynamic Pod IP Assignment (podSubnetId specified): node traffic is encrypted, but pod traffic isn't encrypted.<br> - Traffic to the AKS managed control plane egresses from the virtual network and thus isn't in scope for virtual network encryption. However, this traffic is always encrypted via TLS. | > [!NOTE]
vpn-gateway Design https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/design.md
description: Learn about VPN Gateway topologies and designs you can use to conne
Previously updated : 07/30/2024 Last updated : 10/15/2024
vpn-gateway Nat Howto https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/nat-howto.md
description: Learn how to configure NAT for Azure VPN Gateway.
Previously updated : 05/02/2023 Last updated : 10/15/2024
vpn-gateway Point To Site Entra Vpn Client Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-entra-vpn-client-linux.md
Previously updated : 09/09/2024 Last updated : 10/15/2024
sudo apt-get update
sudo apt-get install microsoft-azurevpnclient ```
-## Download VPN client profile configuration files
+## Extract the VPN client profile configuration package
To configure your Azure VPN Client profile, you download a VPN Client profile configuration package from the Azure P2S gateway. This package contains the necessary settings to configure the VPN client. If you used the P2S server configuration steps as mentioned in the [Prerequisites](#prerequisites) section, you've already generated and downloaded the VPN client profile configuration package that contains the VPN profile configuration files you'll need. If you need to generate configuration files, see [Download the VPN client profile configuration package](point-to-site-entra-gateway.md#download).
-## About VPN client profile configuration files
+If your P2S gateway configuration was previously configured to use the older, manually registered App ID versions, your P2S configuration doesn't support the Linux VPN client. See [About the Microsoft-registered App ID for Azure VPN Client](point-to-site-entra-gateway.md).
-In this section, you configure the Azure VPN client for Linux.
+Locate and extract the zip file that contains the VPN client profile configuration package. The zip file contains the **AzureVPN** folder. In the AzureVPN folder, you'll see either the **azurevpnconfig_aad.xml** file, or the **azurevpnconfig.xml** file, depending on whether your P2S configuration includes multiple authentication types. The .xml file contains the settings you use to configure the VPN client profile.
+
+### Modify profile configuration files
+
+If your P2S configuration uses a custom audience with your Microsoft-registered App ID, you might receive error message **AADSTS650057** when you try to connect. Retrying authentication usually resolves the issue. This happens because the VPN client profile needs both the custom audience ID and the Microsoft application ID. To prevent this, modify your profile configuration .xml file to include both the custom application ID and the Microsoft application ID.
-* If your P2S gateway configuration was previously configured to use the older, manually registered App ID versions, your P2S configuration doesn't support the Linux VPN client. See [About the Microsoft-registered App ID for Azure VPN Client](point-to-site-entra-gateway.md).
-* For Microsoft Entra ID authentication, use the **azurevpnconfig_aad.xml** or **azurevpnconfig.xml** file that's located in the **AzureVPN** folder of the VPN client profile configuration package. The file name depends on whether your P2S configuration includes multiple authentication types.
+## Import client profile configuration settings
+
+In this section, you configure the Azure VPN client for Linux.
1. On the Azure VPN Client page, select **Import**.
vpn-gateway Point To Site Entra Vpn Client Mac https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-entra-vpn-client-mac.md
description: Learn how to configure macOS client computers to connect to Azure u
Previously updated : 10/07/2024 Last updated : 10/15/2024
When you generate and download a VPN client profile configuration package, all t
Locate and unzip the VPN client profile configuration package you generated and downloaded (listed in the [Prerequisites](#prerequisites)). Open the **AzureVPN** folder. In this folder, you'll see either the **azurevpnconfig_aad.xml** file or the **azurevpnconfig.xml** file, depending on whether your P2S configuration includes multiple authentication types. The .xml file contains the settings you use to configure the VPN client profile.
+## <a name="modify"></a>Modify profile configuration files
+
+If your P2S configuration uses a custom audience with your Microsoft-registered App ID, you might receive popups each time you connect that require you to enter your credentials again and complete authentication. Retrying authentication usually resolves the issue. This happens because the VPN client profile needs both the custom audience ID and the Microsoft application ID. To prevent this, modify your profile configuration .xml file to include both the custom application ID and the Microsoft application ID.
++ ## Import VPN client profile configuration files > [!NOTE]
vpn-gateway Point To Site Entra Vpn Client Windows https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-entra-vpn-client-windows.md
Title: 'Configure Azure VPN Client - Microsoft Entra ID authentication - Microsoft-registered App ID - Windows'
-description: Learn how to configure the Azure VPN Client to connect to a VNet using VPN Gateway point-to-site VPN, OpenVPN protocol connections, and Microsoft Entra ID authentication from a Windows computer. This article applies to P2S gateways configured with the Microsoft-registered App ID.
+description: Learn how to configure the Azure VPN Client to connect to a virtual network using VPN Gateway point-to-site VPN, OpenVPN protocol connections, and Microsoft Entra ID authentication from a Windows computer. This article applies to P2S gateways configured with the Microsoft-registered App ID.
Previously updated : 09/06/2024 Last updated : 10/15/2024
+#Audience and custom App ID values are not sensitive data. Please do not remove. They are required for the configuration.
+ # Configure Azure VPN Client ΓÇô Microsoft Entra ID authentication ΓÇô Windows
This article continues on from the [Configure a P2S VPN gateway for Microsoft En
1. Download and install the Azure VPN Client for Windows. 1. Extract the VPN client profile configuration files.
+1. Update the profile configuration files with a custom audience value (if applicable).
1. Import the client profile settings to the VPN client. 1. Create a connection and connect to Azure.
To configure your Azure VPN Client profile, you must first download the VPN clie
After you obtain the VPN client profile configuration package, extract the zip file. The zip file contains the **AzureVPN** folder. The **AzureVPN** folder contains the **azurevpnconfig_aad.xml** file or the **azurevpnconfig.xml** file, depending on whether your P2S configuration includes multiple authentication types. If you don't see **azurevpnconfig_aad.xml** or **azurevpnconfig.xml**, or you don't have an **AzureVPN** folder, verify that your VPN gateway is configured to use the OpenVPN tunnel type and that Azure Active Directory (Microsoft Entra ID) authentication is selected.
+## <a name="modify"></a>Modify profile configuration files
+
+If your P2S configuration uses a custom audience with your Microsoft-registered App ID, you might receive the error message **CAA20004** when you try to connect. Retrying authentication usually resolves the issue. This happens because the VPN client profile needs both the custom audience ID and the Microsoft application ID. To prevent this, modify your profile configuration .xml file to include both the custom application ID and the Microsoft application ID.
++ ## <a name="import"></a>Import client profile configuration settings > [!NOTE]
After you obtain the VPN client profile configuration package, extract the zip f
1. Browse to the Azure VPN Client profile configuration folder that you extracted. Open the **AzureVPN** folder and select the client profile configuration file (azurevpnconfig_aad.xml or azurevpnconfig.xml). Select **Open** to import the file.
-1. Change the name of the Connection name (optional). In this example, you'll notice that the Audience value shown is the new Azure Public value associated to the Microsoft-registered Azure VPN Client App ID. The value in this field must match the value that your P2S VPN gateway is configured to use.
+1. Change the name of the Connection name (optional). In this example, notice that the Audience value shown is the new Azure Public value associated to the Microsoft-registered Azure VPN Client App ID. The value in this field must match the value that your P2S VPN gateway is configured to use.
:::image type="content" source="./media/point-to-site-entra-vpn-client-windows/connection-properties.png" alt-text="Screenshot shows Save the profile." lightbox="./media/point-to-site-entra-vpn-client-windows/connection-properties.png":::
These steps help you configure your connection to connect automatically with Alw
:::image type="content" source="./media/point-to-site-entra-vpn-client-windows/vpn-settings.png" alt-text="Screenshot of the VPN home page with VPN Settings selected." lightbox="./media/point-to-site-entra-vpn-client-windows/vpn-settings.png":::
-1. If the connection you want to configure is connected, disconnect the connection, then highlight the profile and select the **Connect automatically** check box.
+1. If the profile that you want to configure is connected, disconnect the connection, then highlight the profile and select the **Connect automatically** check box.
:::image type="content" source="./media/point-to-site-entra-vpn-client-windows/automatic.png" alt-text="Screenshot of the Settings window, with the Connect automatically box checked." lightbox="./media/point-to-site-entra-vpn-client-windows/automatic.png":::
vpn-gateway Point To Site Vpn Client Certificate Ike Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-vpn-client-certificate-ike-linux.md
Previously updated : 05/22/2024 Last updated : 10/15/2024
vpn-gateway Vpn Gateway Activeactive Rm Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/vpn-gateway-activeactive-rm-powershell.md
description: Learn how to configure active-active connections with VPN gateways
Previously updated : 07/19/2023 Last updated : 10/15/2024
$FESubPrefix1 = "10.11.0.0/24"
$BESubPrefix1 = "10.12.0.0/24" $GWSubPrefix1 = "10.12.255.0/27" $VNet1ASN = 65010
-$DNS1 = "8.8.8.8"
$GWName1 = "VNet1GW" $GW1IPName1 = "VNet1GWIP1" $GW1IPName2 = "VNet1GWIP2"
$FESubPrefix2 = "10.21.0.0/24"
$BESubPrefix2 = "10.22.0.0/24" $GWSubPrefix2 = "10.22.255.0/27" $VNet2ASN = 65020
-$DNS2 = "8.8.8.8"
$GWName2 = "VNet2GW" $GW2IPName1 = "VNet2GWIP1" $GW2IPconf1 = "gw2ipconf1"
vpn-gateway Vpn Gateway Connect Multiple Policybased Rm Ps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/vpn-gateway-connect-multiple-policybased-rm-ps.md
Previously updated : 11/20/2023 Last updated : 10/15/2024 # Connect a VPN gateway to multiple on-premises policy-based VPN devices
The following diagrams highlight the two models:
### Azure support for policy-based VPN
-Currently, Azure supports both modes of VPN gateways: route-based VPN gateways and policy-based VPN gateways. They're built on different internal platforms, which result in different specifications. For more information about gateways, throughput,and connections, see [About VPN Gateway settings](vpn-gateway-about-vpn-gateway-settings.md).
+Currently, Azure supports both modes of VPN gateways: route-based VPN gateways and policy-based VPN gateways. They're built on different internal platforms, which result in different specifications. For more information about gateways, throughput, and connections, see [About VPN Gateway settings](vpn-gateway-about-vpn-gateway-settings.md).
[!INCLUDE [vpn table type](../../includes/vpn-gateway-vpn-type-table.md)]
This section shows you how to enable policy-based traffic selectors on a connect
$FESubPrefix1 = "10.11.0.0/24" $BESubPrefix1 = "10.12.0.0/24" $GWSubPrefix1 = "10.12.255.0/27"
- $DNS1 = "8.8.8.8"
$GWName1 = "VNet1GW" $GW1IPName1 = "VNet1GWIP1" $GW1IPconf1 = "gw1ipconf1"
vpn-gateway Vpn Gateway Howto Aws Bgp https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/vpn-gateway-howto-aws-bgp.md
Previously updated : 08/10/2023 Last updated : 10/15/2024
vpn-gateway Vpn Gateway P2s Advertise Custom Routes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/vpn-gateway-p2s-advertise-custom-routes.md
Previously updated : 07/28/2023 Last updated : 10/15/2024
web-application-firewall Ag Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/web-application-firewall/ag/ag-overview.md
Application Gateway WAF provides detailed reporting on each threat that it detec
}, "hostname": "127.0.0.1", "transactionId": "16861477007022634343"
- "policyId": "/subscriptions/1496a758-b2ff-43ef-b738-8e9eb5161a86/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/globalWafPolicy",
+ "policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/globalWafPolicy",
"policyScope": "Global", "policyScopeName": " Global " }
web-application-firewall Web Application Firewall Logs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/web-application-firewall/ag/web-application-firewall-logs.md
The access log is generated only if you've enabled it on each Application Gatewa
"clientPort": 46886, "httpMethod": "GET", "requestUri": "/phpmyadmin/scripts/setup.php",
- "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=874f1f0f-6807-41c9-b7bc-f3cfa74aa0b1&SERVER-STATUS=404",
+ "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
"userAgent": "-", "httpStatus": 404, "httpVersion": "HTTP/1.0",
The firewall log is generated only if you have enabled it for each application g
}, "hostname": "127.0.0.1", "transactionId": "16861477007022634343",
- "policyId": "/subscriptions/1496a758-b2ff-43ef-b738-8e9eb5161a86/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
+ "policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
"policyScope": "Listener", "policyScopeName": "httpListener1" }
web-application-firewall Web Application Firewall Troubleshoot https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/web-application-firewall/ag/web-application-firewall-troubleshoot.md
The final two log entries show the request was blocked because the anomaly score
```json {
- "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
+ "resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall", "category": "ApplicationGatewayFirewallLog", "properties": {