Updates from: 03/25/2023 02:11:10
Service Microsoft Docs article Related commit history on GitHub Change details
active-directory How To Mfa Authenticator Lite https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/authentication/how-to-mfa-authenticator-lite.md
If enabled for Authenticator Lite, users are prompted to register their account
:::image type="content" border="true" source="./media/how-to-mfa-authenticator-lite/registration.png" alt-text="Screenshot of how to register Authenticator Lite.":::
+>[!NOTE]
+>Users with no MFA methods registered will be prompted to download the Authenticator App when they begin registration flow. For the most seamless Authenticator Lite registration experience, [provision your users a TAP](https://learn.microsoft.com/azure/active-directory/authentication/howto-authentication-temporary-access-pass) (temporary access pass) which they can use during registration.
++ ## Monitoring Authenticator Lite usage [Sign-in logs](/graph/api/signin-list) can show which app was used to complete user authentication. To view the latest sign-ins, use the following call on the beta API endpoint:
Users can only register for Authenticator Lite from mobile Outlook. Authenticato
Users that have Microsoft Authenticator on their device can't register Authenticator Lite. If a user has an Authenticator Lite registration and then later downloads Microsoft Authenticator, they can register both. If a user has two devices, they can register Authenticator Lite on one and Microsoft Authenticator on the other. +
+## Known Issues (Public preview)
+
+### SSPR Notifications
+TOTP codes from Outlook will work for SSPR, but the push notification will not work and will return an error.
+
+### Conditional Access Registration Policies
+CA policies for registration do not currently apply in Outlook registration flows.
++ ## Next steps [Authentication methods in Azure Active Directory](concept-authentication-authenticator-app.md)
active-directory Access Tokens https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/access-tokens.md
If the application has custom signing keys as a result of using the [claims-mapp
### Claims based authorization
-The business logic of the application dictates claims based authorization. Some common authorization methods are listed below.
+The business logic of an application determines how authorization should be handled. The general approach to authorization based on token claims, and which claims should be used, is described below.
-#### Validate the token
+After a token is validated with the correct `aud` claim, the token tenant, subject, actor must be authorized.
-Use the `aud` claim to ensure that the user intended to call the application. If the identifier of the resource isn't in the `aud` claim, reject it.
+#### Tenant
-#### Validate user permission
+First, always check that the `tid` in a token matches the tenant ID used to store data with the application. When information is stored for an application in the context of a tenant, it should only be accessed again later in the same tenant. Never allow data in one tenant to be accessed from another tenant.
-Use the `roles` and `wids` claims to validate that the user has authorization to call the API. For example, an administrator may have permission to write to the API, but not a normal user. Check that the `tid` inside the token matches the tenant ID used to store the data in the API.
+#### Subject
-When a user stores data in the API from one tenant, they must sign into that tenant again to access that data. Never allow data in one tenant to be accessed from another tenant.
+Next, to determine if the token subject, such as the user (or app itself in the case of an app-only token), is authorized, either check for specific `sub` or `oid` claims, or check that the subject belongs to an appropriate role or group with the `roles`, `groups`, `wids` claims.
-Use the `amr` claim to verify the user has performed MFA. The enforcement of MFA is done using [Conditional Access](../conditional-access/overview.md). If `roles` or `groups` claims are requested in the access token, verify that the user is in the group allowed to do this action.
+For example, use the immutable claim values `tid` and `oid` as a combined key for application data and determining whether a user should be granted access.
-For tokens retrieved using the implicit flow, query the [Microsoft Graph](https://developer.microsoft.com/graph/) for this data, as it's often too large to fit in the token.
+The `roles`, `groups` or `wids` claims can also be used to determine if the subject has authorization to perform an operation. For example, an administrator may have permission to write to an API, but not a normal user, or the user may be in a group allowed to do some action.
-Don't use `email` or `upn` claim values to determine whether the user in an access token should have access to data. Mutable claim values like these can change over time, making them insecure and unreliable for authorization.
+> [!WARNING]
+> Never use `email` or `upn` claim values to store or determine whether the user in an access token should have access to data. Mutable claim values like these can change over time, making them insecure and unreliable for authorization.
-Use immutable claim values `tid` and `sub` or `oid` as a combined key for uniquely identifying the API's data and determining whether a user should be granted access to that data.
+#### Actor
-- Good: `tid` + `sub`-- Better: `tid` + `oid` - the `oid` is consistent across applications, so an ecosystem of applications can audit user access to data.
+Lastly, when an app is acting for a user, this client app (the actor), must also be authorized. Use the `scp` claim (scope) to validate that the app has permission to perform an operation.
-Don't use mutable, human-readable identifiers like `email` or `upn` for uniquely identifying data.
+Scopes are defined by the application, and the absence of `scp` claim means full actor permissions.
-#### Validate application sign-in
-
-* Use the `scp` claim to validate that the user has granted the calling app permission to call your API.
-* Ensure the calling client is allowed to call your API using the `appid` claim (for v1.0 tokens) or the `azp` claim (for v2.0 tokens).
- * You only need to validate these claims (`appid`, `azp`) if you want to restrict your web API to be called only by pre-determined applications (e.g., line-of-business applications or web APIs called by well-known frontends). APIs intended to allow access from any calling application do not need to validate these claims.
-
-## User and application tokens
-
-An application may receive tokens for a user or directly from an application through the client credentials flow. These app-only tokens indicate that this call is coming from an application and doesn't have a user backing it. These tokens are handled largely the same:
--- Use `roles` to see permissions that have been granted to the subject of the token.-- Use `oid` or `sub` to validate that the calling service principal is the expected one.
+> [!NOTE]
+> An application may handle app-only tokens (requests from applications without users, such as daemon apps) and want to authorize a specific application across multiple tenants, rather than individual service principal IDs. In that case, check for an app-only token using the `idtyp` optional claim and use the `appid` claim (for v1.0 tokens) or the `azp` claim (for v2.0 tokens) along with `tid` to determine authorization based on tenant and application ID.
-If the application needs to distinguish between app-only access tokens and access tokens for users, use the `idtyp` [optional claim](active-directory-optional-claims.md). To detect app-only access tokens, add the `idtyp` claim to the `accessToken` field, and check for the value `app`. ID tokens and access tokens for users won't have the `idtyp` claim included.
## Token revocation
active-directory Active Directory Configurable Token Lifetimes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/active-directory-configurable-token-lifetimes.md
A token's validity is evaluated at the time the token is used. The policy with t
All timespans used here are formatted according to the C# [TimeSpan](/dotnet/api/system.timespan) object - D.HH:MM:SS. So 80 days and 30 minutes would be `80.00:30:00`. The leading D can be dropped if zero, so 90 minutes would be `00:90:00`.
+## REST API reference
+
+You can configure token lifetime policies and assign them to apps and service principals using Microsoft Graph. For more information, see the [tokenLifetimePolicy resource type](/graph/api/resources/tokenlifetimepolicy) and its associated methods.
+ ## Cmdlet reference These are the cmdlets in the [Azure Active Directory PowerShell for Graph Preview module](/powershell/module/azuread/?view=azureadps-2.0-preview&preserve-view=true#service-principals).
active-directory Active Directory Schema Extensions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/active-directory-schema-extensions.md
The identifier for a directory extension attribute is of the form *extension_xxx
## Registering and using directory extensions Directory extension attributes can be registered and populated in one of two ways: -- By configuring AD Connect to create them and to sync data into them from on-premises AD. See [Azure AD Connect Sync Directory Extensions](../hybrid/how-to-connect-sync-feature-directory-extensions.md).
+- By configuring Azure AD Connect to create them and to sync data into them from on-premises AD. See [Azure AD Connect Sync Directory Extensions](../hybrid/how-to-connect-sync-feature-directory-extensions.md).
- By using Microsoft Graph to register, set the values of, and read from [directory extensions](/graph/extensibility-overview#directory-azure-ad-extensions). [PowerShell cmdlets](/powershell/azure/active-directory/using-extension-attributes-sample) are also available.
-### Emitting claims with data from directory extension attributes created with AD Connect
-Directory extension attributes created and synced using AD Connect are always associated with the application ID used by AD Connect. They can be used as a source for claims both by configuring them as claims in the **Enterprise Applications** configuration in the Portal UI for SAML applications registered using the Gallery or the non-Gallery application configuration experience under **Enterprise Applications**, and via a claims-mapping policy for applications registered via the Application registration experience. Once a directory extension attribute created via AD Connect is in the directory, it will show in the SAML SSO claims configuration UI.
+### Emitting claims with data from directory extension attributes created with Azure AD Connect
+Directory extension attributes created and synced using Azure AD Connect are always associated with the application ID used by Azure AD Connect. These attributes can be used as a source for claims both by configuring them as claims in the **Enterprise Applications** configuration in the Portal UI for SAML applications registered using the Gallery or the non-Gallery application configuration experience under **Enterprise Applications**, and via a claims-mapping policy for applications registered via the Application registration experience. Once a directory extension attribute created via AD Connect is in the directory, it will show in the SAML SSO claims configuration UI.
### Emitting claims with data from directory extension attributes created for an application using Graph or PowerShell If a directory extension attribute is registered for an application using Microsoft Graph or PowerShell (via an applications initial setup or provisioning step for instance), the same application can be configured in Azure Active Directory to receive data in that attribute from a user object in a claim when the user signs in. The application can be configured to receive data in directory extensions that are registered on that same application using [optional claims](active-directory-optional-claims.md#configuring-directory-extension-optional-claims). These can be set in the application manifest. This enables a multi-tenant application to register directory extension attributes for its own use. When the application is provisioned into a tenant the associated directory extensions become available to be set on users in that tenant, and to be consumed. Once it's configured in the tenant and consent granted, it can be used to store and retrieve data via graph and to map to claims in tokens the Microsoft identity platform emits to applications.
active-directory Msal Client Application Configuration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/msal-client-application-configuration.md
Using MSAL in your code, you specify the audience by using one of the following
MSAL will throw a meaningful exception if you specify both the Azure AD authority audience and the tenant ID.
-If you don't specify an audience, your app will target Azure AD and personal Microsoft accounts as an audience. (That is, it will behave as though `common` were specified.)
+It is recommended to specify an audience, as many tenants, and the applications deployed in them will have guest users. If your application will have external users, the endpoints of `common` and `organization` are best avoided. If you don't specify an audience, your app will target Azure AD and personal Microsoft accounts as an audience and will behave as though `common` were specified.
### Effective audience
active-directory Create Access Review https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/governance/create-access-review.md
na Previously updated : 10/24/2022 Last updated : 3/23/2023
If you are reviewing access to an application, then before creating the review,
- **Remove access**: Removes a user's access. - **Approve access**: Approves a user's access. - **Take recommendations**: Takes the system's recommendation to deny or approve the user's continued access.
+
+ >[!WARNING]
+ > If the settings **If reviewers don't respond** is set to **Remove access** or **Take recommendations** and **Auto apply results to resource** is enabled, all access to this resource could risk being revoked if the reviewers fail to respond.
- **Action to apply on denied guest users**: This option is only available if the access review is scoped to include only guest users to specify what happens to guest users if they're denied either by a reviewer or by the **If reviewers don't respond** setting.
active-directory Entitlement Management External Users https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/governance/entitlement-management-external-users.md
To ensure people outside of your organization can request access packages and ge
### Review your Conditional Access policies (Preview) -- Make sure to exclude guests from any Conditional Access policies that new guest users won't be able to meet as this will block them from being able to sign in to your directory. For example, guests likely don't have a registered device, aren't in a known location, and don't want to re-register for multi-factor authentication (MFA), so adding these requirements in a Conditional Access policy will block guests from using entitlement management. For more information, see [What are conditions in Azure Active Directory Conditional Access?](../conditional-access/concept-conditional-access-conditions.md).
+- Make sure to exclude the Entitlement Management app from any Conditional Access policies that impact guest users. Otherwise, a conditional access policy could block them from accessing MyAccess or being able to sign in to your directory. For example, guests likely don't have a registered device, aren't in a known location, and don't want to re-register for multi-factor authentication (MFA), so adding these requirements in a Conditional Access policy will block guests from using entitlement management. For more information, see [What are conditions in Azure Active Directory Conditional Access?](../conditional-access/concept-conditional-access-conditions.md).
- ![Azure AD Conditional Access policy exclude settings](./media/entitlement-management-external-users/conditional-access-exclude.png)
--- A common policy for entitlement management customers is to block all apps from guests except entitlement management for guests. This policy allows guests to enter MyAccess and request an access package. This package should contain a group (it's called Guests from MyAccess in the example below), which should be excluded from the block all apps policy. Once the package is approved, the guest is in the directory. Given that the end user has the access package assignment and is part of the group, the end user is able to access all other apps. Other common policies include excluding entitlement management app from MFA and compliant device.
+- A common policy for Entitlement Management customers is to block all apps from guests except Entitlement Management for guests. This policy allows guests to enter MyAccess and request an access package. This package should contain a group (it is called Guests from MyAccess in the example below), which should be excluded from the block all apps policy. Once the package is approved, the guest will be in the directory. Given that the end user has the access package assignment and is part of the group, the end user will be able to access all other apps. Other common policies include excluding Entitlement Management app from MFA and compliant device.
:::image type="content" source="media/entitlement-management-external-users/exclude-app-guests.png" alt-text="Screenshot of exclude app options.":::
To ensure people outside of your organization can request access packages and ge
:::image type="content" source="media/entitlement-management-external-users/exclude-app-guests-selection.png" alt-text="Screenshot of the exclude guests app selection."::: > [!NOTE]
-> The entitlement management app includes the entitlement management side of MyAccess, the entitlement management side of Azure Portal and the entitlement management part of MS graph. The latter two require additional permissions for access, hence won't be accessed by guests unless explicit permission is provided.
+> The Entitlement Management app includes the entitlement management side of MyAccess, the Entitlement Management side of Azure Portal and the Entitlement Management part of MS graph. The latter two require additional permissions for access, hence won't be accessed by guests unless explicit permission is provided.
### Review your SharePoint Online external sharing settings
active-directory Entitlement Management Logic Apps Integration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/governance/entitlement-management-logic-apps-integration.md
These triggers to Logic Apps are controlled in a tab within access package polic
:::image type="content" source="media/entitlement-management-logic-apps/create-logic-app-extension-details.png" alt-text="Screenshot of creating logic app detail selections."::: > [!NOTE]
- > when creating a new Logic App in this modal, the length of "/subscriptions/{SubscriptionId}/resourceGroups/{RG Name}/providers/Microsoft.Logic/workflows/{Logicapp Name}" cannot exceed 150 characters.
+ > When creating a new Logic App in this modal, the length of "/subscriptions/{SubscriptionId}/resourceGroups/{RG Name}/providers/Microsoft.Logic/workflows/{Logicapp Name}" cannot exceed 150 characters.
1. In **Review and Create**, review the summary of your custom extension and make sure the details for your Logic App callout are correct. Then select **Create**. 1. This custom extension to the linked Logic App now appears in your Custom Extensions tab under Catalogs. You're able to call on this in access package policies.
+## View and Edit Existing Custom Extensions for a Catalog
+
+**Prerequisite roles:** Global administrator, Identity Governance administrator, or Catalog owner
+
+1. Navigate to the Custom Extensions tab within a Catalog as mentioned earlier.
+
+1. Here, you can view all the custom extensions you've created, along with the associated Logic App and information about the custom extension type.
+ :::image type="content" source="media/entitlement-management-logic-apps/custom-extension-list.png" alt-text="Screenshot of a list of custom extensions." lightbox="media/entitlement-management-logic-apps/custom-extension-list.png":::
+1. Along with the Logic App name, the column Type dictates whether the custom extension was created in the new V2 auth model (after March 17, 2023), or the original model. If a custom extension was created in the new model, the Type column matches the selected type from the configuration modal that is either ΓÇ£*assignment request*ΓÇ¥ or ΓÇ£*pre-expiration*ΓÇ¥. For older custom extensions, the type shows ΓÇ£*custom access package*ΓÇ¥.
+
+1. The Token Security column shows the associated auth security framework used when creating the custom extension. New V2 custom extensions show ΓÇ£*proof-of-possession*ΓÇ¥ (PoP) as the token security type. Older custom extensions show ΓÇ£regularΓÇ¥.
+
+1. Old style custom extensions are no longer able to be created from the UI, however existing ones can be converted to new style custom extensions from the UI.
+ :::image type="content" source="media/entitlement-management-logic-apps/convert-token-security-extension.png" alt-text="Screenshot of converting old security token to new.":::
+
+1. Selecting the three dots at the end of the row of an old custom extension allows you to update the custom extension to a new type quickly.
+ > [!NOTE]
+ > Custom extensions can only be converted to the new type if they are not in use, or if they are in use exclusively for policy stages of one specific extension type (assignment request stages or pre expiration stages).
+1. You can also edit any custom extension. This allows you to update the name, description, and other field values. This can be accomplished by selecting **Edit** inside the three-dot pane for any custom extension.
+
+1. Old style custom extensions can continue to be used and edited even if not converted, even though they can no longer be created.
+
+1. If an old style custom extension can't be updated to the new type because it's being used for policy stages, of **BOTH** assignment request and pre expiration types, then in order to update it you must either remove it from all linked policies or ensure it's only used for policy stages associated with **ONE** type (assignment request, or pre expiration).  
++
+## Add custom extension to a policy in an access package
+
+**Prerequisite roles:** Global administrator, Identity Governance administrator, Catalog owner, or Access package manager
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. In the Azure portal, select **Azure Active Directory** and then select **Identity Governance**.
+
+1. In the left menu, select **Access packages**.
+
+1. Select the access package you want to add a custom extension (logic app) to from the list of access packages that have already been created.
+
+ > [!NOTE]
+ > Select **New access package** if you want to create a new access package.
+ > For more information about how to create an access package, see [Create a new access package in entitlement management](entitlement-management-access-package-create.md). For more information about how to edit an existing access package, see [Change request settings for an access package in Azure AD entitlement management](entitlement-management-access-package-request-policy.md#open-and-edit-an-existing-policys-request-settings).
+
+1. Change to the policy tab, select the policy and select **Edit**.
+
+1. In the policy settings, go to the **Custom Extensions (Preview)** tab.
+
+1. In the menu below **Stage**, select the access package event you wish to use as trigger for this custom extension (Logic App). For example, if you only want to trigger the custom extension Logic App workflow when a user requests the access package, select **Request is created**.
+
+1. In the menu below **Custom Extension**, select the custom extension (Logic App) you want to add to the access package. The action you select executes when the event selected in the *when* field occurs.
+
+1. Select **Update** to add it to an existing access package's policy.
+
+ ![Add a Logic App to access package](./media/entitlement-management-logic-apps/add-logic-apps-access-package.png)
+
+## Edit a linked Logic App's workflow definition 
+
+**Prerequisite roles:** Global administrator, Identity Governance administrator, or Catalog owner
+
+For newly created Logic Apps linked to custom extensions, these Logic Apps begin blank. To create the workflows in the Logic Apps that will be triggered by the extension when the linked access package policy condition is triggered, you need to edit the definition of the Logic App workflow in Logic App designer. To accomplish this, you'd follow these steps:
+
+1. Navigate to the Custom Extensions tab within a Catalog as mentioned in the above section.
+
+1. Select the custom extension for whom you want to edit the Logic App.
+
+1. Select the Logic App under the Logic app column for the associated custom extension row. This allows you to edit or create the workflow in Logic App designer.
+
+For more information on creating logic app workflows, see [Quickstart: Create an example Consumption workflow in multi-tenant Azure Logic Apps with the Azure portal](../../logic-apps/quickstart-create-example-consumption-workflow.md).
++ ## Configuring custom extensions that pause entitlement management processes A new update to the custom extensions feature is the ability to pause the access package policy process associated with a custom extension until after that Logic App completes, and a resume request payload is sent back to entitlement management. For example, if a custom extension for a Logic App is triggered from an access package grant policy, and ΓÇ£launch and waitΓÇ¥ is enabled, once the Logic App is triggered the grant process won't resume until after the Logic App completes, and a resume request is sent back to entitlement management.
-This pause process allows admins to have control of workflows theyΓÇÖd like to run before continuing with access lifecycle tasks in entitlement management. The only exception to this is if a timeout occurs. Launch and wait processes require a timeout of up to 14 days noted in minutes, hours, or days. If a resume response isn't sent back to entitlement management by the time the ΓÇ£timeoutΓÇ¥ period elapses, the entitlement management process automatically continues.
+This pause process allows admins to have control of workflows theyΓÇÖd like to run before continuing with access lifecycle tasks in entitlement management. The only exception to this is if a timeout occurs. Launch and wait processes require a timeout of up to 14 days noted in minutes, hours, or days. If a resume response isn't sent back to entitlement management by the time the ΓÇ£timeoutΓÇ¥ period elapses, the entitlement management request workflow process pauses.
The admin is responsible for configuring an automated process that is able to send the API **resume request** payload back to entitlement management, once the Logic App workflow has completed. To send back the resume request payload, follow the instructions here in the graph API documents. See information here on the [resume request](/graph/api/accesspackageassignmentrequest-resume)
microsoft.graph.accessPackageCustomExtensionStage.assignmentRequestApproved
microsoft.graph.accessPackageCustomExtensionStage.assignmentRequestGranted Microsoft.graph.accessPackageCustomExtensionStage.assignmentRequestRemoved ``+
+The following flow diagram shows the entitlement management callout to Logic Apps workflow:
An example of a resume request payload is:
Content-Type: application/json
} ```
-## Edit a linked Logic App's workflow definition 
-
-**Prerequisite roles:** Global administrator, Identity Governance administrator, or Catalog owner
+## Extension end-user experience
-For newly created Logic Apps linked to custom extensions, these Logic Apps begin blank. To create the workflows in the Logic Apps that will be triggered by the extension when the linked access package policy condition is triggered, you need to edit the definition of the Logic App workflow in Logic App designer. To accomplish this, you'd follow these steps:
+### Approver experience
-1. Navigate to the Custom Extensions tab within a Catalog as mentioned in the above section.
+An approver sees the string specified in the resume request payload under `customExtensionStageInstanceDetail` as shown in the payload located in [Configuring custom extensions that pause entitlement management processes](entitlement-management-logic-apps-integration.md#configuring-custom-extensions-that-pause-entitlement-management-processes).
-1. Select the custom extension for whom you want to edit the Logic App.
+### Requestor experience
-1. Select the Logic App under the Logic app column for the associated custom extension row. This allows you to edit or create the workflow in Logic App designer.
+When an access package has a custom extension with launch and wait functionality, and the Logic App is triggered when the access package request is created, requestors can see their request status within request history in MyAccess.
-For more information on creating logic app workflows, see [Quickstart: Create an example Consumption workflow in multi-tenant Azure Logic Apps with the Azure portal](../../logic-apps/quickstart-create-example-consumption-workflow.md).
+The following status updates are displayed to users based on their custom extension stage:
-## View and Edit Existing Custom Extensions for a Catalog
+|Custom Extension stage |Message displayed to requestor in MyAccess request history |
+|||
+|When the extension is being processed | Waiting for information before proceeding |
+|When the extension fails | Process expired |
+|When the extension resumes | Process continues |
-**Prerequisite roles:** Global administrator, Identity Governance administrator, or Catalog owner
-
-1. Navigate to the Custom Extensions tab within a Catalog as mentioned earlier.
-
-1. Here, you can view all the custom extensions you've created, along with the associated Logic App and information about the custom extension type.
- :::image type="content" source="media/entitlement-management-logic-apps/custom-extension-list.png" alt-text="Screenshot of a list of custom extensions.":::
-1. Along with the Logic App name, the column Type dictates whether the custom extension was created in the new V2 auth model (after March 17, 2023), or the original model. If a custom extension was created in the new model, the Type column matches the selected type from the configuration modal that is either ΓÇ£*assignment request*ΓÇ¥ or ΓÇ£*pre-expiration*ΓÇ¥. For older custom extensions, the type shows ΓÇ£*custom access package*ΓÇ¥.
-
-1. The Token Security column shows the associated auth security framework used when creating the custom extension. New V2 custom extensions show ΓÇ£*proof-of-possession*ΓÇ¥ (PoP) as the token security type. Older custom extensions show ΓÇ£regularΓÇ¥.
-
-1. Old style custom extensions are no longer able to be created from the UI, however existing ones can be converted to new style custom extensions from the UI.
- :::image type="content" source="media/entitlement-management-logic-apps/convert-token-security-extension.png" alt-text="Screenshot of converting old security token to new.":::
-
-1. Selecting the three dots at the end of the row of an old custom extension allows you to update the custom extension to a new type quickly.
- > [!NOTE]
- > Custom extensions can only be converted to the new type if they are not in use, or if they are in use exclusively for policy stages of one specific extension type (assignment request stages or pre expiration stages).
-1. You can also edit any custom extension. This allows you to update the name, description, and other field values. This can be accomplished by selecting **Edit** inside the three-dot pane for any custom extension.
+This is an example of a MyAccess request history from a requestor after the extension resumes:
-1. Old style custom extensions can continue to be used and edited even if not converted, even though they can no longer be created.
-
-1. If an old style custom extension cannot be updated to the new type because it is being used for policy stages, of **BOTH** assignment request and pre expiration types, then in order to update it you must either remove it from all linked policies or ensure it is only used for policy stages associated with **ONE** type (assignment request, or pre expiration).  
-
-## Add custom extension to a policy in an access package
-
-**Prerequisite roles:** Global administrator, Identity Governance administrator, Catalog owner, or Access package manager
-
-1. Sign in to the [Azure portal](https://portal.azure.com).
-
-1. In the Azure portal, select **Azure Active Directory** and then select **Identity Governance**.
-
-1. In the left menu, select **Access packages**.
-
-1. Select the access package you want to add a custom extension (logic app) to from the list of access packages that have already been created.
-
- > [!NOTE]
- > Select **New access package** if you want to create a new access package.
- > For more information about how to create an access package, see [Create a new access package in entitlement management](entitlement-management-access-package-create.md). For more information about how to edit an existing access package, see [Change request settings for an access package in Azure AD entitlement management](entitlement-management-access-package-request-policy.md#open-and-edit-an-existing-policys-request-settings).
-
-1. Change to the policy tab, select the policy and select **Edit**.
-
-1. In the policy settings, go to the **Custom Extensions (Preview)** tab.
-
-1. In the menu below **Stage**, select the access package event you wish to use as trigger for this custom extension (Logic App). For example, if you only want to trigger the custom extension Logic App workflow when a user requests the access package, select **Request is created**.
-
-1. In the menu below **Custom Extension**, select the custom extension (Logic App) you want to add to the access package. The action you select executes when the event selected in the *when* field occurs.
-
-1. Select **Update** to add it to an existing access package's policy.
-
- ![Add a Logic App to access package](./media/entitlement-management-logic-apps/add-logic-apps-access-package.png)
+ :::image type="content" source="media/entitlement-management-logic-apps/extensibility-requestor-experience.png" alt-text="Screenshot of the requestor screen." lightbox="media/entitlement-management-logic-apps/extensibility-requestor-experience.png":::
## Troubleshooting and Validation
To verify that your custom extension has correctly triggered the associated Logi
## Next steps - [Delegation and roles in entitlement management](entitlement-management-delegate.md)-- [Create and manage a catalog of resources in entitlement management](entitlement-management-catalog-create.md)
+- [Create and manage a catalog of resources in entitlement management](entitlement-management-catalog-create.md)
active-directory Howto Identity Protection Simulate Risk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/identity-protection/howto-identity-protection-simulate-risk.md
Completing the following procedure requires you to use a user account that has:
**To simulate a sign-in from an unfamiliar location, perform the following steps**:
-1. When signing in with your test account, fail the multifactor authentication (MFA) challenge by not passing the MFA challenge.
-2. Using your new VPN, navigate to [https://myapps.microsoft.com](https://myapps.microsoft.com) and enter the credentials of your test account.
+1. Using your new VPN, navigate to [https://myapps.microsoft.com](https://myapps.microsoft.com) and enter the credentials of your test account.
+2. When signing in with your test account, fail the multifactor authentication (MFA) challenge by not passing the MFA challenge.
The sign-in shows up on the Identity Protection dashboard within 10 - 15 minutes.
active-directory Migrate Adfs Application Activity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/manage-apps/migrate-adfs-application-activity.md
Previously updated : 01/14/2019 Last updated : 03/23/2023
Many organizations use Active Directory Federation Services (AD FS) to provide single sign-on to cloud applications. There are significant benefits to moving your AD FS applications to Azure AD for authentication, especially in terms of cost management, risk management, productivity, compliance, and governance. But understanding which applications are compatible with Azure AD and identifying specific migration steps can be time consuming.
-The AD FS application activity report in the Azure portal lets you quickly identify which of your applications are capable of being migrated to Azure AD. It assesses all AD FS applications for compatibility with Azure AD, checks for any issues, and gives guidance on preparing individual applications for migration. With the AD FS application activity report, you can:
+The AD FS application activity report in the [Entra portal](https://entra.microsoft.com) lets you quickly identify which of your applications are capable of being migrated to Azure AD. It assesses all AD FS applications for compatibility with Azure AD, checks for any issues, and gives guidance on preparing individual applications for migration. With the AD FS application activity report, you can:
* **Discover AD FS applications and scope your migration.** The AD FS application activity report lists all AD FS applications in your organization that have had an active user login in the last 30 days. The report indicates an apps readiness for migration to Azure AD. The report doesn't display Microsoft related relying parties in AD FS such as Office 365. For example, relying parties with name 'urn:federation:MicrosoftOnline'.
The AD FS application activity data is available to users who are assigned any o
## Discover AD FS applications that can be migrated
-The AD FS application activity report is available in the Azure portal under Azure AD **Usage & insights** reporting. The AD FS application activity report analyzes each AD FS application to determine if it can be migrated as-is, or if additional review is needed.
+The AD FS application activity report is available in the [Entra portal](https://entra.microsoft.com) under Azure AD **Usage & insights** reporting. The AD FS application activity report analyzes each AD FS application to determine if it can be migrated as-is, or if additional review is needed.
-1. Sign in to the [Azure portal](https://portal.azure.com) with an admin role that has access to AD FS application activity data (global administrator, reports reader, security reader, application administrator, or cloud application administrator).
+1. Sign in to the [Entra portal](https://entra.microsoft.com) with an admin role that has access to AD FS application activity data (global administrator, reports reader, security reader, application administrator, or cloud application administrator).
2. Select **Azure Active Directory**, and then select **Enterprise applications**.
active-directory Alinto Protect Provisioning Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/alinto-protect-provisioning-tutorial.md
This section guides you through the steps to configure the Azure AD provisioning
![Provisioning tab automatic](common/provisioning-automatic.png)
-1. In the **Admin Credentials** section, input your Alinto Protect Tenant URL and Secret Token. Click **Test Connection** to ensure Azure AD can connect to Alinto Protect. If the connection fails, ensure your Alinto Protect account has Admin permissions and try again.
+1. In the **Admin Credentials** section, input your Alinto Protect Tenant URL as `https://cloud.cleanmail.eu/api/v3/scim2 ` and corresponding Secret Token obtained from Step 2. Click **Test Connection** to ensure Azure AD can connect to Alinto Protect. If the connection fails, ensure your Alinto Protect account has Admin permissions and try again.
![Token](common/provisioning-testconnection-tenanturltoken.png)
active-directory Workload Identity Federation Create Trust User Assigned Managed Identity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/workload-identities/workload-identity-federation-create-trust-user-assigned-managed-identity.md
To learn more about supported regions, time to propagate federated credential up
- Get the information for your external IdP and software workload, which you need in the following steps. - To create a user-assigned managed identity and configure a federated identity credential, your account needs the [Contributor](../../role-based-access-control/built-in-roles.md#contributor) or [Owner](../../role-based-access-control/built-in-roles.md#owner) role assignment. - [Create a user-assigned manged identity](../managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md?pivots=identity-mi-methods-azp#create-a-user-assigned-managed-identity)-- Find the object ID of the user-assigned managed identity, which you need in the following steps.
+- Find the name of the user-assigned managed identity, which you need in the following steps.
## Configure a federated identity credential on a user-assigned managed identity
To delete a specific federated identity credential, select the **Delete** icon f
- Get the information for your external IdP and software workload, which you need in the following steps. - To create a user-assigned managed identity and configure a federated identity credential, your account needs the [Contributor](../../role-based-access-control/built-in-roles.md#contributor) or [Owner](../../role-based-access-control/built-in-roles.md#owner) role assignment. - [Create a user-assigned manged identity](../managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md?pivots=identity-mi-methods-azcli#create-a-user-assigned-managed-identity-1)-- Find the object ID of the user-assigned managed identity, which you need in the following steps.
+- Find the name of the user-assigned managed identity, which you need in the following steps.
[!INCLUDE [azure-cli-prepare-your-environment-no-header.md](~/articles/reusable-content/azure-cli/azure-cli-prepare-your-environment-no-header.md)] ## Configure a federated identity credential on a user-assigned managed identity
-Run the [az identity federated-credential create](/cli/azure/identity/federated-credential#az-identity-federated-credential-create) command to create a new federated identity credential on your user-assigned managed identity (specified by the object ID of the app). Specify the *name*, *issuer*, *subject*, and other parameters.
+Run the [az identity federated-credential create](/cli/azure/identity/federated-credential#az-identity-federated-credential-create) command to create a new federated identity credential on your user-assigned managed identity (specified by the name). Specify the *name*, *issuer*, *subject*, and other parameters.
```azurecli az login
az identity federated-credential delete --name $ficId --identity-name $uaId --re
- Use [Azure Cloud Shell](../../cloud-shell/overview.md), which you can open by using the **Try It** button in the upper-right corner of code blocks. - Run scripts locally with Azure PowerShell, as described in the next section. - [Create a user-assigned manged identity](../managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md?pivots=identity-mi-methods-powershell#list-user-assigned-managed-identities-2) -- Find the object ID of the user-assigned managed identity, which you need in the following steps.
+- Find the name of the user-assigned managed identity, which you need in the following steps.
### Configure Azure PowerShell locally
To use Azure PowerShell locally for this article instead of using Cloud Shell:
## Configure a federated identity credential on a user-assigned managed identity
-Run the New-AzFederatedIdentityCredentials command to create a new federated identity credential on your user-assigned managed identity (specified by the object ID of the app). Specify the *name*, *issuer*, *subject*, and other parameters.
+Run the [New-AzFederatedIdentityCredentials](/powershell/module/az.managedserviceidentity/new-azfederatedidentitycredentials) command to create a new federated identity credential on your user-assigned managed identity (specified by the name). Specify the *name*, *issuer*, *subject*, and other parameters.
```azurepowershell New-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01 `
New-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityNam
## List federated identity credentials on a user-assigned managed identity
-Run the Get-AzFederatedIdentityCredentials command to read all the federated identity credentials configured on a user-assigned managed identity:
+Run the [Get-AzFederatedIdentityCredentials](/powershell/module/az.managedserviceidentity/get-azfederatedidentitycredentials) command to read all the federated identity credentials configured on a user-assigned managed identity:
```azurepowershell Get-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01
Get-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityNam
## Get a federated identity credential on a user-assigned managed identity
-Run the Get-AzFederatedIdentityCredentials command to show a federated identity credential (by ID):
+Run the [Get-AzFederatedIdentityCredentials](/powershell/module/az.managedserviceidentity/get-azfederatedidentitycredentials) command to show a federated identity credential (by name):
```azurepowershell Get-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01 -Name fic-pwsh01
Get-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityNam
## Delete a federated identity credential from a user-assigned managed identity
-Run the Remove-AzFederatedIdentityCredentials command to delete a federated identity credential under an existing user assigned identity.
+Run the [Remove-AzFederatedIdentityCredentials](/powershell/module/az.managedserviceidentity/remove-azfederatedidentitycredentials) command to delete a federated identity credential under an existing user assigned identity.
```azurepowershell Remove-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01 -Name fic-pwsh01
Remove-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -Identity
- Get the information for your external IdP and software workload, which you need in the following steps. - To create a user-assigned managed identity and configure a federated identity credential, your account needs the [Contributor](../../role-based-access-control/built-in-roles.md#contributor) or [Owner](../../role-based-access-control/built-in-roles.md#owner) role assignment. - [Create a user-assigned manged identity](../managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md?pivots=identity-mi-methods-arm#create-a-user-assigned-managed-identity-3)-- Find the object ID of the user-assigned managed identity, which you need in the following steps.
+- Find the name of the user-assigned managed identity, which you need in the following steps.
## Template creation and editing
Make sure that any kind of automation creates federated identity credentials und
- To run in the cloud, use [Azure Cloud Shell](../../cloud-shell/overview.md). - To run locally, install [curl](https://curl.haxx.se/download.html) and the [Azure CLI](/cli/azure/install-azure-cli). - [Create a user-assigned manged identity](../managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md?pivots=identity-mi-methods-rest#create-a-user-assigned-managed-identity-4)-- Find the object ID of the user-assigned managed identity, which you need in the following steps.
+- Find the name of the user-assigned managed identity, which you need in the following steps.
## Obtain a bearer access token
Make sure that any kind of automation creates federated identity credentials und
## Configure a federated identity credential on a user-assigned managed identity
-Create or update a federated identity credential on the specified user-assigned managed identity.
+[Create or update a federated identity credential](/rest/api/managedidentity/2022-01-31-preview/federated-identity-credentials/create-or-update) on the specified user-assigned managed identity.
```bash curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/provider
PUT https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/
## List federated identity credentials on a user-assigned managed identity
-List all the federated identity credentials on the specified user-assigned managed identity.
+[List all the federated identity credentials](/rest/api/managedidentity/2022-01-31-preview/federated-identity-credentials/list) on the specified user-assigned managed identity.
```bash curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials?api-version=2022-01-31-preview' -H "Content-Type: application/json" -X GET -H "Authorization: Bearer <ACCESS TOKEN>"
https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RES
## Get a federated identity credential on a user-assigned managed identity
-Get a federated identity credential on the specified user-assigned managed identity.
+[Get a federated identity credential](/rest/api/managedidentity/2022-01-31-preview/federated-identity-credentials/get) on the specified user-assigned managed identity.
```bash curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL RESOURCENAME>?api-version=2022-01-31-preview' -X GET -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RES
## Delete a federated identity credential from a user-assigned managed identity
-Delete a federated identity credential on the specified user-assigned managed identity.
+[Delete a federated identity credential](/rest/api/managedidentity/2022-01-31-preview/federated-identity-credentials/delete) on the specified user-assigned managed identity.
```bash curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL RESOURCENAME>?api-version=2022-01-31-preview' -X DELETE -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
advisor Advisor Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/advisor/advisor-get-started.md
Learn how to access Advisor through the Azure portal, get recommendations, and i
1. The Advisor dashboard will display a summary of your recommendations for all selected subscriptions. You can choose the subscriptions that you want recommendations to be displayed for using the subscription filter dropdown.
-1. To get recommendations for a specific category, click one of the tabs: **Reliability**, **Security**, **Performance**, or **Cost**.
+1. To get recommendations for a specific category, click one of the tabs: **Reliability**, **Security**, **Performance**, **Operational Excellence**, or **Cost**.
![Azure Advisor dashboard](./media/advisor-overview/advisor-dashboard.png)
aks Azure Csi Blob Storage Provision https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-csi-blob-storage-provision.md
Title: Create a persistent volume with Azure Blob storage in Azure Kubernetes Se
description: Learn how to create a static or dynamic persistent volume with Azure Blob storage for use with multiple concurrent pods in Azure Kubernetes Service (AKS) Previously updated : 01/18/2023 Last updated : 03/23/2023
The following example demonstrates how to mount a Blob storage container as a pe
apiVersion: v1 kind: PersistentVolume metadata:
+ annotations:
+ pv.kubernetes.io/provisioned-by: blob.csi.azure.com
name: pv-blob spec: capacity:
Kubernetes needs credentials to access the Blob storage container created earlie
apiVersion: v1 kind: PersistentVolume metadata:
+ annotations:
+ pv.kubernetes.io/provisioned-by: blob.csi.azure.com
name: pv-blob spec: capacity:
The following YAML creates a pod that uses the persistent volume or persistent v
[azure-blob-storage-nfs-support]: ../storage/blobs/network-file-system-protocol-support.md [enable-blob-csi-driver]: azure-blob-csi.md#before-you-begin [az-tags]: ../azure-resource-manager/management/tag-resources.md
-[sas-tokens]: ../storage/common/storage-sas-overview.md
+[sas-tokens]: ../storage/common/storage-sas-overview.md
aks Azure Csi Disk Storage Provision https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-csi-disk-storage-provision.md
description: Learn how to create a static or dynamic persistent volume with Azure Disks for use with multiple concurrent pods in Azure Kubernetes Service (AKS) Previously updated : 01/18/2023 Last updated : 03/23/2023 # Create and use a volume with Azure Disks in Azure Kubernetes Service (AKS)
When you create an Azure disk for use with AKS, you can create the disk resource
apiVersion: v1 kind: PersistentVolume metadata:
+ annotations:
+ pv.kubernetes.io/provisioned-by: disk.csi.azure.com
name: pv-azuredisk spec: capacity:
aks Azure Csi Files Storage Provision https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-csi-files-storage-provision.md
The following example demonstrates how to mount a file share as a persistent vol
apiVersion: v1 kind: PersistentVolume metadata:
+ annotations:
+ pv.kubernetes.io/provisioned-by: file.csi.azure.com
name: azurefile spec: capacity:
aks Azure Disk Csi https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-disk-csi.md
Title: Use Container Storage Interface (CSI) driver for Azure Disks on Azure Kubernetes Service (AKS) description: Learn how to use the Container Storage Interface (CSI) driver for Azure Disks in an Azure Kubernetes Service (AKS) cluster. Previously updated : 01/18/2023 Last updated : 03/16/2023 # Use the Azure Disks Container Storage Interface (CSI) driver in Azure Kubernetes Service (AKS)
In addition to in-tree driver features, Azure Disks CSI driver supports the foll
- Performance improvements during concurrent disk attach and detach - In-tree drivers attach or detach disks in serial, while CSI drivers attach or detach disks in batch. There's significant improvement when there are multiple disks attaching to one node. - Premium SSD v1 and v2 are supported.
+ - `PremiumV2_LRS` only supports `None` caching mode
- Zone-redundant storage (ZRS) disk support - `Premium_ZRS`, `StandardSSD_ZRS` disk types are supported. ZRS disk could be scheduled on the zone or non-zone node, without the restriction that disk volume should be co-located in the same zone as a given node. For more information, including which regions are supported, see [Zone-redundant storage for managed disks](../virtual-machines/disks-redundancy.md). - [Snapshot](#volume-snapshots)
In addition to in-tree driver features, Azure Disks CSI driver supports the foll
|Name | Meaning | Available Value | Mandatory | Default value | | | | |
-|skuName | Azure Disks storage account type (alias: `storageAccountType`)| `Standard_LRS`, `Premium_LRS`, `StandardSSD_LRS`, `PremiumV2_LRS`, `UltraSSD_LRS`, `Premium_ZRS`, `StandardSSD_ZRS` | No | `StandardSSD_LRS`|
+|skuName | Azure Disks storage account type (alias: `storageAccountType`)| `Standard_LRS`, `Premium_LRS`, `StandardSSD_LRS`, `UltraSSD_LRS`, `Premium_ZRS`, `StandardSSD_ZRS`, `PremiumV2_LRS` (`PremiumV2_LRS` only supports `None` caching mode) | No | `StandardSSD_LRS`|
|fsType | File System Type | `ext4`, `ext3`, `ext2`, `xfs`, `btrfs` for Linux, `ntfs` for Windows | No | `ext4` for Linux, `ntfs` for Windows| |cachingMode | [Azure Data Disk Host Cache Setting](../virtual-machines/windows/premium-storage-performance.md#disk-caching) | `None`, `ReadOnly`, `ReadWrite` | No | `ReadOnly`| |location | Specify Azure region where Azure Disks will be created | `eastus`, `westus`, etc. | No | If empty, driver will use the same location name as current AKS cluster|
aks Csi Migrate In Tree Volumes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/csi-migrate-in-tree-volumes.md
Title: Migrate from in-tree storage class to CSI drivers on Azure Kubernetes Service (AKS) description: Learn how to migrate from in-tree persistent volume to the Container Storage Interface (CSI) driver in an Azure Kubernetes Service (AKS) cluster. Previously updated : 01/18/2023 Last updated : 03/23/2023
Migration from in-tree to CSI is supported by creating a static volume.
apiVersion: v1 kind: PersistentVolume metadata:
+ annotations:
+ pv.kubernetes.io/provisioned-by: file.csi.azure.com
name: azurefile spec: capacity:
For more about storage best practices, see [Best practices for storage and backu
[aks-rbac-cluster-admin-role]: manage-azure-rbac.md#create-role-assignments-for-users-to-access-the-cluster [azure-resource-locks]: ../azure-resource-manager/management/lock-resources.md [csi-driver-overview]: csi-storage-drivers.md
-[aks-storage-backups-best-practices]: operator-best-practices-storage.md
+[aks-storage-backups-best-practices]: operator-best-practices-storage.md
api-management Api Management Howto Aad https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/api-management/api-management-howto-aad.md
description: Learn how to enable user sign-in to the API Management developer po
Previously updated : 07/12/2022 Last updated : 03/17/2023 + # Authorize developer accounts by using Azure Active Directory in Azure API Management
Now that you've enabled access for users in an Azure AD tenant, you can:
Follow these steps to grant: * `User.Read` **delegated** permission for Microsoft Graph API. * `Directory.ReadAll` **application** permission for Microsoft Graph API. + 1. Update the first 3 lines of the following Azure CLI script to match your environment and run it. ```azurecli
Now you can add external Azure AD groups from the **Groups** tab of your API Man
1. Under **Developer portal** in the side menu, select **Groups**. 1. Select the **Add Azure AD group** button.
- !["Screenshot showing Add Azure AD group button.](./media/api-management-howto-aad/api-management-with-aad008.png)
+ :::image type="content" source="media/api-management-howto-aad/api-management-with-aad008.png" alt-text="Screenshot showing Add Azure AD group button in the portal.":::
+ 1. Select the **Tenant** from the drop-down. 1. Search for and select the group that you want to add. 1. Press the **Select** button.
Users from the configured Azure AD instance can now:
* View and subscribe to any groups for which they have visibility. > [!NOTE]
-> Learn more about the difference between **Delegated** and **Application** permissions types in [Permissions and consent in the Microsoft identity platform](../active-directory/develop/v2-permissions-and-consent.md#permission-types) article.
+> Learn more about the difference between **Delegated** and **Application** permissions types in [Permissions and consent in the Microsoft identity platform](../active-directory/develop/v2-permissions-and-consent.md#permission-types) article.
## <a id="log_in_to_dev_portal"></a> Developer portal: Add Azure AD account authentication
api-management Api Management Howto Create Groups https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/api-management/api-management-howto-create-groups.md
Title: Manage developer accounts using groups in Azure API Management description: Learn how to manage developer accounts using groups in Azure API Management. Create groups, and then associate them with products or developers.--- + - Previously updated : 02/13/2018 Last updated : 03/17/2023 + # How to create and use groups to manage developer accounts in Azure API Management
API Management has the following immutable system groups:
* **Developers** - Authenticated developer portal users fall into this group. Developers are the customers that build applications using your APIs. Developers are granted access to the developer portal and build applications that call the operations of an API. * **Guests** - Unauthenticated developer portal users, such as prospective customers visiting the developer portal of an API Management instance fall into this group. They can be granted certain read-only access, such as the ability to view APIs but not call them.
-In addition to these system groups, administrators can create custom groups or [leverage external groups in associated Azure Active Directory tenants][leverage external groups in associated Azure Active Directory tenants]. Custom and external groups can be used alongside system groups in giving developers visibility and access to API products. For example, you could create one custom group for developers affiliated with a specific partner organization and allow them access to the APIs from a product containing relevant APIs only. A user can be a member of more than one group.
+In addition to these system groups, administrators can create custom groups or [use external groups in associated Azure Active Directory tenants][leverage external groups in associated Azure Active Directory tenants]. Custom and external groups can be used alongside system groups in giving developers visibility and access to API products. For example, you could create one custom group for developers affiliated with a specific partner organization and allow them access to the APIs from a product containing relevant APIs only. A user can be a member of more than one group.
This guide shows how administrators of an API Management instance can add new groups and associate them with products and developers.
Complete tasks in this article: [Create an Azure API Management instance](get-st
This section shows how to add a new group to your API Management account. 1. Select the **Groups** tab to the left of the screen.
-2. Click **+Add**.
-3. Enter a unique name for the group and an optional description.
-4. Press **Create**.
+1. Click **+Add**.
+1. Enter a unique name for the group and an optional description.
+1. Press **Create**.
- ![Add a new group](./media/api-management-howto-create-groups/groups001.png)
+ :::image type="content" source="media/api-management-howto-create-groups/groups001.png" alt-text="Screenshot of creating a group in the portal.":::
+Once the group is created, it's added to the **Groups** list.
+ * To edit the **Name** or **Description** of the group, click the name of the group and select **Settings**
-Once the group is created, it is added to the **Groups** list. <br/>To edit the **Name** or **Description** of the group, click the name of the group and **Settings**.<br/>To delete the group, click the name of the group and press **Delete**.
+ * To delete the group, click the name of the group and press **Delete**.
Now that the group is created, it can be associated with products and developers. ## <a name="associate-group-product"> </a>Associate a group with a product 1. Select the **Products** tab to the left.
-2. Click the name of the desired product.
-3. Press **Access control**.
-4. Click **+ Add group**.
-
- ![Screenshot that highlights the Add group button.](./media/api-management-howto-create-groups/groups002.png)
-5. Select the group you want to add.
-
- ![Screenshot that shows the selected group and highlights the Select button.](./media/api-management-howto-create-groups/groups003.png)
-
- To remove a group from the product, click **Delete**.
+1. Click the name of the desired product.
+1. Press **Access control** > **+ Add group**.
+1. Select the group you want to add.
- ![Delete a group](./media/api-management-howto-create-groups/groups004.png)
+ :::image type="content" source="media/api-management-howto-create-groups/groups002.png" alt-text="Screenshot of adding a group to a product in the portal.":::
Once a product is associated with a group, developers in that group can view and subscribe to the product. > [!NOTE] > To add Azure Active Directory groups, see [How to authorize developer accounts using Azure Active Directory in Azure API Management](api-management-howto-aad.md).
+To remove a group from the product, click **Delete**.
++ ## <a name="associate-group-developer"> </a>Associate groups with developers This section shows how to associate groups with members.
-1. Select the **Groups** tab to the left of the screen.
-2. Select **Members**.
+1. Select the **Groups** tab to the left of the screen, and then select a group.
+1. Select **Members** > **+ Add**.
++
+1. Select a member.
- ![Add a member](./media/api-management-howto-create-groups/groups005.png)
-3. Press **+Add** and select a member.
+ :::image type="content" source="media/api-management-howto-create-groups/groups006.png" alt-text="Screenshot of adding a member to a group in the portal.":::
- ![Screenshot that highlights the Add button, the selected user, and the Select button.](./media/api-management-howto-create-groups/groups006.png)
-4. Press **Select**.
+1. Press **Select**.
Once the association is added between the developer and the group, you can view it in the **Users** tab.
application-gateway Configuration Http Settings https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/configuration-http-settings.md
Previously updated : 09/13/2022 Last updated : 03/17/2023
Please refer to TLS offload and End-to-End TLS documentation for Application Gat
## Connection draining
-Connection draining helps you gracefully remove backend pool members during planned service updates. It applies to backend instances that are explicitly removed from the backend pool or during scale-in of backend instances. You can apply this setting to all members of a backend pool by enabling connection draining on the Backend Setting. It ensures that all deregistering instances of a backend pool continue to maintain existing connections and serve on-going requests for a configurable timeout and don't receive any new requests or connections.
+Connection draining helps you gracefully remove backend pool members during planned service updates. It applies to backend instances that are
+- explicitly removed from the backend pool,
+- removed during scale-in operations, or
+- reported as unhealthy by the health probes.
+
+You can apply this setting to all backend pool members by enabling Connection Draining in the Backend Setting. It ensures that all deregistering instances in a backend pool don't receive any new requests/connections while maintaining the existing connections until the configured timeout value. This is also true for WebSocket connections.
| Configuration Type | Value | | - | - |
application-gateway Features https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/features.md
Previously updated : 09/13/2022 Last updated : 03/17/2023
For more information, see [WebSocket support](application-gateway-websocket.md)
## Connection draining
-Connection draining helps you achieve graceful removal of backend pool members during planned service updates. This setting is enabled via the backend http setting and can be applied to all members of a backend pool during rule creation. Once enabled, Application Gateway ensures all deregistering instances of a backend pool don't receive any new request while allowing existing requests to complete within a configured time limit. This applies to both backend instances that are explicitly removed from the backend pool by a user configuration change, and backend instances that are reported as unhealthy as determined by the health probes. The only exception to this are requests bound for deregistering instances, which have been deregistered explicitly, because of gateway-managed session affinity and continues to be proxied to the deregistering instances.
+Connection draining helps you achieve graceful removal of backend pool members during planned service updates or problems with backend health. This setting is enabled via the [Backend Setting](configuration-http-settings.md) and is applied to all backend pool members during rule creation. Once enabled, the aplication gateway ensures all deregistering instances of a backend pool don't receive any new requests while allowing existing requests to complete within a configured time limit. It applies to cases where backend instances are
+- explicitly removed from the backend pool after a configuration change by a user,
+- reported as unhealthy by the health probes, or
+- removed during a scale-in operation.
-For more information, see [Application Gateway Configuration Overview](configuration-http-settings.md#connection-draining).
+The only exception is when requests continue to be proxied to the deregistering instances because of gateway-managed session affinity.
+
+The connection draining is honored for WebSocket connections as well. For information on time limits, see [Backend Settings configuration](configuration-http-settings.md#connection-draining).
## Custom error pages
automation Update Agent Issues Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/automation/troubleshoot/update-agent-issues-linux.md
As they are the directories of workspaces, the number of directories equals the
To fix the issue, run the following command: ```
-sudo su omsagent -c python /opt/microsoft/omsconfig/Scripts/PerformRequiredConfigurationChecks.py
+sudo su omsagent -c 'python /opt/microsoft/omsconfig/Scripts/PerformRequiredConfigurationChecks.py'
``` This command forces the omsconfig agent to talk to Azure Monitor and retrieve the latest configuration.
Update Management downloads Hybrid Runbook Worker packages from the operations e
To fix this issue, run the following command: ```
-sudo su omsagent -c python /opt/microsoft/omsconfig/Scripts/PerformRequiredConfigurationChecks.py
+sudo su omsagent -c 'python /opt/microsoft/omsconfig/Scripts/PerformRequiredConfigurationChecks.py'
``` This command forces the omsconfig agent to talk to Azure Monitor and retrieve the latest configuration.
azure-arc Ssh Arc Troubleshoot https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/servers/ssh-arc-troubleshoot.md
Resolution:
```powershell # Set 22 port: azcmagent config list
- azcmagent config get incomingconnections.port
- azcmagent config set incomingconnections.port 22
+ azcmagent config get incomingconnections.ports
+ azcmagent config set incomingconnections.ports 22
azcmagent config # Add multiple ports:
- azcmagent config set incomingconnections.port 22,3516
+ azcmagent config set incomingconnections.ports 22,6516
``` ## Azure permissions issues
azure-maps Add Bubble Layer Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-bubble-layer-map-ios.md
Title: Add a bubble layer to iOS maps description: Learn how to render points on maps as circles with fixed sizes. See how to use the Azure Maps iOS SDK to add and customize bubble layers for this purpose.--++ Last updated 11/23/2021
azure-maps Add Controls Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-controls-map-ios.md
Title: Add controls to an iOS map description: How to add zoom control, pitch control, rotate control and a style picker to a map in Microsoft Azure Maps iOS SDK.--++ Last updated 11/19/2021
A zoom control adds buttons for zooming the map in and out. The following code s
map.controls.add(ZoomControl()) ```
-The screenshot below is of a zoom control loaded on a map.
+This screenshot shows a zoom control loaded on a map.
:::image type="content" source="./media/ios-sdk/add-controls-to-map-ios/zoom.png" alt-text="Screenshot showing the zoom control on a map." lightbox="./media/ios-sdk/add-controls-to-map-ios/zoom.png":::
A pitch control adds buttons for tilting the pitch to map relative to the horizo
map.controls.add(PitchControl()) ```
-The screenshot below is of a pitch control loaded on a map.
+This screenshot shows a pitch control loaded on a map.
:::image type="content" source="./media/ios-sdk/add-controls-to-map-ios/pitch.png" alt-text="Screenshot showing the pitch control on a map." lightbox="./media/ios-sdk/add-controls-to-map-ios/pitch.png":::
A rotation control adds a button for rotating the map. The following code sample
map.controls.add(RotationControl()) ```
-The screenshot below is of a rotation control loaded on a map.
+This screenshot shows a rotation control loaded on a map.
:::image type="content" source="./media/ios-sdk/add-controls-to-map-ios/rotation.png" alt-text="Screenshot showing the rotation control on a map." lightbox="./media/ios-sdk/add-controls-to-map-ios/rotation.png":::
A traffic control adds a button for toggling the visibility of traffic data on t
map.controls.add(TrafficControl()) ```
-The screenshot below is of a traffic control loaded on a map.
+This screenshot shows a traffic control loaded on a map.
:::image type="content" source="./media/ios-sdk/add-controls-to-map-ios/traffic.png" alt-text="Screenshot showing the traffic control on a map." lightbox="./media/ios-sdk/add-controls-to-map-ios/traffic.png"::: ## A map with all controls
-Multiple controls can be put into an array and added to the map all at once and positioned in the same area of the map to simplify development. The following code adds the standard navigation controls to the map using this approach.
+Multiple controls can be added to an array and the map then positioned in the same area of the map to simplify development. The following code adds the standard navigation controls to the map using this approach.
```swift map.controls.add([
map.controls.add([
]) ```
-The screenshot below shows all controls loaded on a map. The order they are added to the map, is the order they will appear.
+This screenshot shows all controls loaded on a map, appearing in the order they were added.
:::image type="content" source="./media/ios-sdk/add-controls-to-map-ios/all.png" alt-text="Screenshot showing a map with all controls added to it." lightbox="./media/ios-sdk/add-controls-to-map-ios/all.png":::
azure-maps Add Heat Map Layer Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-heat-map-layer-ios.md
Title: Add a heat map layer to iOS maps description: Learn how to create a heat map. See how to use the Azure Maps iOS SDK to add a heat map layer to a map. Find out how to customize heat map layers.--++ Last updated 11/23/2021
NSExpression(
- `sourceLayer`: If the data source connected to the layer is a vector tile source, a source layer within the vector tiles must be specified. - `visible`: Hides or shows the layer.
-This following is an example of a heat map where a liner interpolation expression is used to create a smooth color gradient. The `mag` property defined in the data is used with an exponential interpolation to set the weight or relevance of each data point.
+The following example demonstrates a heat map using a liner interpolation expression to create a smooth color gradient. The `mag` property defined in the data is used with an exponential interpolation to set the weight or relevance of each data point.
```swift let layer = HeatMapLayer(source: source, options: [
azure-maps Add Image Layer Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-image-layer-map-ios.md
Title: Add an Image layer to an iOS map description: Learn how to add images to a map. See how to use the Azure Maps iOS SDK to customize image layers and overlay images on fixed sets of coordinates.--++ Last updated 11/23/2021
let layer = ImageLayer(options: [
map.layers.insertLayer(layer, below: "labels") ```
-Alternatively, a URL to an image hosted on the online can be specified. However, if your scenario allows, add the image to your project's `Assets` folder, that will load faster since the image will be locally available and won't have to be downloaded.
+Alternatively, a URL to an image hosted on the online can be specified. However, if your scenario allows, add the image to your project's `Assets` folder, that loads faster since the image is locally available with no need to be downloaded.
```swift // Create an image layer.
azure-maps Add Line Layer Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-line-layer-map-ios.md
Title: Add a line layer to iOS maps description: Learn how to add lines to maps. See examples that use the Azure Maps iOS SDK to add line layers to maps and to customize lines with symbols and color gradients.--++ Last updated 11/23/2021
The following screenshot shows the above code rendering a line in a line layer.
## Data-driven line style
-The following code creates two line features and adds a speed limit value as a property to each line. A line layer uses a data-drive style expression color the lines based on the speed limit value. Since the line data overlays along roads, the code below adds the line layer below the label layer so that road labels can still clearly be read.
+The following code creates two line features and adds a speed limit value as a property to each line. A line layer uses a data-drive style expression color the lines based on the speed limit value. Since the line data overlays along roads, the following code adds the line layer below the label layer so that road labels remain visible.
```swift // Create a data source and add it to the map.
let layer = LineLayer(source: source, options: [
map.layers.insertLayer(layer, below: "labels") ```
-The following screenshot shows the above code rendering two lines in a line layer with their color being retrieved from a data driven style expression based on a property in the line features.
+The following screenshot shows the above code that renders two lines in a line layer with their color retrieved from a data driven style expression based on a property in the line features.
:::image type="content" source="./media/ios-sdk/add-line-layer-map-ios/data-driven.png" alt-text="Add a line layer to a map.":::
The following screenshot shows the above code displaying a line rendered using a
## Add symbols along a line
-This sample shows how to add arrow icons along a line on the map. When using a symbol layer, set the `symbolPlacement` option to `.line`. This option will render the symbols along the line and rotate the icons (0 degrees = right).
+This sample shows how to add arrow icons along a line on the map. When using a symbol layer, set the `symbolPlacement` option to `.line`. This option renders the symbols along the line and rotates the icons (0 degrees = right).
```swift // Create a data source and add it to the map.
For this sample, the following image was loaded into the assets folder of the ap
|::| | `purple-arrow-right.png` |
-The screenshot below shows the above code displaying a line with arrow icons displayed along it.
+The following screenshot shows the above code displaying a line with arrow icons displayed along it.
## Additional information
azure-maps Add Polygon Extrusion Layer Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-polygon-extrusion-layer-map-ios.md
Title: Add a polygon extrusion layer to an iOS map description: How to add a polygon extrusion layer to the Microsoft Azure Maps iOS SDK.--++ Last updated 11/23/2021
azure-maps Add Polygon Layer Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-polygon-layer-map-ios.md
Title: Add a polygon layer to iOS maps description: Learn how to add polygons or circles to maps. See how to use the Azure Maps iOS SDK to customize geometric shapes and make them easy to update and maintain.--++ Last updated 11/23/2021
azure-maps Add Symbol Layer Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-symbol-layer-ios.md
Title: Add a symbol layer to iOS maps description: Learn how to add a marker to a map. See an example that uses the Azure Maps iOS SDK to add a symbol layer that contains point-based data from a data source.--++ Last updated 11/19/2021
Be sure to complete the steps in the [Quickstart: Create an iOS app](quick-ios-a
Before you can add a symbol layer to the map, you need to take a couple of steps. First, create a data source, and add it to the map. Create a symbol layer. Then, pass in the data source to the symbol layer, to retrieve the data from the data source. Finally, add data into the data source, so that there's something to be rendered.
-The code below demonstrates what should be added to the map after it has loaded. This sample renders a single point on the map using a symbol layer.
+The following code demonstrates what should be added to the map after it has loaded. This sample renders a single point on the map using a symbol layer.
```swift //Create a data source and add it to the map.
The following screenshot shows the above code rendering a point feature using a
## Predefined Symbol Marker Icons
-Initially the map has the built-in default marker icon, which is already loaded into the image sprite of the map. It will be used by default if nothing is set to the `iconImage` option. In case you need to do it manually, set `"marker-default"` to the `iconImage` option.
+Initially the map has the built-in default marker icon, which is already loaded into the image sprite of the map. It's used by default if nothing is set to the `iconImage` option. In case you need to do it manually, set `"marker-default"` to the `iconImage` option.
```swift let layer = SymbolLayer(source: source, options: [.iconImage("marker-default")])
map.images.add(.azm_markerRed, withID: "marker-red")
let layer = SymbolLayer(source: source, options: [.iconImage("marker-red")]) ```
-The code below lists all of the built-in icon images available as static variables of `UIImage` class.
+The code below lists the built-in icon images available as static variables of `UIImage` class.
```swift UIImage.azm_markerDefault // Dark blue
azure-maps Add Tile Layer Map Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/add-tile-layer-map-ios.md
Title: Add a tile layer to iOS maps description: Learn how to add a tile layer to a map. See an example that uses the Azure Maps iOS SDK to add a weather radar overlay to a map.--++ Last updated 11/23/2021
This article shows you how to render a tile layer on a map using the Azure Maps iOS SDK. Tile layers allow you to superimpose images on top of Azure Maps base map tiles. More information on Azure Maps tiling system can be found in the [Zoom levels and tile grid](zoom-levels-and-tile-grid.md) documentation.
-A Tile layer loads in tiles from a server. These images can be pre-rendered and stored like any other image on a server, using a naming convention that the tile layer understands. Or, these images can be rendered with a dynamic service that generates the images near real time. There are three different tile service naming conventions supported by Azure Maps TileLayer class:
+A Tile layer loads in tiles from a server. These images can be prerendered and stored like any other image on a server, using a naming convention that the tile layer understands. Or, these images can be rendered with a dynamic service that generates the images near real time. There are three different tile service naming conventions supported by Azure Maps TileLayer class:
* X, Y, Zoom notation - Based on the zoom level, x is the column and y is the row position of the tile in the tile grid. * Quadkey notation - Combination x, y, zoom information into a single string value that is a unique identifier for a tile.
To complete the process in this article, you need to install [Azure Maps iOS SDK
## Add a tile layer to the map
-This sample shows how to create a tile layer that points to a set of tiles. This sample uses the "x, y, zoom" tiling system. The source of this tile layer is the [OpenSeaMap project](https://openseamap.org/index.php), which contains crowd sourced nautical charts. Often when viewing tile layers it is desirable to be able to clearly see the labels of cities on the map. This behavior can be achieved by inserting the tile layer below the map label layers.
+This sample shows how to create a tile layer that points to a set of tiles. This sample uses the "x, y, zoom" tiling system. The source of this tile layer is the [OpenSeaMap project](https://openseamap.org/index.php), which contains crowd sourced nautical charts. Often when viewing tile layers it's desirable to be able to clearly see the labels of cities on the map. This behavior can be achieved by inserting the tile layer below the map label layers.
```swift map.layers.insertLayer(
The following screenshot shows the above code displaying a tile layer of nautica
## Add an OGC web-mapping service (WMS)
-A web-mapping service (WMS) is an Open Geospatial Consortium (OGC) standard for serving images of map data. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` coordinate reference system (CRS). When using a WMS service, set the width and height parameters to the same value that is supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, set the `BBOX` parameter of the service with the `{bbox-epsg-3857}` placeholder.
+A web-mapping service (WMS) is an Open Geospatial Consortium (OGC) standard for serving images of map data. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` coordinate reference system (CRS). When using a WMS service, set the width and height parameters to the same value supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, set the `BBOX` parameter of the service with the `{bbox-epsg-3857}` placeholder.
```swift map.layers.insertLayer(
The following screenshot shows the above code overlaying a web-mapping service o
## Add an OGC web-mapping tile service (WMTS)
-A web-mapping tile service (WMTS) is an Open Geospatial Consortium (OGC) standard for serving tiled based overlays for maps. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` or `GoogleMapsCompatible` coordinate reference system (CRS). When using a WMTS service, set the width and height parameters to the same value that is supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, replace the following placeholders accordingly:
+A web-mapping tile service (WMTS) is an Open Geospatial Consortium (OGC) standard for serving tiled based overlays for maps. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` or `GoogleMapsCompatible` coordinate reference system (CRS). When using a WMTS service, set the width and height parameters to the same value supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, replace the following placeholders accordingly:
* `{TileMatrix}` => `{z}` * `{TileRow}` => `{y}`
azure-maps Android Map Add Line Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/android-map-add-line-layer.md
Title: Add a line layer to Android maps | Microsoft Azure Maps description: Learn how to add lines to maps. See examples that use the Azure Maps Android SDK to add line layers to maps and to customize lines with symbols and color gradients.--++ Last updated 2/26/2021
The following screenshot shows the above code rendering a line in a line layer.
## Data-driven line style
-The following code creates two line features and adds a speed limit value as a property to each line. A line layer uses a data-drive style expression color the lines based on the speed limit value. Since the line data overlays along roads, the code below adds the line layer below the label layer so that road labels can still clearly be read.
+The following code creates two line features and adds a speed limit value as a property to each line. A line layer uses a data-drive style expression color the lines based on the speed limit value. Since the line data overlays along roads, the following code adds the line layer below the label layer so that road labels can still clearly be read.
::: zone pivot="programming-language-java-android"
map.layers.add(layer, "labels")
::: zone-end
-The following screenshot shows the above code rendering two lines in a line layer with their color being retrieved from a data driven style expression based on a property in the line features.
+The following screenshot shows the above code rendering two lines in a line layer, the color retrieved from a data driven style expression based on a property in the line feature.
![Map with data-drive styled lines rendered in a line layer](media/android-map-add-line-layer/android-line-layer-data-drive-style.png)
The following screenshot shows the above code displaying a line rendered using a
## Add symbols along a line
-This sample shows how to add arrow icons along a line on the map. When using a symbol layer, set the `symbolPlacement` option to `SymbolPlacement.LINE`. This option will render the symbols along the line and rotate the icons (0 degrees = right).
+This sample shows how to add arrow icons along a line on the map. When using a symbol layer, set the `symbolPlacement` option to `SymbolPlacement.LINE`. This renders the symbols along the line and rotates the icons (0 degrees = right).
::: zone pivot="programming-language-java-android"
For this sample, the following image was loaded into the drawable folder of the
|:--:| | `purple-arrow-right.png` |
-The screenshot below shows the above code displaying a line with arrow icons displayed along it.
+The following screenshot shows the above code displaying a line with arrow icons displayed along it.
![Map with data-drive styled lines with arrows rendered in a line layer](media/android-map-add-line-layer/android-symbols-along-line-path.png)
azure-maps Android Map Events https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/android-map-events.md
Title: Handle map events in Android maps | Microsoft Azure Maps description: Learn which events are fired when users interact with maps. View a list of all supported map events. See how to use the Azure Maps Android SDK to handle events.--++ Last updated 2/26/2021
This article shows you how to use the maps events manager.
## Interact with the map
-The map manages all events through its `events` property. The following table lists all of the supported map events.
+The map manages all events through its `events` property. The following table lists the supported map events.
| Event | Event handler format | Description | ||-|-|
-| `OnCameraIdle` | `()` | <p>Fired after the last frame rendered before the map enters an "idle" state:<ul><li>No camera transitions are in progress.</li><li>All currently requested tiles have loaded.</li><li>All fade/transition animations have completed.</li></ul></p> |
-| `OnCameraMove` | `()` | Fired repeatedly during an animated transition from one view to another, as the result of either user interaction or methods. |
-| `OnCameraMoveCanceled` | `()` | Fired when a movement request to the camera has been canceled. |
-| `OnCameraMoveStarted` | `(int reason)` | Fired just before the map begins a transition from one view to another, as the result of either user interaction or methods. The `reason` argument of the event listener returns an integer value that provides details of how the camera movement was initiated. The following list outlines the possible reasons:<ul><li>1: Gesture</li><li>2: Developer animation</li><li>3: API Animation</li></ul> |
-| `OnClick` | `(double lat, double lon): boolean` | Fired when the map is pressed and released at the same point on the map. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
-| `OnFeatureClick` | `(List<Feature>): boolean` | Fired when the map is pressed and released at the same point on a feature. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
-| `OnLayerAdded` | `(Layer layer)` | Fired when a layer is added to the map. |
-| `OnLayerRemoved` | `(Layer layer)` | Fired when a layer is removed from the map. |
-| `OnLoaded` | `()` | Fired immediately after all necessary resources have been downloaded and the first visually complete rendering of the map has occurred. |
-| `OnLongClick` | `(double lat, double lon): boolean` | Fired when the map is pressed, held for a moment, and then released at the same point on the map. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
-| `OnLongFeatureClick ` | `(List<Feature>): boolean` | Fired when the map is pressed, held for a moment, and then released at the same point on a feature. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
-| `OnReady`              | `(AzureMap map)`     | Fired when the map initially is loaded or when the app orientation change and the minimum required map resources are loaded and the map is ready to be programmatically interacted with. |
-| `OnSourceAdded` | `(Source source)` | Fired when a `DataSource` or `VectorTileSource` is added to the map. |
-| `OnSourceRemoved` | `(Source source)` | Fired when a `DataSource` or `VectorTileSource` is removed from the map. |
-| `OnStyleChange` | `()` | Fired when the map's style loads or changes. |
+| `OnCameraIdle` | `()` | <p>Fires after the last frame rendered before the map enters an "idle" state:<ul><li>No camera transitions are in progress.</li><li>All currently requested tiles have loaded.</li><li>All fade/transition animations have completed.</li></ul></p> |
+| `OnCameraMove` | `()` | Fires repeatedly during an animated transition from one view to another, as the result of either user interaction or methods. |
+| `OnCameraMoveCanceled` | `()` | Fires when a movement request to the camera has been canceled. |
+| `OnCameraMoveStarted` | `(int reason)` | Fires just before the map begins a transition from one view to another, as the result of either user interaction or methods. The `reason` argument of the event listener returns an integer value that provides details of how the camera movement was initiated. The following list outlines the possible reasons:<ul><li>1: Gesture</li><li>2: Developer animation</li><li>3: API Animation</li></ul> |
+| `OnClick` | `(double lat, double lon): boolean` | Fires when the map is pressed and released at the same point on the map. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
+| `OnFeatureClick` | `(List<Feature>): boolean` | Fires when the map is pressed and released at the same point on a feature. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
+| `OnLayerAdded` | `(Layer layer)` | Fires when a layer is added to the map. |
+| `OnLayerRemoved` | `(Layer layer)` | Fires when a layer is removed from the map. |
+| `OnLoaded` | `()` | Fires immediately after all necessary resources have been downloaded and the first visually complete rendering of the map has occurred. |
+| `OnLongClick` | `(double lat, double lon): boolean` | Fires when the map is pressed, held for a moment, and then released at the same point on the map. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
+| `OnLongFeatureClick ` | `(List<Feature>): boolean` | Fires when the map is pressed, held for a moment, and then released at the same point on a feature. This event handler returns a boolean value indicating if the event should be consumed or passed further to other event listeners. |
+| `OnReady`              | `(AzureMap map)`     | Fires when the map initially loads, the orientation changes, the minimum required map resources load and the map is ready to be interacted with programmatically. |
+| `OnSourceAdded` | `(Source source)` | Fires when a `DataSource` or `VectorTileSource` is added to the map. |
+| `OnSourceRemoved` | `(Source source)` | Fires when a `DataSource` or `VectorTileSource` is removed from the map. |
+| `OnStyleChange` | `()` | Fires when the map's style loads or changes. |
The following code shows how to add the `OnClick`, `OnFeatureClick`, and `OnCameraMove` events to the map.
For more information, see the [Navigating the map](how-to-use-android-map-contro
## Scope feature events to layer
-When adding the `OnFeatureClick` or `OnLongFeatureClick` events to the map, a layer instance or layer ID can be passed in as a second parameter. When a layer is passed in, the event will only fire if the event occurs on that layer. Events scoped to layers are supported by the symbol, bubble, line, and polygon layers.
+When the `OnFeatureClick` or `OnLongFeatureClick` events are added to the map, a layer instance or layer ID can be passed in as a second parameter. When a layer is passed in, an event fires if it occurs on that layer. Events scoped to layers are supported by the symbol, bubble, line, and polygon layers.
::: zone pivot="programming-language-java-android"
azure-maps Choose Map Style https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/choose-map-style.md
Title: Change the style of the Azure Maps Web Map Control description: "Learn how to change a map's style and options. See how to add a style picker control to a map in Azure Maps so that users can switch between different styles."--++ Last updated 04/26/2020
The map control supports several different map [style options](/javascript/api/a
## Set map style options
-Style options can be set during web control initialization. Or, you can update style options by calling the map control's `setStyle` function. To see all of the available style options, see [style options](/javascript/api/azure-maps-control/atlas.styleoptions).
+Style options can be set during web control initialization. Or, you can update style options by calling the map control's `setStyle` function. To see all available style options, see [style options](/javascript/api/azure-maps-control/atlas.styleoptions).
```javascript //Set the style options when creating the map.
azure-maps Choose Pricing Tier https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/choose-pricing-tier.md
See the **pricing tier targeted customers** table below for a better understandi
||::| | |**Gen 1**|S0| The S0 pricing tier works for applications in all stages of production: from proof-of-concept development and early stage testing to application production and deployment. However, this tier is designed for small-scale development, or customers with low concurrent users, or both. S0 has a restriction of 50 QPS for all services combined. | |S1| The S1 pricing tier is for customers with large-scale enterprise applications, mission-critical applications, or high volumes of concurrent users. It's also for those customers who require advanced geospatial services.
-| **Gen 2** | Maps/Location Insights | Gen 2 pricing is for new and current Azure Maps customers. Gen 2 comes with a free monthly tier of transactions to be used to test and build on Azure maps. Maps and Location Insights SKUΓÇÖs contain all of Azure Maps capabilities. It allows you to achieve cost savings as Azure Maps transactions increases. Additionally, it has higher QPS limits than Gen 1. The Gen 2 pricing tier is required when using [Creator for indoor maps](creator-indoor-maps.md).
+| **Gen 2** | Maps/Location Insights | Gen 2 pricing is for new and current Azure Maps customers. Gen 2 comes with a free monthly tier of transactions to be used to test and build on Azure maps. Maps and Location Insights SKUΓÇÖs contain all Azure Maps capabilities. It allows you to achieve cost savings as Azure Maps transactions increases. Additionally, it has higher QPS limits than Gen 1. The Gen 2 pricing tier is required when using [Creator for indoor maps](creator-indoor-maps.md).
| | | For more information on QPS limits, please refer to [Azure Maps QPS rate limits](azure-maps-qps-rate-limits.md).
azure-maps Clustering Point Data Android Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/clustering-point-data-android-sdk.md
Title: Clustering point data in the Android SDK | Microsoft Azure Maps description: Learn how to cluster point data on maps. See how to use the Azure Maps Android SDK to cluster data, react to cluster mouse events, and display cluster aggregates.--++ Last updated 03/23/2021
Be sure to complete the steps in the [Quickstart: Create an Android app](quick-a
## Enabling clustering on a data source
-Enable clustering in the `DataSource` class by setting the `cluster` option to `true`. Set `clusterRadius` to select nearby points and combines them into a cluster. The value of `clusterRadius` is in pixels. Use `clusterMaxZoom` to specify a zoom level at which to disable the clustering logic. Here is an example of how to enable clustering in a data source.
+Enable clustering in the `DataSource` class by setting the `cluster` option to `true`. Set `clusterRadius` to select nearby points and combines them into a cluster. The value of `clusterRadius` is in pixels. Use `clusterMaxZoom` to specify a zoom level at which to disable the clustering logic. Here's an example of how to enable clustering in a data source.
::: zone pivot="programming-language-java-android"
The `DataSource` class provides the following methods related to clustering as w
| Method | Return type | Description | |--|-|-|
-| `getClusterChildren(Feature clusterFeature)` | `FeatureCollection` | Retrieves the children of the given cluster on the next zoom level. These children may be a combination of shapes and subclusters. The subclusters will be features with properties matching ClusteredProperties. |
-| `getClusterExpansionZoom(Feature clusterFeature)` | `int` | Calculates a zoom level at which the cluster will start expanding or break apart. |
+| `getClusterChildren(Feature clusterFeature)` | `FeatureCollection` | Retrieves the children of the given cluster on the next zoom level. These children may be a combination of shapes and subclusters. The subclusters become features with properties matching ClusteredProperties. |
+| `getClusterExpansionZoom(Feature clusterFeature)` | `int` | Calculates a zoom level at which the cluster starts expanding or break apart. |
| `getClusterLeaves(Feature clusterFeature, long limit, long offset)` | `FeatureCollection` | Retrieves all points in a cluster. Set the `limit` to return a subset of the points, and use the `offset` to page through the points. | ## Display clusters using a bubble layer
A bubble layer is a great way to render clustered points. Use expressions to sca
To display the size of the cluster on top of the bubble, use a symbol layer with text, and don't use an icon.
-The following code displays clustered points using a bubble layer, and the number of points in each cluster using a symbol layer. A second symbol layer is used to display individual points that are not within a cluster.
+The following code displays clustered points using a bubble layer, and the number of points in each cluster using a symbol layer. A second symbol layer is used to display individual points that aren't within a cluster.
::: zone pivot="programming-language-java-android"
The following image shows the above code display clustered point features in a b
When visualizing data points, the symbol layer automatically hides symbols that overlap each other to ensure a cleaner user interface. This default behavior might be undesirable if you want to show the data points density on the map. However, these settings can be changed. To display all symbols, set the `iconAllowOverlap` option of the Symbol layer to `true`.
-Use clustering to show the data points density while keeping a clean user interface. The sample below shows you how to add custom symbols and represent clusters and individual data points using the symbol layer.
+Use clustering to show the data points density while keeping a clean user interface. The following sample shows you how to add custom symbols and represent clusters and individual data points using the symbol layer.
::: zone pivot="programming-language-java-android"
The following image shows the above code rendering clustered and unclustered poi
## Clustering and the heat maps layer
-Heat maps are a great way to display the density of data on the map. This visualization method can handle a large number of data points on its own. If the data points are clustered and the cluster size is used as the weight of the heat map, then the heat map can handle even more data. To achieve this option, set the `heatmapWeight` option of the heat map layer to `get("point_count")`. When the cluster radius is small, the heat map will look nearly identical to a heat map using the unclustered data points, but it will perform much better. However, the smaller the cluster radius, the more accurate the heat map will be, but with fewer performance benefits.
+Heat maps are a great way to display the density of data on the map. This visualization method can handle a large number of data points on its own. If the data points are clustered and the cluster size is used as the weight of the heat map, then the heat map can handle even more data. To achieve this option, set the `heatmapWeight` option of the heat map layer to `get("point_count")`. When the cluster radius is small, the heat map looks nearly identical to a heat map using the unclustered data points, but it performs better. However, a smaller cluster radius results in a more accurate heat map, but with fewer performance benefits.
::: zone pivot="programming-language-java-android"
map.layers.add(
::: zone-end
-The following image shows the above code display a heat map that is optimized by using clustered point features and the cluster count as the weight in the heat map.
+The following image shows the above code displaying a heat map that is optimized by using clustered point features and the cluster count as the weight in the heat map.
![Map of a heatmap optimized using clustered points as a weight](media/clustering-point-data-android-sdk/android-cluster-heat-map.gif) ## Mouse events on clustered data points
-When mouse events occur on a layer that contains clustered data points, the clustered data point return to the event as a GeoJSON point feature object. This point feature will have the following properties:
+When mouse events occur on a layer that contains clustered data points, the clustered data point return to the event as a GeoJSON point feature object. This point feature has the following properties:
| Property name | Type | Description | ||||
map.events.add(OnFeatureClick { features: List<Feature?>? ->
::: zone-end
-The following image shows the above code display clustered points on a map that when clicked, zoom into the next zoom level that a cluster starts to break apart and expand.
+The following image shows the above code displaying clustered points on a map that when selected, zoom into the next zoom level that a cluster starts to break apart and expand.
![Map of clustered features zooming in and breaking apart when clicked](media/clustering-point-data-android-sdk/android-cluster-expansion.gif) ## Display cluster area
-The point data that a cluster represents is spread over an area. In this sample when the mouse is hovered over a cluster, two main behaviors occur. First, the individual data points contained in the cluster will be used to calculate a convex hull. Then, the convex hull will be displayed on the map to show an area. A convex hull is a polygon that wraps a set of points like an elastic band and can be calculated using the `atlas.math.getConvexHull` method. All points contained in a cluster can be retrieved from the data source using the `getClusterLeaves` method.
+The point data that a cluster represents is spread over an area. In this sample when the mouse is hovered over a cluster, two main behaviors occur. First, the individual data points contained in the cluster will be used to calculate a convex hull. Then, the convex hull displays on the map to show an area. A convex hull is a polygon that wraps a set of points like an elastic band and can be calculated using the `atlas.math.getConvexHull` method. All points contained in a cluster can be retrieved from the data source using the `getClusterLeaves` method.
::: zone pivot="programming-language-java-android"
map.events.add(OnFeatureClick { features: List<Feature?>? ->
::: zone-end
-The following image shows the above code display the area of all points within a clicked clustered.
+The following image shows the above code displays the area of all points within a clicked clustered.
![Map showing convex hull polygon of all points within a clicked cluster](media/clustering-point-data-android-sdk/android-cluster-leaves-convex-hull.gif) ## Aggregating data in clusters
-Often clusters are represented using a symbol with the number of points that are within the cluster. But, sometimes it's desirable to customize the style of clusters with additional metrics. With cluster properties, custom properties can be created and equal to a calculation based on the properties within each point with a cluster. Cluster properties can be defined in `clusterProperties` option of the `DataSource`.
+Often clusters are represented using a symbol with the number of points that are within the cluster. But, sometimes it's desirable to customize the style of clusters with more metrics. With cluster properties, custom properties can be created and equal to a calculation based on the properties within each point with a cluster. Cluster properties can be defined in `clusterProperties` option of the `DataSource`.
-The following code calculates a count based on the entity type property of each data point in a cluster. When a user clicks on a cluster, a popup shows with additional information about the cluster.
+The following code calculates a count based on the entity type property of each data point in a cluster. When a user selects on a cluster, a popup shows with additional information about the cluster.
::: zone pivot="programming-language-java-android"
map.events.add(OnFeatureClick { features: List<Feature> ->
The popup follows the steps outlined in the [display a popup](display-feature-information-android.md?#display-a-popup) document.
-The following image shows the above code display a popup with aggregated counts of each entity value type for all points in the clicked clustered point.
+The following image shows the above code displays a popup with aggregated counts of each entity value type for all points in the clicked clustered point.
![Map showing popup of aggregated counts of entity types of all points in a cluster](media/clustering-point-data-android-sdk/android-cluster-aggregates.gif)
azure-maps Clustering Point Data Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/clustering-point-data-ios-sdk.md
Title: Clustering point data in the iOS SDK description: Learn how to cluster point data on maps. See how to use the Azure Maps iOS SDK to cluster data, react to cluster mouse events, and display cluster aggregates.--++ Last updated 11/18/2021
# Clustering point data in the iOS SDK (Preview)
-When visualizing many data points on the map, data points may overlap over each other. The overlap may cause the map may become unreadable and difficult to use. Clustering point data is the process of combining point data that are near each other and representing them on the map as a single clustered data point. As the user zooms into the map, the clusters break apart into their individual data points. When you work with large number of data points, use the clustering processes to improve your user experience.
+When displaying many data points on the map, data points may overlap over each other. The overlap may cause the map may become unreadable and difficult to use. Clustering point data is the process of combining point data that are near each other and representing them on the map as a single clustered data point. As the user zooms into the map, the clusters break apart into their individual data points. When you work with large number of data points, use the clustering processes to improve your user experience.
[Internet of Things Show - Clustering point data in Azure Maps](/shows/Internet-of-Things-Show/Clustering-point-data-in-Azure-Maps/player?format=ny)
Be sure to complete the steps in the [Quickstart: Create an iOS app](quick-ios-a
## Enabling clustering on a data source
-Enable clustering in the `DataSource` class by setting the `cluster` option to `true`. Set `clusterRadius` to select nearby data points and combines them into a cluster. The value of `clusterRadius` is in points. Use `clusterMaxZoom` to specify a zoom level at which to disable the clustering logic. Here is an example of how to enable clustering in a data source.
+Enable clustering in the `DataSource` class by setting the `cluster` option to `true`. Set `clusterRadius` to select nearby data points and combines them into a cluster. The value of `clusterRadius` is in points. Use `clusterMaxZoom` to specify a zoom level at which to disable the clustering logic. Here's an example of how to enable clustering in a data source.
```swift // Create a data source and enable clustering.
The `DataSource` class provides the following methods related to clustering as w
| Method | Return type | Description | |--|-|-|
-| `children(of cluster: Feature)` | `[Feature]` | Retrieves the children of the given cluster on the next zoom level. These children may be a combination of features and subclusters. The subclusters will be features with properties matching ClusteredProperties. |
-| `zoomLevel(forExpanding cluster: Feature)` | `Double` | Calculates a zoom level at which the cluster will start expanding or break apart. |
+| `children(of cluster: Feature)` | `[Feature]` | Retrieves the children of the given cluster on the next zoom level. These children may be a combination of features and subclusters. The subclusters become features with properties matching ClusteredProperties. |
+| `zoomLevel(forExpanding cluster: Feature)` | `Double` | Calculates a zoom level at which the cluster starts expanding or break apart. |
| `leaves(of cluster: Feature, offset: UInt, limit: UInt)` | `[Feature]` | Retrieves all points in a cluster. Set the `limit` to return a subset of the points, and use the `offset` to page through the points. | ## Display clusters using a bubble layer
A bubble layer is a great way to render clustered points. Use expressions to sca
To display the size of the cluster on top of the bubble, use a symbol layer with text, and don't use an icon.
-The following code displays clustered points using a bubble layer, and the number of points in each cluster using a symbol layer. A second symbol layer is used to display individual points that are not within a cluster.
+The following code displays clustered points using a bubble layer, and the number of points in each cluster using a symbol layer. A second symbol layer is used to display individual points that aren't within a cluster.
```swift // Create a data source and enable clustering.
The following image shows the above code display clustered point features in a b
## Display clusters using a symbol layer
-When visualizing data points, the symbol layer automatically hides symbols that overlap each other to ensure a cleaner user interface. This default behavior might be undesirable if you want to show the data points density on the map. However, these settings can be changed. To display all symbols, set the `iconAllowOverlap` option of the Symbol layer to `true`.
+When displaying data points, the symbol layer automatically hides symbols that overlap each other to ensure a cleaner user interface. This default behavior might be undesirable if you want to show the data points density on the map. However, these settings can be changed. To display all symbols, set the `iconAllowOverlap` option of the Symbol layer to `true`.
-Use clustering to show the data points density while keeping a clean user interface. The sample below shows you how to add custom symbols and represent clusters and individual data points using the symbol layer.
+Use clustering to show the data points density while keeping a clean user interface. The following sample shows you how to add custom symbols and represent clusters and individual data points using the symbol layer.
```swift // Load all the custom image icons into the map resources.
The following image shows the above code rendering clustered and unclustered poi
## Clustering and the heat map layer
-Heat maps are a great way to display the density of data on the map. This visualization method can handle a large number of data points on its own. If the data points are clustered and the cluster size is used as the weight of the heat map, then the heat map can handle even more data. To achieve this option, set the `heatmapWeight` option of the heat map layer to `NSExpression(forKeyPath: "point_count")`. When the cluster radius is small, the heat map will look nearly identical to a heat map using the unclustered data points, but it will perform much better. However, the smaller the cluster radius, the more accurate the heat map will be, but with fewer performance benefits.
+Heat maps are a great way to display the density of data on the map. This visualization method can handle a large number of data points on its own. If the data points are clustered and the cluster size is used as the weight of the heat map, then the heat map can handle even more data. To achieve this option, set the `heatmapWeight` option of the heat map layer to `NSExpression(forKeyPath: "point_count")`. When the cluster radius is small, the heat map looks nearly identical to a heat map using the unclustered data points, but it performs better. However, the smaller the cluster radius, the more accurate the heat map is, but with fewer performance benefits.
```swift // Create a data source and enable clustering.
map.layers.insertLayer(
) ```
-The following image shows the above code display a heat map that is optimized by using clustered point features and the cluster count as the weight in the heat map.
+The following image shows the above code displaying a heat map optimized by using clustered point features and the cluster count as the weight in the heat map.
:::image type="content" source="./media/ios-sdk/cluster-point-data-ios-sdk/ios-cluster-heat-map.gif" alt-text="Map of a heatmap optimized using clustered points as a weight."::: ## Tap events on clustered data points
-When tap events occur on a layer that contains clustered data points, the clustered data point return to the event as a GeoJSON point feature object. This point feature will have the following properties:
+When tap events occur on a layer that contains clustered data points, the clustered data point return to the event as a GeoJSON point feature object. This point feature has the following properties:
| Property name | Type | Description | ||||
func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
} ```
-The following image shows the above code display clustered points on a map that when tapped, zoom into the next zoom level that a cluster starts to break apart and expand.
+The following image shows the above code displaying clustered points on a map that when tapped, zoom into the next zoom level that a cluster starts to break apart and expand.
:::image type="content" source="./media/ios-sdk/cluster-point-data-ios-sdk/ios-cluster-expansion.gif" alt-text="Map of clustered features zooming in and breaking apart when tapped."::: ## Display cluster area
-The point data that a cluster represents is spread over an area. In this sample when a cluster is tapped, two main behaviors occur. First, the individual data points contained in the cluster will be used to calculate a convex hull. Then, the convex hull will be displayed on the map to show an area. A convex hull is a polygon that wraps a set of points like an elastic band and can be calculated using the `convexHull(from:)` method. All points contained in a cluster can be retrieved from the data source using the `leaves(of:offset:limit:)` method.
+The point data that a cluster represents is spread over an area. In this sample when a cluster is tapped, two main behaviors occur. First, the individual data points contained in the cluster used to calculate a convex hull. Then, the convex hull is displayed on the map to show an area. A convex hull is a polygon that wraps a set of points like an elastic band and can be calculated using the `convexHull(from:)` method. All points contained in a cluster can be retrieved from the data source using the `leaves(of:offset:limit:)` method.
```swift // Create a data source and enable clustering.
func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
} ```
-The following image shows the above code display the area of all points within a tapped cluster.
+The following image shows the above code displaying the area of all points within a tapped cluster.
:::image type="content" source="./media/ios-sdk/cluster-point-data-ios-sdk/ios-cluster-leaves-convex-hull.gif" alt-text="Map showing convex hull polygon of all points within a tapped cluster.":::
func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
The popup follows the steps outlined in the [display a popup](Display-feature-information-ios-sdk.md) document.
-The following image shows the above code display a popup with aggregated counts of each entity value type for all points in the tapped clustered point.
+The following image shows the above code displaying a popup with aggregated counts of each entity value type for all points in the tapped clustered point.
:::image type="content" source="./media/ios-sdk/cluster-point-data-ios-sdk/ios-cluster-aggregates.gif" alt-text="Map showing popup of aggregated counts of entity types of all points in a cluster.":::
azure-maps Create Data Source Android Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/create-data-source-android-sdk.md
Title: Create a data source for Android maps | Microsoft Azure Maps description: "Find out how to create a data source for a map. Learn about the data sources that the Azure Maps Android SDK uses: GeoJSON sources and vector tiles."--++ Last updated 2/26/2021
source.add(feature)
::: zone-end
-Alternatively the properties can be loaded into a JsonObject first then passed into the feature when creating it, as shown below.
+Alternatively the properties can be loaded into a JsonObject first then passed into the feature when creating it, as shown in the following sample code.
::: zone pivot="programming-language-java-android"
val featureCollection = FeatureCollection.fromFeatures(listOfFeatures)
### Serialize and deserialize GeoJSON
-The feature collection, feature, and geometry classes all have `fromJson()` and `toJson()` static methods, which help with serialization. The formatted valid JSON String passed through the `fromJson()` method will create the geometry object. This `fromJson()` method also means you can use Gson or other serialization/deserialization strategies. The following code shows how to take a stringified GeoJSON feature and deserialize it into the Feature class, then serialize it back into a GeoJSON string.
+The feature collection, feature, and geometry classes all have `fromJson()` and `toJson()` static methods, which help with serialization. The formatted valid JSON String passed through the `fromJson()` method creates the geometry object. This `fromJson()` method also means you can use Gson or other serialization/deserialization strategies. The following code shows how to take a stringified GeoJSON feature and deserialize it into the Feature class, then serialize it back into a GeoJSON string.
::: zone pivot="programming-language-java-android"
val featureString = feature.toJson()
Most GeoJSON files contain a FeatureCollection. Read GeoJSON files as strings and used the `FeatureCollection.fromJson` method to deserialize it.
-The `DataSource` class has a built in method called `importDataFromUrl` that can load in GeoJSON files using a URL to a file on the web or in the asset folder. This method **must** be called before the data source is added to the map.
+The `DataSource` class has a built-in method called `importDataFromUrl` that can load in GeoJSON files using a URL to a file on the web or in the asset folder. This method **must** be called before the data source is added to the map.
zone_pivot_groups: azure-maps-android
map.sources.add(source)
::: zone-end
-The `importDataFromUrl` method provides an easily way to load a GeoJSON feed into a data source but provides limited control on how the data is loaded and what happens after its been loaded. The following code is a reusable class for importing data from the web or assets folder and returning it to the UI thread via a callback function. In the callback you can then add additional post load logic to process the data, add it to the map, calculate its bounding box, and update the maps camera.
+The `importDataFromUrl` method provides an easy way to load a GeoJSON feed into a data source but provides limited control on how the data is loaded and what happens after it's been loaded. The following code is a reusable class for importing data from the web or assets folder and returning it to the UI thread via a callback function. Next, add additional post load logic in the callback to process the data, add it to the map, calculate its bounding box, and update the maps camera.
::: zone pivot="programming-language-java-android"
class Utils {
::: zone-end
-The code below shows how to use this utility to import GeoJSON data as a string and return it to the UI thread via a callback. In the callback, the string data can be serialized into a GeoJSON Feature collection and added to the data source. Optionally, update the maps camera to focus in on the data.
+The following code demonstrates how to use this utility to import GeoJSON data as a string and return it to the UI thread via a callback. In the callback, the string data can be serialized into a GeoJSON Feature collection and added to the data source. Optionally, update the maps camera to focus in on the data.
::: zone pivot="programming-language-java-android"
Utils.importData("SamplePoiDataSet.json", this) {
### Update a feature
-The `DataSource` class makes its easy to add and remove features. Updating the geometry or properties of a feature requires replacing the feature in the data source. There are two methods that can be used to update a feature(s):
+The `DataSource` class makes it easy to add and remove features. Updating the geometry or properties of a feature requires replacing the feature in the data source. There are two methods that can be used to update a feature(s):
1. Create the new feature(s) with the desired updates and replace all features in the data source using the `setShapes` method. This method works well when you want to update all features in a data source.
map.sources.add(source)
::: zone-end
-There are additional rendering layers that don't connect to these data sources, but they directly load the data for rendering.
+There are more rendering layers that don't connect to these data sources, but they directly load the data for rendering.
- [Tile layer](how-to-add-tile-layer-android-map.md) - superimposes a raster tile layer on top of the map.
Multiple layers can be connected to a single data source. There are many differe
In most mapping platforms, you would need a polygon object, a line object, and a pin for each position in the polygon. As the polygon is modified, you would need to manually update the line and pins, which can quickly become complex.
-With Azure Maps, all you need is a single polygon in a data source as shown in the code below.
+With Azure Maps, all you need is a single polygon in a data source as shown in the following code.
::: zone pivot="programming-language-java-android"
azure-maps Create Data Source Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/create-data-source-ios-sdk.md
Title: Create a data source for iOS maps | Microsoft Azure Maps description: "Find out how to create a data source for a map. Learn about the data sources that the Azure Maps iOS SDK uses: GeoJSON sources and vector tiles."--++ Last updated 10/22/2021
azure-maps Data Driven Style Expressions Android Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/data-driven-style-expressions-android-sdk.md
Title: Data-driven style Expressions in Android maps | Microsoft Azure Maps description: Learn about data-driven style expressions. See how to use these expressions in the Azure Maps Android SDK to adjust styles in maps.--++ Last updated 2/26/2021
Data expressions provide access to the property data in a feature.
| `length(string | Expression)` | number | Gets the length of a string or an array. | | `properties()`| value | Gets the feature properties object. |
-The following Web SDK style expressions are not supported in the Android SDK:
+The following Web SDK style expressions aren't supported in the Android SDK:
- index-of - slice
val layer = BubbleLayer(source,
::: zone-end
-The above example will work fine, if all the point features have the `zoneColor` property. If they don't, the color will likely fall back to "black". To modify the fallback color, use a `switchCase` expression in combination with the `has` expression to check if the property exists. If the property doesn't exist, return a fallback color.
+The above example works fine, if all the point features have the `zoneColor` property. If they don't, the color will likely fall back to "black". To modify the fallback color, use a `switchCase` expression in combination with the `has` expression to check if the property exists. If the property doesn't exist, return a fallback color.
::: zone pivot="programming-language-java-android"
val layer = BubbleLayer(source,
::: zone-end
-Bubble and symbol layers will render the coordinates of all shapes in a data source, by default. This behavior can highlight the vertices of a polygon or a line. The `filter` option of the layer can be used to limit the geometry type of the features it renders, by using a `geometryType` expression within a boolean expression. The following example limits a bubble layer so that only `Point` features are rendered.
+Bubble and symbol layers render the coordinates of all shapes in a data source, by default. This behavior can highlight the vertices of a polygon or a line. The `filter` option of the layer can be used to limit the geometry type of the features it renders, by using a `geometryType` expression within a boolean expression. The following example limits a bubble layer so that only `Point` features are rendered.
::: zone pivot="programming-language-java-android"
val layer = BubbleLayer(source,
::: zone-end
-Similarly, the outline of Polygons will render in line layers. To disable this behavior in a line layer, add a filter that only allows `LineString` and `MultiLineString` features.
+Similarly, the outline of Polygons render in line layers. To disable this behavior in a line layer, add a filter that only allows `LineString` and `MultiLineString` features.
-Here are some additional examples of how to use data expressions:
+Here are more examples of how to use data expressions:
```java //Get item [2] from an array "properties.abcArray[1]" = "c"
Math expressions provide mathematical operators to perform data-driven calculati
Boolean expressions provide a set of boolean operators expressions for evaluating boolean comparisons.
-When comparing values, the comparison is strictly typed. Values of different types are always considered unequal. Cases where the types are known to be different at parse time are considered invalid and will produce a parse error.
+When comparing values, the comparison is strictly typed. Values of different types are always considered unequal. Cases where the types are known to be different at parse time are considered invalid and produces a parse error.
| Expression | Return type | Description | ||-|-|
When comparing values, the comparison is strictly typed. Values of different typ
| `gte(Expression compareOne, Expression | boolean | number | string compareTwo)` \| `gte(Expression compareOne, Expression | string compareTwo, Expression collator)` | boolean | Returns `true` if the first input is greater than or equal to the second, `false` otherwise. The arguments are required to be either both strings or both numbers. | | `lt(Expression compareOne, Expression | boolean | number | string compareTwo)` \| `lt(Expression compareOne, Expression | string compareTwo, Expression collator)` | boolean | Returns `true` if the first input is strictly less than the second, `false` otherwise. The arguments are required to be either both strings or both numbers. | | `lte(Expression compareOne, Expression | boolean | number | string compareTwo)` \| `lte(Expression compareOne, Expression | string compareTwo, Expression collator)` | boolean | Returns `true` if the first input is less than or equal to the second, `false` otherwise. The arguments are required to be either both strings or both numbers. |
-| `neq(Expression compareOne, Expression | boolean | number | string compareTwo)` \| `neq(Expression compareOne, Expression | string compareTwo, Expression collator)` | boolean | Returns `true` if the input values are not equal, `false` otherwise. |
+| `neq(Expression compareOne, Expression | boolean | number | string compareTwo)` \| `neq(Expression compareOne, Expression | string compareTwo, Expression collator)` | boolean | Returns `true` if the input values aren't equal, `false` otherwise. |
| `not(Expression | boolean)` | boolean | Logical negation. Returns `true` if the input is `false`, and `false` if the input is `true`. | ## Conditional expressions
switchCase(
**Example**
-The following example steps through different boolean conditions until it finds one that evaluates to `true`, and then returns that associated value. If no boolean condition evaluates to `true`, a fallback value will be returned.
+The following example steps through different boolean conditions until it finds one that evaluates to `true`, and then returns that associated value. If no boolean condition evaluates to `true`, a fallback value is returned.
::: zone pivot="programming-language-java-android"
val layer = BubbleLayer(source,
### Match expression
-A `match` expression is a type of conditional expression that provides switch-statement like logic. The input can be any expression such as `get( "entityType")` that returns a string or a number. Each stop must have a label that is either a single literal value or an array of literal values, whose values must be all strings or all numbers. The input matches if any of the values in the array match. Each stop label must be unique. If the input type doesn't match the type of the labels, the result will be the default fallback value.
+A `match` expression is a type of conditional expression that provides switch-statement like logic. The input can be any expression such as `get( "entityType")` that returns a string or a number. Each stop must have a label that is either a single literal value or an array of literal values, whose values must be all strings or all numbers. The input matches if any of the values in the array match. Each stop label must be unique. If the input type doesn't match the type of the labels, the result is the default fallback value.
The following pseudocode defines the structure of the `match` expression.
val layer = BubbleLayer(source,
::: zone-end
-The following example uses an array to list a set of labels that should all return the same value. This approach is much more efficient than listing each label individually. In this case, if the `entityType` property is "restaurant" or "grocery_store", the color "red" will be returned.
+The following example uses an array to list a set of labels that should all return the same value. This approach is much more efficient than listing each label individually. In this case, if the `entityType` property is "restaurant" or "grocery_store", the color "red" is returned.
::: zone pivot="programming-language-java-android"
coalesce(Expression... input)
**Example**
-The following example uses a `coalesce` expression to set the `textField` option of a symbol layer. If the `title` property is missing from the feature or set to `null`, the expression will then try looking for the `subTitle` property, if its missing or `null`, it will then fall back to an empty string.
+The following example uses a `coalesce` expression to set the `textField` option of a symbol layer. If the `title` property is missing from the feature or set to `null`, the expression tries looking for the `subTitle` property, if it's missing or `null`, it will then fall back to an empty string.
::: zone pivot="programming-language-java-android"
Type expressions provide tools for testing and converting different data types l
||-|-| | `array(Expression)` | Object[] | Asserts that the input is an array. | | `bool(Expression)` | boolean | Asserts that the input value is a boolean. |
-| `collator(boolean caseSensitive, boolean diacriticSensitive)` \| `collator(boolean caseSensitive, boolean diacriticSensitive, java.util.Locale locale)` \| `collator(Expression caseSensitive, Expression diacriticSensitive)` \| `collator(Expression caseSensitive, Expression diacriticSensitive, Expression locale)` | collator | Returns a collator for use in locale-dependent comparison operations. The case-sensitive and diacritic-sensitive options default to false. The locale argument specifies the IETF language tag of the locale to use. If none is provided, the default locale is used. If the requested locale is not available, the collator will use a system-defined fallback locale. Use resolved-locale to test the results of locale fallback behavior. |
+| `collator(boolean caseSensitive, boolean diacriticSensitive)` \| `collator(boolean caseSensitive, boolean diacriticSensitive, java.util.Locale locale)` \| `collator(Expression caseSensitive, Expression diacriticSensitive)` \| `collator(Expression caseSensitive, Expression diacriticSensitive, Expression locale)` | collator | Returns a collator for use in locale-dependent comparison operations. The case-sensitive and diacritic-sensitive options default to false. The locale argument specifies the IETF language tag of the locale to use. If none is provided, the default locale is used. If the requested locale isn't available, the collator uses a system-defined fallback locale. Use resolved-locale to test the results of locale fallback behavior. |
| `literal(boolean \| number \| string \| Object \| Object[])` | boolean \| number \| string \| Object \| Object[] | Returns a literal array or object value. Use this expression to prevent an array or object from being evaluated as an expression. This is necessary when an array or object needs to be returned by an expression. | | `number(Expression)` | number | Asserts that the input value is a number. | | `object(Expression)` | Object | Asserts that the input value is an object. |
Color expressions make it easier to create and manipulate color values.
**Example**
-The following example creates an RGB color value that has a *red* value of `255`, and *green* and *blue* values that are calculated by multiplying `2.5` by the value of the `temperature` property. As the temperature changes, the color will change to different shades of *red*.
+The following example creates an RGB color value that has a *red* value of `255`, and *green* and *blue* values that are calculated by multiplying `2.5` by the value of the `temperature` property. As the temperature changes, the color changes to different shades of *red*.
::: zone pivot="programming-language-java-android"
val layer = BubbleLayer(source,
::: zone-end
-If all the color parameters are numbers, there is no need to wrap them with the `literal` expression. For example:
+If all the color parameters are numbers, there's no need to wrap them with the `literal` expression. For example:
::: zone pivot="programming-language-java-android"
val layer = SymbolLayer(source,
::: zone-end
-The above expression renders a pin on the map with the text "64┬░F" overlaid on top of it as shown in the image below.
+The above expression renders a pin on the map with the text "64┬░F" overlaid on top of it as shown in the following image.
![String operator expression example](media/how-to-expressions/string-operator-expression.png)
There are three types of interpolation methods that can be used in an `interpola
The `stop` expression has the format `stop(stop, value)`.
-Here is an example of what these different types of interpolations look like.
+Here's an example of what these different types of interpolations look like.
| Linear | Exponential | Cubic Bezier | ||-|--|
Here is an example of what these different types of interpolations look like.
**Example**
-The following example uses a `linear interpolate` expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, "blue" will be returned. If it's between 60 and less than 70, yellow will be returned. If it's between 70 and less than 80, "orange" (`#FFA500`) will be returned. If it's 80 or greater, "red" will be returned.
+The following example uses a `linear interpolate` expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, "blue" is returned. If it's between 60 and less than 70, yellow is returned. If it's between 70 and less than 80, "orange" (`#FFA500`) is returned. If it's 80 or greater, "red" is returned.
::: zone pivot="programming-language-java-android"
Step expressions return the output value of the stop just before the input value
**Example**
-The following example uses a `step` expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, "blue" will be returned. If it's between 60 and less than 70, "yellow" will be returned. If it's between 70 and less than 80, "orange" will be returned. If it's 80 or greater, "red" will be returned.
+The following example uses a `step` expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, "blue" is returned. If it's between 60 and less than 70, "yellow" is returned. If it's between 70 and less than 80, "orange" is returned. If it's 80 or greater, "red" is returned.
::: zone pivot="programming-language-java-android"
The following format options available are:
| Expression | Description | ||-|
-| `formatFontScale(number)` \| `formatFontScale(Expression)` | Specifies the scaling factor for the font size. If specified, this value will override the `textSize` property for the individual string. |
+| `formatFontScale(number)` \| `formatFontScale(Expression)` | Specifies the scaling factor for the font size. If specified, this value overrides the `textSize` property for the individual string. |
| `formatTextFont(string[])` \| `formatTextFont(Expression)` | Specifies a color to apply to a text when rendering. | **Example**
val layer = SymbolLayer(source,
::: zone-end
-This layer will render the point feature as shown in the image below:
+This layer renders the point feature as shown in the following image:
![Image of Point feature with formatted text field](media/how-to-expressions/text-field-format-expression.png)
A `zoom` expression is used to retrieve the current zoom level of the map at ren
**Example**
-By default, the radii of data points rendered in the heat map layer have a fixed pixel radius for all zoom levels. As the map is zoomed, the data aggregates together and the heat map layer looks different. A `zoom` expression can be used to scale the radius for each zoom level such that each data point covers the same physical area of the map. It will make the heat map layer look more static and consistent. Each zoom level of the map has twice as many pixels vertically and horizontally as the previous zoom level. Scaling the radius, such that it doubles with each zoom level, will create a heat map that looks consistent on all zoom levels. It can be accomplished using the `zoom` expression with a `base 2 exponential interpolation` expression, with the pixel radius set for the minimum zoom level and a scaled radius for the maximum zoom level calculated as `2 * Math.pow(2, minZoom - maxZoom)` as shown below.
+By default, the radii of data points rendered in the heat map layer have a fixed pixel radius for all zoom levels. As the map is zoomed, the data aggregates together and the heat map layer looks different. A `zoom` expression can be used to scale the radius for each zoom level such that each data point covers the same physical area of the map. It makes the heat map layer look more static and consistent. Each zoom level of the map has twice as many pixels vertically and horizontally as the previous zoom level. Scaling the radius, such that it doubles with each zoom level, creates a heat map that looks consistent on all zoom levels. It can be accomplished using the `zoom` expression with a `base 2 exponential interpolation` expression, with the pixel radius set for the minimum zoom level and a scaled radius for the maximum zoom level calculated as `2 * Math.pow(2, minZoom - maxZoom)` as shown below.
::: zone pivot="programming-language-java-android"
val layer = HeatMapLayer(source,
## Variable binding expressions
-Variable binding expressions store the results of a calculation in a variable. So, that the calculation results can be referenced elsewhere in an expression multiple times. It is a useful optimization for expressions that involve many calculations.
+Variable binding expressions store the results of a calculation in a variable. So, that the calculation results can be referenced elsewhere in an expression multiple times. It's a useful optimization for expressions that involve many calculations.
| Expression | Return type | Description | |--||--|
azure-maps Data Driven Style Expressions Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/data-driven-style-expressions-ios-sdk.md
Title: Data-driven style expressions in iOS maps description: Learn about data-driven style expressions. See how to use these expressions in the Azure Maps iOS SDK to adjust styles in maps.--++ Last updated 11/18/2021
The following comparison operators are supported:
To test whether a feature has or lacks a specific property, compare the attribute to `NULL` or `NIL`. Predicates created using the `NSPredicate(value:)` initializer are also supported. String
-operators and custom operators are not supported.
+operators and custom operators aren't supported.
The following compound operators are supported:
aggregate operators that are used in the predicate:
Other comparison predicate options are unsupported, namely `l` (for locale sensitivity) and `n` (for normalization). A comparison is
-locale-sensitive as long as it is case- or diacritic-insensitive. Comparison
-predicate options are not supported in conjunction with comparison modifiers
+locale-sensitive as long as it's case- or diacritic-insensitive. Comparison
+predicate options aren't supported with comparison modifiers
like `ALL` and `ANY`. ### Operands
Operands in predicates can be [variables](#variables), [key paths](#key-paths),
or almost anything else that can appear [inside an expression](#using-expressions-to-configure-layer-options).
-Automatic type casting is not performed. Therefore, a feature only matches a
+Automatic type casting isn't performed. Therefore, a feature only matches a
predicate if its value for the property in question is of the same type as the value specified in the predicate. Use the `CAST()` operator to convert a key path or variable into a matching type:
in Apple developer documentation.
### Operands examples
-Bubble and symbol layers will render the coordinates of all geometries in a data source, by default. This behavior can highlight the vertices of a polygon or a line. The `filter` option of the layer can be used to limit the geometry type of the features it renders, by using `NSExpression.geometryTypeAZMVariable` within a predicate. The following example limits a bubble layer so that only `Point` features are rendered.
+Bubble and symbol layers render the coordinates of all geometries in a data source, by default. This behavior can highlight the vertices of a polygon or a line. The `filter` option of the layer can be used to limit the geometry type of the features it renders, by using `NSExpression.geometryTypeAZMVariable` within a predicate. The following example limits a bubble layer so that only `Point` features are rendered.
```swift let layer = BubbleLayer(source: source, options: [
Conditionals are supported via the built-in `NSExpression(forAZMConditional:true
#### Conditionals example
-The following example steps through different predicates until it finds one that evaluates to `true`, and then returns its true expression. If no predicates evaluates to `true`, the last false expression will be returned.
+The following example steps through different predicates until it finds one that evaluates to `true`, and then returns its true expression. If no predicates evaluate to `true`, the last false expression is returned.
```swift let layer = BubbleLayer(
let layer = BubbleLayer(
### Aggregates
-Aggregate expressions can contain arrays of expressions. In some cases, it is possible to use the array itself instead of wrapping the array in an aggregate expression.
+Aggregate expressions can contain arrays of expressions. In some cases, it's possible to use the array itself instead of wrapping the array in an aggregate expression.
### Variables
-The following variables are defined by this SDK for use with layer options.
+Th iOS SDK defines the following variables for use with layer options.
#### Feature identifier
_Format string syntax_: `$zoomLevel`
##### Zoom example
-By default, the radii of data points rendered in the heat map layer have a fixed point radius for all zoom levels. As the map is zoomed, the data aggregates together and the heat map layer looks different. A `zoom` expression can be used to scale the radius for each zoom level such that each data point covers the same physical area of the map. It will make the heat map layer look more static and consistent. Each zoom level of the map has twice as many points vertically and horizontally as the previous zoom level. Scaling the radius, such that it doubles with each zoom level, will create a heat map that looks consistent on all zoom levels. It can be accomplished using the `zoom` expression with a `base 2 exponential interpolation` expression, with the point radius set for the minimum zoom level and a scaled radius for the maximum zoom level calculated as `pow(2, maxZoom - minZoom) * radius` as shown below.
+By default, the radii of data points rendered in the heat map layer have a fixed point radius for all zoom levels. As the map is zoomed, the data aggregates together and the heat map layer looks different. A `zoom` expression can be used to scale the radius for each zoom level such that each data point covers the same physical area of the map. It makes the heat map layer look more static and consistent. Each zoom level of the map has twice as many points vertically and horizontally as the previous zoom level. Scaling the radius, such that it doubles with each zoom level, creates a heat map that looks consistent on all zoom levels. It can be accomplished using the `zoom` expression with a `base 2 exponential interpolation` expression, with the point radius set for the minimum zoom level and a scaled radius for the maximum zoom level calculated as `pow(2, maxZoom - minZoom) * radius` as shown below.
```swift let layer = HeatMapLayer(
The following section shows specific to AzureMaps methods that extend the `NSExp
#### Match expression
-A match expression is a type of conditional expression that provides switch-statement like logic. The input can be any expression such as `NSExpression(forKeyPath: "entityType")` that returns a string or a number. The matched expressions is a dictionary, which should have keys as expressions that evaluate either to single string or number or to an array of all strings or all numbers and values as any expressions. If the input expression type doesn't match the type of the keys, the result will be the default fallback value.
+A match expression is a type of conditional expression that provides switch-statement like logic. The input can be any expression such as `NSExpression(forKeyPath: "entityType")` that returns a string or a number. The matched expression is a dictionary, which should have keys as expressions that evaluate either to single string or number or to an array of all strings or all numbers and values as any expressions. If the input expression type doesn't match the type of the keys, the result is the default fallback value.
##### Match expression examples
let layer = BubbleLayer(
) ```
-The following example uses an expression evaluating to string array to specify a set of labels that should all return the same value. This approach is much more efficient than listing each label individually. In this case, if the `entityType` property is `"restaurant"` or `"grocery_store"`, red color will be returned.
+The following example uses an expression evaluating to string array to specify a set of labels that should all return the same value. This approach is much more efficient than listing each label individually. In this case, if the `entityType` property is `"restaurant"` or `"grocery_store"`, red color is returned.
```swift let layer = BubbleLayer(
A coalesce expression steps through a set of expressions until the first non-nul
##### Coalesce expression example
-The following example uses a coalesce expression to set the `textField` option of a symbol layer. If the `title` property is missing from the feature or set to `nil`, the expression will then try looking for the `subTitle` property, if its missing or `nil`, it will then fall back to an empty string.
+The following example uses a coalesce expression to set the `textField` option of a symbol layer. If the `title` property is missing from the feature or set to `nil`, the expression looks for the `subTitle` property, if it's missing or `nil`, it returns an empty string.
```swift let layer = SymbolLayer(
let layer = SymbolLayer(
#### Join expression
-Join multiple strings together. Each value must be a string or a number.
+Joins multiple strings together. Each value must be a string or a number.
##### Join expression example
let layer = SymbolLayer(
) ```
-The above expression renders a pin on the map with the text `"64┬░F"` overlaid on top of it as shown in the image below.
+The above expression renders a pin on the map with the text `"64┬░F"` overlaid on top of it as shown in the following image.
:::image type="content" source="./media/ios-sdk/data-driven-style-expressions-ios/join-expression.png" alt-text="Join expression example":::
There are three types of interpolation methods that can be used in an interpolat
| `ExpressionInterpolationMode.exponential` | Interpolates exponentially between the stops. A base is specified and controls the rate at which the output increases. Higher values make the output increase more towards the high end of the range. A base value close to 1 produces an output that increases more linearly.| An expression that evaluates to a number, specifying the base of the exponential interpolation. | | `ExpressionInterpolationMode.cubicBezier` | Interpolates using a [cubic Bezier curve](https://developer.mozilla.org/docs/Web/CSS/timing-function) defined by the given control points. | An array or aggregate expression containing four expressions, each evaluating to a number. The four numbers are control points for the cubic Bézier curve. |
-Here is an example of what these different types of interpolations look like.
+Here's an example of what these different types of interpolations look like.
| Linear | Exponential | Cubic Bezier | ||-|--|
Here is an example of what these different types of interpolations look like.
###### Interpolation expression example
-The following example uses a linear interpolation expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, blue color will be returned. If it's between 60 and less than 70, yellow will be returned. If it's between 70 and less than 80, orange will be returned. If it's 80 or greater, red will be returned.
+The following example uses a linear interpolation expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, blue color is returned. If it's between 60 and less than 70, yellow is returned. If it's between 70 and less than 80, orange is returned. If it's 80 or greater, red is returned.
```swift let layer = BubbleLayer(
Step expressions return the output value of the stop just before the input value
###### Step expression example
-The following example uses a step expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, blue will be returned. If it's between 60 and less than 70, yellow will be returned. If it's between 70 and less than 80, orange will be returned. If it's 80 or greater, red will be returned.
+The following example uses a step expression to set the `bubbleColor` property of a bubble layer based on the `temperature` property of the point feature. If the `temperature` value is less than 60, blue is returned. If it's between 60 and less than 70, yellow is returned. If it's between 70 and less than 80, orange is returned. If it's 80 or greater, red is returned.
```swift let layer = BubbleLayer(
azure-maps Display Feature Information Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/display-feature-information-android.md
Title: Display feature information in Android maps | Microsoft Azure Maps description: Learn how to display information when users interact with map features. Use the Azure Maps Android SDK to display toast messages and other types of messages.--++ Last updated 2/26/2021
In addition to toast messages, There are many other ways to present the metadata
## Display a popup
-The Azure Maps Android SDK provides a `Popup` class that makes it easy to create UI annotation elements that are anchored to a position on the map. For popups, you have to pass in a view with a relative layout into the `content` option of the popup. Here is a simple layout example that displays dark text on top of a while background.
+The Azure Maps Android SDK provides a `Popup` class that makes it easy to create UI annotation elements that are anchored to a position on the map. For popups, you have to pass in a view with a relative layout into the `content` option of the popup. Here's a simple layout example that displays dark text on top of a while background.
```xml <?xml version="1.0" encoding="utf-8"?>
azure-maps Display Feature Information Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/display-feature-information-ios-sdk.md
Title: Display feature information in iOS maps | Microsoft Azure Maps description: Learn how to display information when users interact with map features. Use the Azure Maps iOS SDK to display toast messages and other types of messages.--++ Last updated 11/23/2021
source.add(feature: feature)
See the [Create a data source](create-data-source-ios-sdk.md) documentation for ways to create and add data to the map.
-When a user interacts with a feature on the map, events can be used to react to those actions. A common scenario is to display a message made of the metadata properties of a feature the user interacted with. The `azureMap(_:didTapOn:)` event is the main event used to detect when the user tapped a feature on the map. There's also an `azureMap(_:didLongPressOn:)` event. When adding a delegate to the map, it can be limited to a single layer by passing in the ID of a layer to limit it to. If no layer ID is passed in, tapping any feature on the map, regardless of which layer it is in, would fire this event. The following code creates a symbol layer to render point data on the map, then adds a delegate, limited to this symbol layer, which handle `azureMap(_:didTapOn:)` event.
+When a user interacts with a feature on the map, events can be used to react to those actions. A common scenario is to display a message made of the metadata properties of a feature the user interacted with. The `azureMap(_:didTapOn:)` event is the main event used to detect when the user tapped a feature on the map. There's also an `azureMap(_:didLongPressOn:)` event. When adding a delegate to the map, it can be limited to a single layer by passing in the ID of a layer to limit it to. If no layer ID is passed in, tapping any feature on the map, regardless of which layer it is in, would fire this event. The following code creates a symbol layer to render point data on the map, then adds a delegate, limited to this symbol layer, which handles the `azureMap(_:didTapOn:)` event.
```swift // Create a symbol and add it to the map.
In addition to alerts, there are many other ways to present the metadata propert
## Display a popup
-The Azure Maps iOS SDK provides a `Popup` class that makes it easy to create UI annotation elements that are anchored to a position on the map. For popups, you have to pass in a self-sizing view into the `content` option of the popup. Here is a simple view example that displays dark text on top of a white background.
+The Azure Maps iOS SDK provides a `Popup` class that makes it easy to create UI annotation elements that are anchored to a position on the map. For popups, you have to pass in a self-sizing view into the `content` option of the popup. Here's a simple view example that displays dark text on top of a white background.
```swift class PopupTextView: UIView {
azure-maps Drawing Tools Events https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/drawing-tools-events.md
Title: Drawing tool events | Microsoft Azure Maps description: In this article you'll learn, how to add a drawing toolbar to a map using Microsoft Azure Maps Web SDK--++ Last updated 12/05/2019
# Drawing tool events
-When using drawing tools on a map, it's useful to react to certain events as the user draws on the map. This table lists all of the events supported by the `DrawingManager` class.
+When using drawing tools on a map, it's useful to react to certain events as the user draws on the map. This table lists all events supported by the `DrawingManager` class.
| Event | Description | |-|-|
azure-maps How To Add Shapes To Android Map https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-add-shapes-to-android-map.md
Title: Add a polygon layer to Android maps | Microsoft Azure Maps description: Learn how to add polygons or circles to maps. See how to use the Azure Maps Android SDK to customize geometric shapes and make them easy to update and maintain.--++ Last updated 2/26/2021
For this sample, the following image was loaded into the drawable folder of the
|:--:| | fill-checker-red.png |
-The following is a screenshot of the above code rendering a polygon with a fill pattern on the map.
+The following image is a screenshot of the above code rendering a polygon with a fill pattern on the map.
![Polygon with a fill pattern rendered on map](media/how-to-add-shapes-to-android-map/android-polygon-pattern.jpg)
azure-maps How To Add Symbol To Android Map https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-add-symbol-to-android-map.md
Title: Add a symbol layer to Android maps | Microsoft Azure Maps description: Learn how to add a marker to a map. See an example that uses the Azure Maps Android SDK to add a symbol layer that contains point-based data from a data source.--++ Last updated 2/26/2021
Be sure to complete the steps in the [Quickstart: Create an Android app](quick-a
Before you can add a symbol layer to the map, you need to take a couple of steps. First, create a data source, and add it to the map. Create a symbol layer. Then, pass in the data source to the symbol layer, to retrieve the data from the data source. Finally, add data into the data source, so that there's something to be rendered.
-The code below demonstrates what should be added to the map after it has loaded. This sample renders a single point on the map using a symbol layer.
+The following code demonstrates what should be added to the map after it has loaded. This sample renders a single point on the map using a symbol layer.
::: zone pivot="programming-language-java-android"
val layer = SymbolLayer(source,
::: zone-end
-The table below lists all of the built-in icon image names available. All of these markers pull its colors from color resources that you can override. In addition to overriding the main fill color of this marker. However, overriding the color of one of these markers would apply to all layers that use that icon image.
+The table below lists all of the built-in icon image names available. These markers pull their colors from color resources that can be overridden. However, overriding the color of one of these markers would apply to all layers that use that icon image.
| Icon image name | Color resource name | |--||
azure-maps How To Add Tile Layer Android Map https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-add-tile-layer-android-map.md
Title: Add a tile layer to Android maps | Microsoft Azure Maps description: Learn how to add a tile layer to a map. See an example that uses the Azure Maps Android SDK to add a weather radar overlay to a map.--++ Last updated 3/25/2021
zone_pivot_groups: azure-maps-android
This article shows you how to render a tile layer on a map using the Azure Maps Android SDK. Tile layers allow you to superimpose images on top of Azure Maps base map tiles. More information on Azure Maps tiling system can be found in the [Zoom levels and tile grid](zoom-levels-and-tile-grid.md) documentation.
-A Tile layer loads in tiles from a server. These images can be pre-rendered and stored like any other image on a server, using a naming convention that the tile layer understands. Or, these images can be rendered with a dynamic service that generates the images near real time. There are three different tile service naming conventions supported by Azure Maps TileLayer class:
+A Tile layer loads in tiles from a server. These images can be prerendered and stored like any other image on a server, using a naming convention that the tile layer understands. Or, these images can be rendered with a dynamic service that generates the images near real time. There are three different tile service naming conventions supported by Azure Maps TileLayer class:
* X, Y, Zoom notation - Based on the zoom level, x is the column and y is the row position of the tile in the tile grid. * Quadkey notation - Combination x, y, zoom information into a single string value that is a unique identifier for a tile.
To complete the process in this article, you need to install [Azure Maps Android
## Add a tile layer to the map
-This sample shows how to create a tile layer that points to a set of tiles. This sample uses the "x, y, zoom" tiling system. The source of this tile layer is the [OpenSeaMap project](https://openseamap.org/index.php), which contains crowd sourced nautical charts. Often when viewing tile layers it is desirable to be able to clearly see the labels of cities on the map. This behavior can be achieved by inserting the tile layer below the map label layers.
+This sample shows how to create a tile layer that points to a set of tiles. This sample uses the "x, y, zoom" tiling system. The source of this tile layer is the [OpenSeaMap project](https://openseamap.org/index.php), which contains crowd sourced nautical charts. Often when viewing tile layers it's desirable to be able to clearly see the labels of cities on the map. This behavior can be achieved by inserting the tile layer below the map label layers.
::: zone pivot="programming-language-java-android"
The following screenshot shows the above code displaying a tile layer of nautica
## Add an OGC web-mapping service (WMS)
-A web-mapping service (WMTS) is an Open Geospatial Consortium (OGC) standard for serving images of map data. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` coordinate reference system (CRS). When using a WMS service, set the width and height parameters to the same value that is supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, set the `BBOX` parameter of the service with the `{bbox-epsg-3857}` placeholder.
+A web-mapping service (WMTS) is an Open Geospatial Consortium (OGC) standard for serving images of map data. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` coordinate reference system (CRS). When using a WMS service, set the width and height parameters to the value supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, set the `BBOX` parameter of the service with the `{bbox-epsg-3857}` placeholder.
::: zone pivot="programming-language-java-android"
The following screenshot shows the above code overlaying a web-mapping service o
## Add an OGC web-mapping tile service (WMTS)
-A web-mapping tile service (WMTS) is an Open Geospatial Consortium (OGC) standard for serving tiled based overlays for maps. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` or `GoogleMapsCompatible` coordinate reference system (CRS). When using a WMTS service, set the width and height parameters to the same value that is supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, replace the following placeholders accordingly:
+A web-mapping tile service (WMTS) is an Open Geospatial Consortium (OGC) standard for serving tiled based overlays for maps. There are many open data sets available in this format that you can use with Azure Maps. This type of service can be used with a tile layer if the service supports the `EPSG:3857` or `GoogleMapsCompatible` coordinate reference system (CRS). When using a WMTS service, set the width and height parameters to the value supported by the service, be sure to set this same value in the `tileSize` option. In the formatted URL, replace the following placeholders accordingly:
* `{TileMatrix}` => `{z}` * `{TileRow}` => `{y}`
azure-maps How To Create Custom Styles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-create-custom-styles.md
Title: Create custom styles for indoor maps description: Learn how to use Maputnik with Azure Maps Creator to create custom styles for your indoor maps.--++ Last updated 9/23/2022
The base map drop-down list on the visual editor toolbar presents a list of base
#### Save custom styles
-Once you have made all of the desired changes to your styles, save the changes to your Creator resource. You can overwrite your style with the changes or create a new style.
+Once you have made the desired changes to your styles, save the changes to your Creator resource. You can overwrite your style with the changes or create a new style.
To save your changes, select the **Save** button on the toolbar.
azure-maps How To Create Data Registries https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-create-data-registries.md
Title: Create Data Registry (preview) description: Learn how to create Data Registry.--++ Last updated 2/14/2023
The [data registry] service enables you to register data content in an Azure Sto
## Prepare to register data in Azure Maps
-Before you can register data in Azure Maps, you need to create an environment containing all of the required components. You need a storage account with one or more containers that hold the files you wish to register and managed identities for authentication. This section explains how to prepare your Azure environment to register data in Azure Maps.
+Before you can register data in Azure Maps, you need to create an environment containing all required components. You need a storage account with one or more containers that hold the files you wish to register and managed identities for authentication. This section explains how to prepare your Azure environment to register data in Azure Maps.
### Create managed identities
azure-maps How To Dataset Geojson https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-dataset-geojson.md
Title: How to create a dataset using a GeoJson package description: Learn how to create a dataset using a GeoJson package.--++ Last updated 11/01/2021
Feature IDs can only contain alpha-numeric (a-z, A-Z, 0-9), hyphen (-), dot (.)
- The top level element is [facility], which defines each building in the file *facility.geojson*. - Each facility has one or more levels, which are defined in the file *levels.goejson*. - Each level must be inside the facility.-- Each [level] contains [units], [structures], [verticalPenetrations] and [openings]. All of the items defined in the level must be fully contained within the Level geometry.
+- Each [level] contains [units], [structures], [verticalPenetrations] and [openings]. All items defined in the level must be fully contained within the Level geometry.
- `unit` can consist of an array of items such as hallways, offices and courtyards, which are defined by [area], [line] or [point] elements. Units are defined in the file *unit.goejson*. - All `unit` elements must be fully contained within their level and intersect with their children. - `structure` defines physical, non-overlapping areas that can't be navigated through, such as a wall. Structures are defined in the file *structure.goejson*.
azure-maps How To Manage Authentication https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-manage-authentication.md
To rotate your Azure Maps subscription keys in the Azure portal:
6. Regenerate the secondary key in the same manner. > [!WARNING]
-> We recommend using only one of the keys in all of your applications at the same time. If you use Key 1 in some places and Key 2 in others, you won't be able to rotate your keys without some applications losing access.
+> We recommend using the same key in all your applications. If you use the primary key in some places and the secondary key in others, you won't be able to rotate your keys without some applications losing access.
## Next steps
azure-maps How To Show Traffic Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-show-traffic-android.md
Title: Show traffic data on Android maps | Microsoft Azure Maps
-description: In this article you'll learn, how to display traffic data on a map using the Microsoft Azure Maps Android SDK.
--
+description: This article demonstrates how to display traffic data on a map using the Microsoft Azure Maps Android SDK.
++ Last updated 2/26/2021
The following table shows all the traffic incident categories that can be used w
| `IncidentCategory.WIND` | `"wind"` | High winds that may make driving difficult for vehicles with a large side profile or high center of gravity. | | `IncidentCategory.FLOODING` | `"flooding"` | Flooding occurring on road. | | `IncidentCategory.DETOUR` | `"detour"` | Traffic being directed to take a detour. |
-| `IncidentCategory.CLUSTER` | `"cluster"` | A cluster of traffic incidents of different categories. Zooming in the map will result in the cluster breaking apart into its individual incidents. |
+| `IncidentCategory.CLUSTER` | `"cluster"` | A cluster of traffic incidents of different categories. Zooming in the map results in the cluster breaking apart into its individual incidents. |
| `IncidentCategory.BROKEN_DOWN_VEHICLE` | `"brokenDownVehicle"` | Broken down vehicle on or beside road. | The following table shows all the traffic incident magnitudes that can be used within the `incidentMagnitudeFilter` option.
azure-maps How To Use Android Map Control Library https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-android-map-control-library.md
Title: Get started with Android map control | Microsoft Azure Maps description: Become familiar with the Azure Maps Android SDK. See how to create a project in Android Studio, install the SDK, and create an interactive map.--++ Last updated 2/26/2021
Be sure to complete the steps in the [Quickstart: Create an Android app](quick-a
The Azure Maps Android SDK provides three ways to set the language and regional view of the map. The following code shows how to set the language to French ("fr-FR") and the regional view to "Auto".
-1. Pass the language and regional view information into the `AzureMaps` class using the static `setLanguage` and `setView` properties. This will set the default language and regional view properties in your app.
+1. Pass the language and regional view information into the `AzureMaps` class using the static `setLanguage` and `setView` properties. This sets the default language and regional view properties in your app.
::: zone pivot="programming-language-java-android"
The Azure Maps Android SDK provides three ways to set the language and regional
::: zone-end
-Here is an example of Azure Maps with the language set to "fr-FR" and regional view set to "Auto".
+Here's an example of Azure Maps with the language set to "fr-FR" and regional view set to "Auto".
![Azure Maps, map image showing labels in French](media/how-to-use-android-map-control-library/android-localization.png)
-For a complete list of supported languages and regional views see [Localization support in Azure Maps](supported-languages.md).
+For a complete list of supported languages and regional views, see [Localization support in Azure Maps](supported-languages.md).
## Navigating the map
There are several different ways in which the map can be zoomed, panned, rotated
## Azure Government cloud support
-The Azure Maps Android SDK supports the Azure Government cloud. The Azure Maps Android SDK is accessed from the same Maven repository. The following tasks will need to be done to connect to the Azure Government cloud version of the Azure Maps platform.
+The Azure Maps Android SDK supports the Azure Government cloud. The Azure Maps Android SDK is accessed from the same Maven repository. The following tasks need to be done to connect to the Azure Government cloud version of the Azure Maps platform.
In same place where the Azure Maps authentication details are specified, add the following line of code to tell the map to use the Azure Maps government cloud domain.
Be sure to use Azure Maps authentication details from the Azure Government cloud
With the move from preview to general availability, some breaking changes were introduced into the Azure Maps Android SDK. The following are the key details:
-* The maven identifier changed from `"com.microsoft.azure.maps:mapcontrol:0.7"` to `"com.azure.android:azure-maps-control:1.0.0"`. The namespace and the major version number has changed.
+* The maven identifier changed from `"com.microsoft.azure.maps:mapcontrol:0.7"` to `"com.azure.android:azure-maps-control:1.0.0"`. The namespace and major version number changed.
* The import namespace has changed from `com.microsoft.azure.maps.mapcontrol` to `com.azure.android.maps.control` * Resource names for XML options, color resources, and image resources have had the text `mapcontrol_` replaced with `azure_maps_`.
azure-maps How To Use Best Practices For Routing https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-best-practices-for-routing.md
This article uses the [Postman] application to build REST calls, but you can cho
## Choose between Route Directions and Matrix Routing
-The Route Directions APIs return instructions including the travel time and the coordinates for a route path. The Route Matrix API lets you calculate the travel time and distances for a set of routes that are defined by origin and destination locations. For every given origin, the Matrix API calculates the cost (travel time and distance) of routing from that origin to every given destination. All of these APIs allow you to specify parameters such as the desired departure time, arrival times, and the vehicle type, like car or truck. They all use real-time or predictive traffic data accordingly to return the most optimal routes.
+The Route Directions APIs return instructions including the travel time and the coordinates for a route path. The Route Matrix API lets you calculate the travel time and distances for a set of routes that are defined by origin and destination locations. For every given origin, the Matrix API calculates the cost (travel time and distance) of routing from that origin to every given destination. These API allow you to specify parameters such as the desired departure time, arrival times, and the vehicle type, like car or truck. They all use real-time or predictive traffic data accordingly to return the most optimal routes.
Consider calling Route Directions APIs if your scenario is to:
azure-maps How To Use Indoor Module Ios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-indoor-module-ios.md
Title: Use the Azure Maps indoor maps module to develop iOS applications with Microsoft Creator services description: Learn how to use the Microsoft Azure Maps indoor maps module for the iOS SDK to render maps by embedding the module's JavaScript libraries.--++ Last updated 12/10/2021
The Azure Maps iOS SDK allows you to render indoor maps created in Azure Maps Cr
1. Be sure to complete the steps in the [Quickstart: Create an iOS app](quick-ios-app.md). Code blocks in this article can be inserted into the `viewDidLoad` function of `ViewController`. 1. [Create a Creator resource](how-to-manage-creator.md)
-1. Get a `tilesetId` by completing the [tutorial for creating Indoor maps](tutorial-creator-indoor-maps.md). You'll need to use this identifier to render indoor maps with the Azure Maps iOS SDK.
+1. Get a `tilesetId` by completing the [tutorial for creating Indoor maps](tutorial-creator-indoor-maps.md). You'll use this identifier to render indoor maps with the Azure Maps iOS SDK.
## Instantiate the indoor manager
azure-maps How To Use Ios Map Control Library https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-ios-map-control-library.md
Title: Get started with iOS map control | Microsoft Azure Maps description: Become familiar with the Azure Maps iOS SDK. See how to install the SDK and create an interactive map.--++ Last updated 11/23/2021
azure-maps Interact Map Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/interact-map-ios-sdk.md
Title: Handle map events in iOS maps description: Learn which events are fired when users interact with maps. View a list of all supported map events. See how to use the Azure Maps iOS SDK to handle events.--++ Last updated 11/18/2021
This article shows you how to use the maps events manager.
## Interact with the map
-The map manages all events through its `events` property accepting delegates, which conform to the `AzureMapDelegate` protocol. The following table lists all of the supported map events represented as methods of the `AzureMapDelegate` protocol.
+The map manages all events through its `events` property accepting delegates, which conform to the `AzureMapDelegate` protocol. The following table lists all supported map events represented as methods of the `AzureMapDelegate` protocol.
| Method | Description | ||-|
For more information, see the [Navigating the map](how-to-use-ios-map-control-li
## Scope feature events to layer
-When adding a delegate to the map, layer IDs can be passed in as a second parameter. When layers are passed in, the events will only fire if the event occurs on that layer. Events scoped to layers are supported by the symbol, bubble, line, and polygon layers.
+When adding a delegate to the map, layer IDs can be passed in as a second parameter. When layers are passed in, the event only fires if it occurs on that layer. Events scoped to layers are supported by the symbol, bubble, line, and polygon layers.
```swift class ShowScopedEventsHandlingViewController: UIViewController, AzureMapDelegate {
azure-maps Map Add Bubble Layer Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-bubble-layer-android.md
Title: Add a Bubble layer to Android maps | Microsoft Azure Maps description: Learn how to render points on maps as circles with fixed sizes. See how to use the Azure Maps Android SDK to add and customize bubble layers for this purpose.--++ Last updated 2/26/2021
azure-maps Map Add Controls Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-controls-android.md
Title: Add controls to an Android map | Microsoft Azure Maps description: How to add zoom control, pitch control, rotate control and a style picker to a map in Microsoft Azure Maps Android SDK.--++ Last updated 02/26/2021
map.controls.add(ZoomControl())
::: zone-end
-The screenshot below is of a zoom control loaded on a map.
+The following screenshot shows a zoom control loaded on a map.
![Zoom control added to map](media/map-add-controls-android/android-zoom-control.jpg)
map.controls.add(PitchControl())
::: zone-end
-The screenshot below is of a pitch control loaded on a map.
+The following screenshot shows a pitch control loaded on a map.
![Pitch control added to map](media/map-add-controls-android/android-pitch-control.jpg)
map.controls.add(CompassControl())
::: zone-end
-The screenshot below is of a compass control loaded on a map.
+The following screenshot shows a compass control loaded on a map.
![Compass control added to map](media/map-add-controls-android/android-compass-control.jpg)
map.controls.add(TrafficControl())
::: zone-end
-The screenshot below is of a traffic control loaded on a map.
+The following screenshot shows a traffic control loaded on a map.
![Traffic control added to map](media/map-add-controls-android/android-traffic-control.jpg) ## A map with all controls
-Multiple controls can be put into an array and added to the map all at once and positioned in the same area of the map to simplify development. The following code adds the standard navigation controls to the map using this approach.
+To simplify development, add multiple controls to an array and map simultaneously then position in the same area. The following code adds the standard navigation controls to the map using this approach.
::: zone pivot="programming-language-java-android"
map.controls.add(
::: zone-end
-The screenshot below shows all controls loaded on a map. The order they are added to the map, is the order they will appear.
+The following screenshot shows all controls loaded on a map. They appear in the order they're added to the map.
![All controls added to map](media/map-add-controls-android/android-all-controls.jpg)
azure-maps Map Add Heat Map Layer Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-heat-map-layer-android.md
Title: Add a heat map layer to Android maps | Microsoft Azure Maps description: Learn how to create a heat map. See how to use the Azure MapsAndroid SDK to add a heat map layer to a map. Find out how to customize heat map layers.--++ Last updated 02/26/2021
azure-maps Map Add Image Layer Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-image-layer-android.md
Title: Add an Image layer to an Android map | Microsoft Azure Maps description: Learn how to add images to a map. See how to use the Azure Maps Android SDK to customize image layers and overlay images on fixed sets of coordinates.--++ Last updated 02/26/2021
map.layers.add(layer, "labels")
::: zone-end
-Alternatively, a URL to an image hosted on the online can be specified. However, if your scenario allows, add the image to your projects `drawable` folder, that will load faster since the image will be locally available and won't have to be downloaded.
+Alternatively, a URL to an image hosted on the online can be specified. However, if your scenario allows, add the image to your projects `drawable` folder, it loads faster since the image is locally available and doesn't need to be downloaded.
::: zone pivot="programming-language-java-android"
azure-maps Map Events https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-events.md
The following code adds JavaScript map events to an HTML marker. It also highlig
<iframe height='500' scrolling='no' title='Interacting with the map - HTML Marker events' src='//codepen.io/azuremaps/embed/VVzKJY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/VVzKJY/'>Interacting with the map - HTML Marker events</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>. </iframe>
-The following table lists all of the supported map class events.
+The following table lists all supported map class events.
| Event | Description | ||-|
azure-maps Map Extruded Polygon Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-extruded-polygon-android.md
Title: Add a polygon extrusion layer to an Android map | Microsoft Azure Maps description: How to add a polygon extrusion layer to the Microsoft Azure Maps Android SDK.--++ Last updated 02/26/2021
azure-maps Migrate From Google Maps Android App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/migrate-from-google-maps-android-app.md
Title: Tutorial - Migrate an Android app description: 'Tutorial on how to migrate an Android app from Google Maps to Microsoft Azure Maps'--++ Last updated 12/1/2021
zone_pivot_groups: azure-maps-android
# Tutorial: Migrate an Android app from Google Maps
-The Azure Maps Android SDK has an API interface that is similar to the Web SDK. If you've developed with one of these SDKs, many of the same concepts, best practices, and architectures apply. In this tutorial, you will learn how to:
+The Azure Maps Android SDK has an API interface that is similar to the Web SDK. If you've developed with one of these SDKs, many of the same concepts, best practices, and architectures apply. This tutorial demonstrates how to:
> [!div class="checklist"] >
To display a map using the Google Maps SDK for Android, the following steps woul
::: zone pivot="programming-language-java-android"
-5. In the **MainActivity.java** file, you will need to import the Google Maps SDK. Forward all the life-cycle methods from the activity containing the map view to the corresponding ones in map class. Retrieve a `MapView` instance from the map fragment using the `getMapAsync(OnMapReadyCallback)` method. The `MapView` automatically initializes the maps system and the view. Edit the **MainActivity.java** file as follows:
+5. In the **MainActivity.java** file, import the Google Maps SDK. Forward all the life-cycle methods from the activity containing the map view to the corresponding ones in map class. Retrieve a `MapView` instance from the map fragment using the `getMapAsync(OnMapReadyCallback)` method. The `MapView` automatically initializes the maps system and the view. Edit the **MainActivity.java** file as follows:
```java import com.google.android.gms.maps.GoogleMap;
To display a map using the Google Maps SDK for Android, the following steps woul
::: zone pivot="programming-language-kotlin"
-5. In the **MainActivity.kt** file, you will need to import the Google Maps SDK. Forward all the life-cycle methods from the activity containing the map view to the corresponding ones in map class. Retrieve a `MapView` instance from the map fragment using the `getMapAsync(OnMapReadyCallback)` method. The `MapView` automatically initializes the maps system and the view. Edit the **MainActivity.kt** file as follows:
+5. In the **MainActivity.kt** file, import the Google Maps SDK. Forward all the life-cycle methods from the activity containing the map view to the corresponding ones in map class. Retrieve a `MapView` instance from the map fragment using the `getMapAsync(OnMapReadyCallback)` method. The `MapView` automatically initializes the maps system and the view. Edit the **MainActivity.kt** file as follows:
```kotlin import com.google.android.gms.maps.GoogleMap;
To display a map using the Azure Maps SDK for Android, the following steps need
> [!NOTE] > You can set the version number to "0+" to have your code always point to the latest version.
- 4. Go to **File** in the toolbar and then click on **Sync Project with Gradle Files**.
+ 4. Go to **File** in the toolbar and then select **Sync Project with Gradle Files**.
3. Add a map fragment to the main activity (resources pwd\> layout \> activity\_main.xml):
To display a map using the Azure Maps SDK for Android, the following steps need
::: zone pivot="programming-language-java-android"
-4. In the **MainActivity.java** file you'll need to:
+4. In the **MainActivity.java** file:
* Imports the Azure Maps SDK * Set your Azure Maps authentication information
To display a map using the Azure Maps SDK for Android, the following steps need
::: zone pivot="programming-language-kotlin"
-4. In the **MainActivity.kt** file you'll need to:
+4. In the **MainActivity.kt** file:
* Imports the Azure Maps SDK * Set your Azure Maps authentication information
To display a map using the Azure Maps SDK for Android, the following steps need
::: zone-end
-If you run your application, the map control will load as in the following image.
+If you run your application, the map control loads as in the following image.
![Simple Azure Maps](media/migrate-google-maps-android-app/simple-azure-maps.png)
baseContext.resources.updateConfiguration(
::: zone-end
-Here is an example of Google Maps with the language set to "fr".
+Here's an example of Google Maps with the language set to "fr".
![Google Maps localization](media/migrate-google-maps-android-app/google-maps-localization.png)
mapControl!!.onReady { map: AzureMap ->
::: zone-end
-Here is an example of Azure Maps with the language set to "fr-FR".
+Here's an example of Azure Maps with the language set to "fr-FR".
![Azure Maps localization](media/migrate-google-maps-android-app/azure-maps-localization.png)
Review the complete list of [Supported languages](supported-languages.md).
## Setting the map view
-Dynamic maps in both Azure Maps and Google Maps can be programmatically moved to new geographic locations by calling the appropriate methods. Let's make the map display satellite aerial imagery, center the map over a location with coordinates, and change the zoom level. For this example, we'll use latitude: 35.0272, longitude: -111.0225, and zoom level of 15.
+Dynamic maps in both Azure Maps and Google Maps can be programmatically moved to new geographic locations by calling the appropriate methods. Let's make the map display satellite aerial imagery, center the map over a location with coordinates, and change the zoom level. For this example, use latitude: 35.0272, longitude: -111.0225, and zoom level of 15.
### Before: Google Maps
In both examples, the above image is added to the drawable folder of the apps re
### Before: Google Maps
-With Google Maps, custom images can be used for markers. Load custom images using the marker's `icon` option. To align the point of the image to the coordinate, use the `anchor` option. The anchor is relative to the dimensions of the image. In this case, the anchor is 0.2 units wide, and 1 unit high.
+With Google Maps, custom images can be used for markers. Load custom images using the marker's `icon` option. To align the point of the image to the coordinate, use the `anchor` option. The anchor is relative to the dimensions of the image. In this case, the anchor is 0.2 units wide, and one unit high.
::: zone pivot="programming-language-java-android"
public override fun onMapReady(googleMap: GoogleMap) {
A tile layer can be added to the map in a similar way as any other layer. A formatted URL that has x, y, and zoom placeholders; `{x}`, `{y}`, `{z}` respectively is used to tell the layer where to access the tiles. Also, tile layers in Azure Maps support `{quadkey}`, `{bbox-epsg-3857}`, and `{subdomain}` placeholders. To make the tile layer semi-transparent, an opacity value of 0.8 is used. Opacity and transparency, although similar, use inverted values. To convert between both options, subtract their value from the number one. > [!TIP]
-> In Azure Maps, it's convenient to render layers below other layers, including base map layers. Also, it's often desirable to render tile layers below the map labels so that they are easy to read. The `map.layers.add` method takes a second parameter which is the id of the layer in which to insert the new layer below. To insert a tile layer below the map labels, the following code can be used:
+> In Azure Maps, it's convenient to render layers below other layers, including base map layers. Also, it's often desirable to render tile layers below the map labels so that they are easy to read. The `map.layers.add` method takes a second parameter which is the id of the layer in which to insert the new layer below. Use the following code to insert a tile layer below the map labels:
> `map.layers.add(myTileLayer, "labels");` ::: zone pivot="programming-language-java-android"
azure-maps Migrate From Google Maps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/migrate-from-google-maps.md
Azure Maps provides developers from all industries powerful geospatial capabilit
## High-level platform comparison
-The table provides a high-level list of Azure Maps features, which correspond to Google Maps features. This list doesn't show all of the Azure Maps features. Additional Azure Maps features include: accessibility, geofencing, isochrones, spatial operations, direct map tile access, batch services, and data coverage comparisons (that is, imagery coverage).
+The table provides a high-level list of Azure Maps features, which correspond to Google Maps features. This list doesn't show all Azure Maps features. Additional Azure Maps features include: accessibility, geofencing, isochrones, spatial operations, direct map tile access, batch services, and data coverage comparisons (that is, imagery coverage).
| Google Maps feature | Azure Maps support | |--|:--:|
azure-maps Open Source Projects https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/open-source-projects.md
A longer list of open-source projects for Azure Maps that includes community cre
## Supportability of open-source projects
-The following statements apply across all of the Azure Maps created and maintained open-source projects and samples:
+The following statements apply across all Azure Maps open-source projects and samples:
- Azure Maps open-source projects and samples are created by Microsoft and the community. - Azure Maps open-source projects and samples are maintained by Microsoft and the community.
azure-maps Quick Android Map https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/quick-android-map.md
Title: 'Quickstart: Create an Android app with Azure Maps' description: 'Quickstart: Learn how to create an Android app using the Azure Maps Android SDK.'--++ Last updated 09/22/2022
Create a new Azure Maps account using the following steps:
* The *Pricing tier* for this account. Select *Gen2*. * Read the *Terms*, and check the checkbox to confirm that you have read and agree to the License and Privacy Statement. * Select the **Review + create** button.
- * Once you have ensured that everything is correct in the **Review + create** page, select the **Create** button.
+ * Once you've ensured that everything is correct in the **Review + create** page, select the **Create** button.
:::image type="content" source="./media/shared/create-account.png" alt-text="A screenshot that shows the Create Maps account pane in the Azure portal.":::
Complete the following steps to create a new project with an empty activity in A
* **Package name**. Use the default **com.example.azuremapsapp**. * **Save location**. Use the default or select a new location to save your project files. Avoid using spaces in the path or filename due to potential problems with the NDK tools. * **Language**. Select Kotlin or Java.
- * **Minimum SDK**. Select `API 21: Android 5.0.0 (Lollipop)` as the minimum SDK. It is the earliest version supported by the Azure Maps Android SDK.
+ * **Minimum SDK**. Select `API 21: Android 5.0.0 (Lollipop)` as the minimum SDK. It's the earliest version supported by the Azure Maps Android SDK.
1. Select **Finish** to create your new project. See the [Android Studio documentation](https://developer.android.com/studio/intro/) for more help with installing Android Studio and creating a new project.
Android Studio lets you set up a virtual Android device on your computer. Doing
To set up an Android Virtual Device (AVD): 1. Select **AVD Manager** in the **Tools** menu.
-1. The **Android Virtual Device Manager** will appear. Select **Create Virtual Device**.
+1. The **Android Virtual Device Manager** appears. Select **Create Virtual Device**.
1. In the **Phones** category, select **Nexus 5X**, and then select **Next**. You can learn more about setting up an AVD in the [Android Studio documentation](https://developer.android.com/studio/run/managing-avds).
The next step in building your application is to install the Azure Maps Android
3. Open the project's **gradle.properties** file, verify that `android.useAndroidX` and `android.enableJetifier` are both set to `true`.
- If the **gradle.properties** file does not include `android.useAndroidX` and `android.enableJetifier`, add the next two lines to the end of the file:
+ If the **gradle.properties** file doesn't include `android.useAndroidX` and `android.enableJetifier`, add the next two lines to the end of the file:
```gradle android.useAndroidX=true
The next step in building your application is to install the Azure Maps Android
> [!TIP] > By setting the authentication information globally in the `AzureMaps` class using the `setSubscriptionKey` or `setAadProperties` methods, you won't need to add your authentication information in every view.
- The map control contains its own lifecycle methods for managing Android's OpenGL lifecycle. These lifecycle methods must be called directly from the containing Activity. For your app to correctly call the map control's lifecycle methods, you must override the following lifecycle methods in the Activity that contains the map control, then call the respective map control method.
+ The map control contains its own lifecycle methods for managing Android's OpenGL lifecycle. These lifecycle methods must be called directly from the containing Activity. To correctly call the map control's lifecycle methods, override the following lifecycle methods in the Activity that contains the map control, then call the respective map control method.
* `onCreate(Bundle)` * `onDestroy()`
The next step in building your application is to install the Azure Maps Android
> [!TIP] > By setting the authentication information globally in the `AzureMaps` class using the `setSubscriptionKey` or `setAadProperties` methods, you won't need to add your authentication information in every view.
- The map control contains its own lifecycle methods for managing Android's OpenGL lifecycle. These lifecycle methods must be called directly from the containing Activity. For your app to correctly call the map control's lifecycle methods, you must override the following lifecycle methods in the Activity that contains the map control. And, you must call the respective map control method.
+ The map control contains its own lifecycle methods for managing Android's OpenGL lifecycle. These lifecycle methods must be called directly from the containing Activity. To correctly call the map control's lifecycle methods, override the following lifecycle methods in the Activity that contains the map control. And, you must call the respective map control method.
* `onCreate(Bundle)` * `onDestroy()`
The next step in building your application is to install the Azure Maps Android
:::image type="content" source="media/quick-android-map/run-app.png" alt-text="A screenshot showing the run button in Android Studio.":::
-Android Studio will take a few seconds to build the application. After the build is complete, you can test your application in the emulated Android device. You should see a map like this one:
+Android Studio takes a few seconds to build the application. After the build is complete, you can test your application in the emulated Android device. You should see a map like this one:
:::image type="content" source="media/quick-android-map/quickstart-android-map.png" alt-text="A screenshot showing Azure Maps in an Android application.":::
azure-maps Quick Ios App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/quick-ios-app.md
Title: Create an iOS app description: Steps to create an Azure Maps account and the first iOS App.--++ Last updated 11/23/2021
See the [Creating a Xcode Project for an App](https://developer.apple.com/docume
The next step in building your application is to install the Azure Maps iOS SDK. Complete these steps to install the SDK:
-1. With the desired Xcode iOS project selected in the **Project navigator** select the **+** button to **Add package dependency**.
+1. With the desired Xcode iOS project selected in the **Project navigator**, select the **+** button to **Add package dependency**.
![Add package dependency.](./media/ios-sdk/quick-ios-app/xcode-add-package-dependency.png)
The next step in building your application is to install the Azure Maps iOS SDK.
![Add an Azure maps control.](./media/ios-sdk/quick-ios-app/add-map-control.png)
-1. In the **AppDelegate.swift** file you'll need to:
+1. In the **AppDelegate.swift** file:
* add import for the Azure Maps SDK * set your Azure Maps authentication information
-Setting the authentication information on the AzureMaps class globally using the `AzureMaps.configure(subscriptionKey:)` or `AzureMaps.configure(aadClient:aadAppId:aadTenant:)` methods makes it so you won't have to add your authentication information on every view.
+By setting the authentication information on the AzureMaps class globally using the `AzureMaps.configure(subscriptionKey:)` or `AzureMaps.configure(aadClient:aadAppId:aadTenant:)` you won't need to add your authentication information on every view.
1. Select the run button, as shown in the following graphic (or press `CMD` + `R`), to build your application. ![Run the iOS application.](./media/ios-sdk/quick-ios-app/run.png)
-Xcode will take a few seconds to build the application. After the build is complete, you can test your application in the simulated iOS device. You should see a map like this one:
+Xcode takes a few seconds to build the application. After the build is complete, you can test your application in the simulated iOS device. You should see a map like this one:
![Your first map on an iOS application.](./media/ios-sdk/quick-ios-app/example.png)
If you don't plan on continuing to develop with the Azure Maps iOS SDK:
## Additional information
-See the following articles for additional code examples:
+See the following articles for more code examples:
* [Manage authentication in Azure Maps](how-to-manage-authentication.md) * [Change map styles in iOS maps](set-map-style-ios-sdk.md)
azure-maps Release Notes Map Control https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/release-notes-map-control.md
Title: Release notes - Map Control
description: Release notes for the Azure Maps Web SDK. - Previously updated : 3/10/2023+ Last updated : 3/15/2023
This document contains information about new features and other changes to the M
## v3 (preview)
-### [3.0.0-preview.4] (March 10, 2023)
+### [3.0.0-preview.5](https://www.npmjs.com/package/azure-maps-control/v/3.0.0-preview.5) (March 15, 2023)
+
+#### Installation (3.0.0-preview.5)
+
+The preview is available on [npm][3.0.0-preview.5] and CDN.
+
+- **NPM:** Refer to the instructions at [azure-maps-control@3.0.0-preview.5][3.0.0-preview.5]
+
+- **CDN:** Reference the following CSS and JavaScript in the `<head>` element of an HTML file:
+
+ ```html
+ <link href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3.0.0-preview.5/atlas.min.css" rel="stylesheet" />
+ <script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3.0.0-preview.5/atlas.min.js"></script>
+ ```
+
+#### New features (3.0.0-preview.5)
+
+- Support dynamically updating mapConfiguration via `map.setServiceOptions({ mapConfiguration: 'MAP_CONFIG' })`
+
+### [3.0.0-preview.4] (March 10, 2023)
#### Installation (3.0.0-preview.4)
This update is the first preview of the upcoming 3.0.0 release. The underlying [
## v2 (latest)
+### [2.2.5](https://www.npmjs.com/package/azure-maps-control/v/2.2.5)
+
+#### New features (2.2.5)
+
+- Support dynamically updating mapConfiguration via `map.setServiceOptions({ mapConfiguration: 'MAP_CONFIG' })`
+ ### [2.2.4] #### Bug fixes (2.2.4)
Stay up to date on Azure Maps:
[StyleOptions]: /javascript/api/azure-maps-control/atlas.styleoptions [TrafficControlOptions]: /javascript/api/azure-maps-control/atlas.trafficcontroloptions [Azure Maps Samples]: https://samples.azuremaps.com
-[Azure Maps Blog]: https://techcommunity.microsoft.com/t5/azure-maps-blog/bg-p/AzureMapsBlog
+[Azure Maps Blog]: https://techcommunity.microsoft.com/t5/azure-maps-blog/bg-p/AzureMapsBlog
azure-maps Set Android Map Styles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/set-android-map-styles.md
Title: Set a map style in Android maps | Microsoft Azure Maps description: Learn two ways of setting the style of a map. See how to use the Azure Maps Android SDK in either the layout file or the activity class to adjust the style.--++ Last updated 02/26/2021
map.setCamera(
::: zone-end
-Often it is desirable to focus the map over a set of data. A bounding box can be calculated from features using the `MapMath.fromData` method and can be passed into the `bounds` option of the map camera. When setting a map view based on a bounding box, it's often useful to specify a `padding` value to account for the pixel size of points being rendered as bubbles or symbols. The following code shows how to set all optional camera options when using a bounding box to set the position of the camera.
+Often it's desirable to focus the map over a set of data. A bounding box can be calculated from features using the `MapMath.fromData` method and can be passed into the `bounds` option of the map camera. When setting a map view based on a bounding box, it's often useful to specify a `padding` value to account for the pixel size of points being rendered as bubbles or symbols. The following code shows how to set all optional camera options when using a bounding box to set the position of the camera.
::: zone pivot="programming-language-java-android"
When setting the camera options of the map, animation options can also be used t
| Option | Description | |--|-|
-| `animationDuration(Integer durationMs)` | Specifies how long the camera will animate between the views in milliseconds (ms). |
+| `animationDuration(Integer durationMs)` | Specifies how long the camera animates between the views in milliseconds (ms). |
| `animationType(AnimationType animationType)` | Specifies the type of animation transition to perform.<br/><br/> - `JUMP` - an immediate change.<br/> - `EASE` - gradual change of the camera's settings.<br/> - `FLY` - gradual change of the camera's settings following an arc resembling flight. | The following code shows how to animate the map view using a `FLY` animation over a duration of three seconds.
azure-maps Set Map Style Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/set-map-style-ios-sdk.md
Title: Set a map style in iOS maps | Microsoft Azure Maps description: Learn two ways of setting the style of a map. See how to use the Azure Maps iOS SDK in either the layout file or the activity class to adjust the style.--++ Last updated 10/22/2021
azure-maps Show Traffic Data Map Ios Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/show-traffic-data-map-ios-sdk.md
Title: Show traffic data on iOS maps description: In this article you'll learn, how to display traffic data on a map using the Microsoft Azure Maps iOS SDK.--++ Last updated 11/18/2021
The following table shows all the traffic incident categories that can be used w
| `IncidentCategory.wind` | High winds that may make driving difficult for vehicles with a large side profile or high center of gravity. | | `IncidentCategory.flooding` | Flooding occurring on road. | | `IncidentCategory.detour` | Traffic being directed to take a detour. |
-| `IncidentCategory.cluster` | A cluster of traffic incidents of different categories. Zooming in the map will result in the cluster breaking apart into its individual incidents. |
+| `IncidentCategory.cluster` | A cluster of traffic incidents of different categories. Zooming in the map results in the cluster breaking apart into its individual incidents. |
The following table shows all the traffic incident magnitudes that can be used within the `incidentMagnitudeFilter` option.
azure-maps Spatial Io Add Simple Data Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/spatial-io-add-simple-data-layer.md
For example when parsing XML data feeds, you may not know the exact styles and g
As mentioned earlier, the simple data layer wraps several of the core rendering layers: bubble, symbol, line, polygon, and extruded polygon. It then uses expressions to search for valid style properties on individual features.
-Azure Maps and GitHub style properties are the two main sets of supported property names. Most property names of the different Azure maps layer options are supported as style properties of features in the simple data layer. Expressions have been added to some layer options to support style property names that are commonly used by GitHub. These property names are defined by [GitHub's GeoJSON map support](https://help.github.com/en/github/managing-files-in-a-repository/mapping-geojson-files-on-github), and they're used to style GeoJSON files that are stored and rendered within the platform. All of GitHub's styling properties are supported in the simple data layer, except the `marker-symbol` styling properties.
+Azure Maps and GitHub style properties are the two main sets of supported property names. Most property names of the different Azure maps layer options are supported as style properties of features in the simple data layer. Expressions have been added to some layer options to support style property names that are commonly used by GitHub. These property names are defined by [GitHub's GeoJSON map support](https://help.github.com/en/github/managing-files-in-a-repository/mapping-geojson-files-on-github), and they're used to style GeoJSON files that are stored and rendered within the platform. All GitHub's styling properties are supported in the simple data layer, except the `marker-symbol` styling properties.
If the reader comes across a less common style property, it will convert it to the closest Azure Maps style property. Additionally, the default style expressions can be overridden by using the `getLayers` function of the simple data layer and updating the options on any of the layers.
azure-maps Tutorial Create Store Locator https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-create-store-locator.md
Title: 'Tutorial: Use Microsoft Azure Maps to create store locator web applications' description: Tutorial on how to use Microsoft Azure Maps to create store locator web applications.--++ Last updated 01/03/2022
In this tutorial, you'll learn how to:
In this tutorial, you'll create a store locator for a fictional company named *Contoso Coffee*. Also, this tutorial includes some tips to help you learn about extending the store locator with other optional functionality.
-To see a live sample of what you will create in this tutorial, see [Simple Store Locator] on the **Azure Maps Code Samples** site.
+To see a live sample of what you're creating in this tutorial, see [Simple Store Locator] on the **Azure Maps Code Samples** site.
-To more easily follow and engage this tutorial, you'll need to download the following resources:
+To more easily follow and engage this tutorial, download the following resources:
-* Full source code for the [Simple Store Locator](https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator) on GitHub.
-* [Store location data](https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator/data) that you'll import into the store locator dataset.
+* [Simple Store Locator] source code.
+* [Store location data] used to import into the store locator dataset.
* The [Map images]. ## Store locator features
To create the HTML:
</main> ```
-After you finish, *https://docsupdatetracker.net/index.html* should look like [Simple Store Locator.html].
+After you finish, *https://docsupdatetracker.net/index.html* should look like _[Simple Store Locator.html]_ in the tutorial sample code.
## Define the CSS styles
In this tutorial, you learned how to create a basic store locator by using Azure
## Additional information
-* For the completed code used in this tutorial, see the [Simple Store Locator](https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator) tutorial on GitHub.
+* For the completed code, see the [Simple Store Locator tutorial on GitHub].
* To view this sample live, see [Simple Store Locator] on the **Azure Maps Code Samples** site. * learn more about the coverage and capabilities of Azure Maps by using [Zoom levels and tile grid]. * You can also [Use data-driven style expressions] to apply to your business logic.
To see more code examples and an interactive coding experience:
[Manage authentication in Azure Maps]: how-to-manage-authentication.md [Visual Studio Code]: https://code.visualstudio.com [Simple Store Locator]: https://samples.azuremaps.com/?sample=simple-store-locator
+[Simple Store Locator tutorial on GitHub]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator
+[Simple Store Locator.html]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/master/Samples/Tutorials/Simple%20Store%20Locator/Simple%20Store%20Locator.html
+ [data]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator/data [Search service]: /rest/api/maps/search [Spherical Mercator projection]: glossary.md#spherical-mercator-projection
To see more code examples and an interactive coding experience:
[EPSG:4326]: https://epsg.io/4326 [ContosoCoffee.xlsx]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator/data [Map images]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator/images
-[Simple Store Locator.html]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/master/Samples/Tutorials/Simple%20Store%20Locator/Simple%20Store%20Locator.html
[event listener]: /javascript/api/azure-maps-control/atlas.map#events
-[suggestions as you type]: (https://samples.azuremaps.com/?sample=search-autosuggest-and-jquery-ui
-[support for multiple languages]: (https://samples.azuremaps.com/?sample=map-localization
-[filter locations along a route]: (https://samples.azuremaps.com/?sample=filter-data-along-route
-[set filters]: (https://samples.azuremaps.com/?sample=filter-symbols-by-property
+[suggestions as you type]: https://samples.azuremaps.com/?sample=search-autosuggest-and-jquery-ui
+[support for multiple languages]: https://samples.azuremaps.com/?sample=map-localization
+[filter locations along a route]: https://samples.azuremaps.com/?sample=filter-data-along-route
+[set filters]: https://samples.azuremaps.com/?sample=filter-symbols-by-property
[Azure App Service Web App]: ../app-service/quickstart-html.md [SQL Server spatial data types overview]: /sql/relational-databases/spatial/spatial-data-types-overview?preserve-view=true&view=sql-server-2017 [Query spatial data for the nearest neighbor]: /sql/relational-databases/spatial/query-spatial-data-for-nearest-neighbor?preserve-view=true&view=sql-server-2017 [Zoom levels and tile grid]: zoom-levels-and-tile-grid.md [Use data-driven style expressions]: data-driven-style-expressions-web-sdk.md
+[Store location data]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Simple%20Store%20Locator/data
azure-maps Tutorial Load Geojson File Android https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-load-geojson-file-android.md
Title: 'Tutorial: Load GeoJSON data into Azure Maps Android SDK | Microsoft Azure Maps' description: Tutorial on how to load GeoJSON data file into the Azure Maps Android map SDK.--++ Last updated 12/10/2020
This tutorial guides you through the process of importing a GeoJSON file of loca
## Prerequisites
-1. Complete the [Quickstart: Create an Android app](quick-android-map.md). This tutorial will extend the code used in that quickstart.
+1. Complete the [Quickstart: Create an Android app](quick-android-map.md). This tutorial extends the code used in that quickstart.
2. Download the [Sample Points of Interest](https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/master/Static/data/geojson/SamplePoiDataSet.json) GeoJSON file. ### Import GeoJSON data from web or assets folder
-Most GeoJSON files wrap all data within a `FeatureCollection`. With this scenario in mind, if the GeoJSON files are loaded into the application as a string, they can be passed into the feature collection's static `fromJson` method, which will deserialize the string into a GeoJSON `FeatureCollection` object that can be added to the map.
+Most GeoJSON files wrap all data within a `FeatureCollection`. With this scenario in mind, if the GeoJSON files are loaded into the application as a string, they can be passed into the feature collection's static `fromJson` method, which deserializes the string into a GeoJSON `FeatureCollection` object that can be added to the map.
The following steps show you how to import a GeoJSON file into the application and deserialize it as a GeoJSON `FeatureCollection` object.
map.events.add(OnFeatureClick { feature: List<Feature> ->
::: zone-end
-10. Run the application. A map will be displayed with bubbles overlaid for each location in the GeoJSON file. Tapping on any bubble will display a popup with the name and entity type of the feature touched.
+10. Run the application. A map is displayed with bubbles overlaid for each location in the GeoJSON file. Tapping on any bubble displays a popup with the name and entity type of the feature touched.
![Map of data from a GeoJSON file displayed with a popup being opened when location tapped](media/tutorial-load-geojson-file-android/android-import-geojson.gif)
azure-maps Tutorial Prioritized Routes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-prioritized-routes.md
Title: 'Tutorial: Find multiple routes by mode of travel' description: Tutorial on how to use Azure Maps to find routes for specific travel modes to points of interest. See how to display multiple routes on maps.--++ Last updated 12/29/2021
# Tutorial: Find and display routes for different modes of travel using Azure Maps
-This tutorial shows you how to use the Azure Maps [Route service](/rest/api/maps/route) and [Map control](./how-to-use-map-control.md) to display route directions for both private vehicles and commercial vehicles (trucks) with `USHazmatClass2` cargo type.
+This tutorial demonstrates how to use the Azure Maps [Route service] and [Map control] to display route directions for both private vehicles and commercial vehicles (trucks) with `USHazmatClass2` cargo type.
In this tutorial, you learn how to:
The following steps show you how to create and display the Map control in a web
Some things to know about the above HTML:
- * The HTML header includes CSS and JavaScript resource files that are hosted by the Azure Map Control library.
+ * The HTML header includes CSS and JavaScript resource files hosted by the Azure Map Control library.
* The `onload` event in the body of the page calls the `GetMap` function when the body of the page has loaded.
- * The `GetMap` function will contain the inline JavaScript code used to access the Azure Maps API.
+ * The `GetMap` function contains the inline JavaScript code used to access the Azure Maps API.
3. Next, add the following JavaScript code to the `GetMap` function, just beneath the code added in the last step. This code creates a map control and initializes it using your Azure Maps subscription keys that you provide. Make sure and replace the string `<Your Azure Maps Subscription Key>` with the Azure Maps subscription key that you copied from your Maps account.
The following steps show you how to create and display the Map control in a web
Some things to know about the above JavaScript: * This code is the core of the `GetMap` function, which initializes the Map Control API for your Azure Maps account.
- * [atlas](/javascript/api/azure-maps-control/atlas) is the namespace that contains the Azure Maps API and related visual components.
- * [atlas.Map](/javascript/api/azure-maps-control/atlas.map) provides the control for a visual and interactive web map.
+ * [atlas] is the namespace that contains the Azure Maps API and related visual components.
+ * [atlas.Map] provides the control for a visual and interactive web map.
-4. Save the file and open it in your browser. The browser will display a basic map by calling `atlas.Map` using your Azure Maps subscription key.
+4. Save the file and open it in your browser. The browser displays a basic map by calling `atlas.Map` using your Azure Maps subscription key.
:::image type="content" source="./media/tutorial-prioritized-routes/basic-map.png" alt-text="A screenshot that shows the most basic map you can make by calling the atlas Map API, using your Azure Maps subscription key.":::
The following steps show you how to create and display the Map control in a web
Some things to know about the above JavaScript:
- * This code implements the Map control's `ready` event handler. The rest of the code in this tutorial will be placed inside the `ready` event handler.
+ * This code implements the Map control's `ready` event handler. The rest of the code in this tutorial is placed inside the `ready` event handler.
* In the map `ready` event handler, the traffic flow setting on the map is set to `relative`, which is the speed of the road relative to free-flow.
- * For more traffic options, see [TrafficOptions interface](/javascript/api/azure-maps-control/atlas.trafficoptions).
+ * For more traffic options, see [TrafficOptions interface].
-2. Save the **MapTruckRoute.html** file and refresh the page in your browser. If you zoom into any city, like Los Angeles, you'll see that the streets display with current traffic flow data.
+2. Save the **MapTruckRoute.html** file and refresh the page in your browser. If you zoom into any city, like Los Angeles, the streets display with current traffic flow data.
:::image type="content" source="./media/tutorial-prioritized-routes/traffic-map.png" alt-text="A screenshot that shows a map of Los Angeles, with the streets displaying traffic flow data.":::
The following steps show you how to create and display the Map control in a web
## Define route display rendering
-In this tutorial, two routes will be calculated and rendered on the map. The first route will be calculated for a private vehicle (car). The second route will be calculated for a commercial vehicle (truck) to show the difference between the results. When rendered, the map will display a symbol icon for the start and end points of the route, and route line geometries with different colors for each route path. For more information on adding line layers, see [Add a line layer to a map](map-add-line-layer.md). To learn more about symbol layers, see [Add a symbol layer to a map](map-add-pin.md).
+In this tutorial, two routes are calculated on the map. The first route is calculated for a private vehicle (car). The second route is calculated for a commercial vehicle (truck) to show the difference between the results. When rendered, the map displays a symbol icon for the start and end points of the route, and route line geometries with different colors for each route path. For more information on adding line layers, see [Add a line layer to a map]. To learn more about symbol layers, see [Add a symbol layer to a map].
1. In the Map control's `ready` event handler, append the following code.
In this tutorial, two routes will be calculated and rendered on the map. The fir
Some things to know about the above JavaScript: * In the Map control's `ready` event handler, a data source is created to store the route from start to finish.
- * [Expressions](data-driven-style-expressions-web-sdk.md) are used to retrieve the line width and color from properties on the route line feature.
+ * [Expressions] are used to retrieve the line width and color from properties on the route line feature.
* To ensure that the route line doesn't cover up the road labels, we've passed a second parameter with the value of `'labels'`.
- Next, a symbol layer is created and attached to the data source. This layer specifies how the start and end points are rendered. Expressions have been added to retrieve the icon image and text label information from properties on each point object. To learn more about expressions, see [Data-driven style expressions](data-driven-style-expressions-web-sdk.md).
+ Next, a symbol layer is created and attached to the data source. This layer specifies how the start and end points are rendered. Expressions have been added to retrieve the icon image and text label information from properties on each point object. To learn more about expressions, see [Data-driven style expressions].
2. Next, set the start point as a fictitious company in Seattle called *Fabrikam*, and the end point as a Microsoft office. In the Map control's `ready` event handler, append the following code.
In this tutorial, two routes will be calculated and rendered on the map. The fir
About the above JavaScript:
- * This code creates two [GeoJSON Point objects](https://en.wikipedia.org/wiki/GeoJSON) to represent start and end points, which are then added to the data source.
+ * This code creates two [GeoJSON Point objects] to represent start and end points, which are then added to the data source.
* The last block of code sets the camera view using the latitude and longitude of the start and end points. * The start and end points are added to the data source. * The bounding box for the start and end points is calculated using the `atlas.data.BoundingBox.fromData` function. This bounding box is used to set the map cameras view over the entire route using the `map.setCamera` function. * Padding is added to compensate for the pixel dimensions of the symbol icons.
- * For more information, see the [setCamera](/javascript/api/azure-maps-control/atlas.map#setCamera_CameraOptions___CameraBoundsOptions___AnimationOptions_) function in the Microsoft technical documentation.
+ * For more information, see the [setCamera] function in the Microsoft technical documentation.
3. Save **TruckRoute.html** and refresh your browser. The map is now centered over Seattle. The blue teardrop pin marks the start point. The round blue pin marks the end point.
In this tutorial, two routes will be calculated and rendered on the map. The fir
## Request and display private and commercial vehicle routes on a map
-This section shows you how to use the Azure Maps Route service to get directions from one point to another, based on your mode of transport. We'll be using two modes of transport: truck and car.
+This section shows you how to use the Azure Maps Route service to get directions from one point to another, based on your mode of transport. Two modes of transport are used: truck and car.
>[!TIP]
->The Route service provides APIs to plan *fastest*, *shortest*, *eco*, or *thrilling* routes based on distance, traffic conditions, and mode of transport used. The service also lets users plan future routes based on historical traffic conditions. Users can see the prediction of route durations for any given time. For more information, see [Get Route directions API](/rest/api/maps/route/getroutedirections).
+>The Route service provides APIs to plan *fastest*, *shortest*, *eco*, or *thrilling* routes based on distance, traffic conditions, and mode of transport used. The service also lets users plan future routes based on historical traffic conditions. Users can see the prediction of route durations for any given time. For more information, see [Get Route directions API].
1. In the `GetMap` function, inside the control's `ready` event handler, add the following to the JavaScript code.
This section shows you how to use the Azure Maps Route service to get directions
var routeURL = new atlas.service.RouteURL(pipeline); ```
- * Use [MapControlCredential](/javascript/api/azure-maps-rest/atlas.service.mapcontrolcredential) to share authentication between a map control and the service module when creating a new [pipeline](/javascript/api/azure-maps-rest/atlas.service.pipeline) object.
+ * Use [MapControlCredential] to share authentication between a map control and the service module when creating a new [pipeline] object.
- * The [routeURL](/javascript/api/azure-maps-rest/atlas.service.routeurl) represents a URL to Azure Maps [Route](/rest/api/maps/route) operations.
+ * The [routeURL] represents a URL to Azure Maps [Route service].
2. After setting up credentials and the URL, add the following JavaScript code to construct a truck route from the start to end points. This route is created and displayed for a truck carrying `USHazmatClass2` classed cargo.
This section shows you how to use the Azure Maps Route service to get directions
routeLine.properties.strokeColor = '#2272B9'; routeLine.properties.strokeWidth = 9;
- //Add the route line to the data source. We want this to render below the car route which will likely be added to the data source faster, so insert it at index 0.
+ //Add the route line to the data source. This should render below the car route which will likely be added to the data source faster, so insert it at index 0.
datasource.add(routeLine, 0); }); ``` About the above JavaScript:
- * This code queries the Azure Maps Route service through the [Azure Maps Route Directions API](/javascript/api/azure-maps-rest/atlas.service.routeurl#calculateroutedirections-aborter--geojson-position-calculateroutedirectionsoptions-).
+ * This code queries the Azure Maps Route service through the [Azure Maps Route Directions API].
* The route line is then extracted from the GeoJSON feature collection from the response that is extracted using the `geojson.getFeatures()` method. * The route line is then added to the data source. * Two properties are added to the truck route line: a blue stroke color `#2272B9`, and a stroke width of nine pixels.
- * The route line is given an index of 0 to ensure that the truck route is rendered before any other lines in the data source. The reason is the truck route calculation will often be slower than a car route calculation. If the truck route line is added to the data source after the car route, it will render above it.
+ * The route line is given an index of 0 to ensure that the truck route is rendered before any other lines in the data source. The reason is the truck route calculation are often slower than a car route calculation. If the truck route line is added to the data source after the car route, it will render above it.
>[!TIP]
- > To see all possible options and values for the Azure Maps Route Directions API, see [URI Parameters for Post Route Directions](/rest/api/maps/route/postroutedirections#uri-parameters).
+ > To see all possible options and values for the Azure Maps Route Directions API, see [URI Parameters for Post Route Directions].
3. Next, append the following JavaScript code to create a route for a car.
This section shows you how to use the Azure Maps Route service to get directions
About the above JavaScript:
- * This code queries the Azure Maps routing service through the [Azure Maps Route Directions API](/javascript/api/azure-maps-rest/atlas.service.routeurl#calculateroutedirections-aborter--geojson-position-calculateroutedirectionsoptions-) method.
+ * This code queries the Azure Maps routing service through the [Azure Maps Route Directions API] method.
* The route line is then extracted from the GeoJSON feature collection from the response that is extracted using the `geojson.getFeatures()` method then is added to the data source. * Two properties are added to the truck route line: a purple stroke color `#B76DAB`, and a stroke width of five pixels.
This section shows you how to use the Azure Maps Route service to get directions
* The truck route is displayed using a thick blue line and the car route is displayed using a thin purple line. * The car route goes across Lake Washington via I-90, passing through tunnels beneath residential areas. Because the tunnels are in residential areas, hazardous waste cargo is restricted. The truck route, which specifies a `USHazmatClass2` cargo type, is directed to use a different route that doesn't have this restriction.
-* For the completed code used in this tutorial, see the [Truck Route](https://samples.azuremaps.com/?sample=car-vs-truck-route) tutorial on GitHub.
-* To view this sample live, see [Multiple routes by mode of travel](https://samples.azuremaps.com/?sample=multiple-routes-by-mode-of-travel) on the **Azure Maps Code Samples** site.
-* You can also use [Data-driven style expressions](data-driven-style-expressions-web-sdk.md)
+* For the completed code used in this tutorial, see the [Truck Route] tutorial on GitHub.
+* To view this sample live, see [Multiple routes by mode of travel] on the **Azure Maps Code Samples** site.
+* You can also use [Data-driven style expressions].
## Next steps
The next tutorial demonstrates the process of creating a simple store locator us
[Azure Maps account]: quick-demo-map-app.md#create-an-azure-maps-account [subscription key]: quick-demo-map-app.md#get-the-subscription-key-for-your-account [manage authentication in Azure Maps]: how-to-manage-authentication.md
+[Route service]: /rest/api/maps/route
+[Map control]: how-to-use-map-control.md
+[Get Route directions API]: /rest/api/maps/route/getroutedirections
+[routeURL]: /javascript/api/azure-maps-rest/atlas.service.routeurl
+[pipeline]: /javascript/api/azure-maps-rest/atlas.service.pipeline
+[TrafficOptions interface]: /javascript/api/azure-maps-control/atlas.trafficoptions
+[atlas]: /javascript/api/azure-maps-control/atlas
+[atlas.Map]: /javascript/api/azure-maps-control/atlas.map
+[Add a symbol layer to a map]: map-add-pin.md
+[Add a line layer to a map]: map-add-line-layer.md
+[Expressions]: data-driven-style-expressions-web-sdk.md
+[Data-driven style expressions]: data-driven-style-expressions-web-sdk.md
+[GeoJSON Point objects]: https://en.wikipedia.org/wiki/GeoJSON
+[setCamera]: /javascript/api/azure-maps-control/atlas.map#setCamera_CameraOptions___CameraBoundsOptions___AnimationOptions_
+[MapControlCredential]: /javascript/api/azure-maps-rest/atlas.service.mapcontrolcredential
+[Azure Maps Route Directions API]: /javascript/api/azure-maps-rest/atlas.service.routeurl#calculateroutedirections-aborter--geojson-position-calculateroutedirectionsoptions-
+[Truck Route]: https://samples.azuremaps.com/?sample=car-vs-truck-route
+[Multiple routes by mode of travel]: https://samples.azuremaps.com/?sample=multiple-routes-by-mode-of-travel
+[Data-driven style expressions]: data-driven-style-expressions-web-sdk.md
+[URI Parameters for Post Route Directions]: /rest/api/maps/route/postroutedirections#uri-parameters
azure-maps Tutorial Route Location https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-route-location.md
Title: 'Tutorial: Find route to a location'
+ Title: 'Tutorial: How to display route directions using Azure Maps Route service and Map control'
description: Tutorial on how to find a route to a point of interest. See how to set address coordinates and query the Azure Maps Route service for directions to the point.--++ Last updated 12/28/2021
This tutorial shows you how to use the Azure Maps [Route service API] and [Map c
> * Create and add GeoJSON objects to the Map to represent start and end points. > * Get route directions from start and end points using the [Get Route directions API].
-See the [route] tutorial in GitHub for the source code. See [Route to a destination] for a live sample.
+See the [route tutorial] in GitHub for the source code. See [Route to a destination] for a live sample.
## Prerequisites
The following steps show you how to create and display the Map control in a web
Some things to know about the above HTML:
- * The HTML header includes CSS and JavaScript resource files that are hosted by the Azure Map Control library.
+ * The HTML header includes CSS and JavaScript resource files hosted by the Azure Map Control library.
* The `onload` event in the body of the page calls the `GetMap` function when the body of the page has loaded.
- * The `GetMap` function will contain the inline JavaScript code used to access the Azure Maps APIs. It is added in the next step.
+ * The `GetMap` function contains the inline JavaScript code used to access the Azure Maps APIs. It's added in the next step.
3. Next, add the following JavaScript code to the `GetMap` function, just beneath the code added in the last step. This code creates a map control and initializes it using your Azure Maps subscription keys that you provide. Make sure and replace the string `<Your Azure Maps Key>` with the Azure Maps primary key that you copied from your Maps account.
The following steps show you how to create and display the Map control in a web
* [atlas] is the namespace that contains the Azure Maps API and related visual components. * [atlas.Map] provides the control for a visual and interactive web map.
-4. Save your changes to the file and open the HTML page in a browser. The map shown is the most basic map that you can make by calling `atlas.Map` using your account key.
+4. Save your changes to the file and open the HTML page in a browser. The map shown is the most basic map that you can make by calling `atlas.Map` using your Azure Maps account subscription key.
- :::image type="content" source="./media/tutorial-route-location/basic-map.png" alt-text="[A screenshot showing the most basic map that you can make by calling atlas.Map using your Azure Maps account key.":::
+ :::image type="content" source="./media/tutorial-route-location/basic-map.png" alt-text="A screenshot showing the most basic map that you can make by calling atlas.Map using your Azure Maps account key.":::
## Define route display rendering
-In this tutorial, we'll render the route using a line layer. The start and end points will be rendered using a symbol layer. For more information on adding line layers, see [Add a line layer to a map](map-add-line-layer.md). To learn more about symbol layers, see [Add a symbol layer to a map].
+In this tutorial, you'll render the route using a line layer. The start and end points are rendered using a symbol layer. For more information on adding line layers, see [Add a line layer to a map](map-add-line-layer.md). To learn more about symbol layers, see [Add a symbol layer to a map].
1. In the `GetMap` function, after initializing the map, add the following JavaScript code.
In this tutorial, we'll render the route using a line layer. The start and end p
Some things to know about the above JavaScript:
- * This code implements the Map control's `ready` event handler. The rest of the code in this tutorial will be placed inside the `ready` event handler.
+ * This code implements the Map control's `ready` event handler. The rest of the code in this tutorial are placed inside the `ready` event handler.
* In the map control's `ready` event handler, a data source is created to store the route from start to end point.
- * To define how the route line will be rendered, a line layer is created and attached to the data source. To ensure that the route line doesn't cover up the road labels, we've passed a second parameter with the value of `'labels'`.
+ * To define how the route line is rendered, a line layer is created and attached to the data source. To ensure that the route line doesn't cover up the road labels, we've passed a second parameter with the value of `'labels'`.
Next, a symbol layer is created and attached to the data source. This layer specifies how the start and end points are rendered.Expressions have been added to retrieve the icon image and text label information from properties on each point object. To learn more about expressions, see [Data-driven style expressions].
In this tutorial, we'll render the route using a line layer. The start and end p
3. Save **MapRoute.html** and refresh your browser. The map is now centered over Seattle. The blue teardrop pin marks the start point. The blue round pin marks the end point.
- :::image type="content" source="./media/tutorial-route-location/map-pins.png" alt-text="[A screenshot showing a map with a route containing a blue teardrop pin marking the start point at Microsoft in Redmond Washington and a blue round pin marking the end point at a gas station in Seattle.":::
+ :::image type="content" source="./media/tutorial-route-location/map-pins.png" alt-text="A screenshot showing a map with a route containing a blue teardrop pin marking the start point at Microsoft in Redmond Washington and a blue round pin marking the end point at a gas station in Seattle.":::
<a id="getroute"></a>
This section shows you how to use the Azure Maps Route Directions API to get rou
* Use [MapControlCredential] to share authentication between a map control and the service module when creating a new [pipeline] object.
- * The [routeURL] represents a URL to Azure Maps [Route] operations.
+ * The [routeURL] represents a URL to Azure Maps [Route service API].
2. After setting up credentials and the URL, append the following code at the end of the control's `ready` event handler.
This section shows you how to use the Azure Maps Route Directions API to get rou
3. Save the **MapRoute.html** file and refresh your web browser. The map should now display the route from the start to end points.
- :::image type="content" source="./media/tutorial-route-location/map-route.png" alt-text="[A screenshot showing a map that demonstrates the Azure Map control and Route service.":::
+ :::image type="content" source="./media/tutorial-route-location/map-route.png" alt-text="A screenshot showing a map that demonstrates the Azure Map control and Route service.":::
-* For the completed code used in this tutorial, see the [route] tutorial on GitHub.
+* For the completed code used in this tutorial, see the [route tutorial] on GitHub.
* To view this sample live, see [Route to a destination] on the **Azure Maps Code Samples** site. ## Next steps
The next tutorial shows you how to create a route query with restrictions, like
[Symbol layers]: map-add-pin.md [Line layers]: map-add-line-layer.md [Get Route directions API]: /rest/api/maps/route/getroutedirections
-[route]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Route
+[route tutorial]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Route
[Route to a destination]: https://samples.azuremaps.com/?sample=route-to-a-destination [atlas]: /javascript/api/azure-maps-control/atlas [atlas.Map]: /javascript/api/azure-maps-control/atlas.map
azure-maps Tutorial Search Location https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/tutorial-search-location.md
Title: 'Tutorial: Search for nearby locations on a map' description: Tutorial on how to search for points of interest on a map. See how to use the Azure Maps Web SDK to add search capabilities and interactive pop-up boxes to a map.--++ Last updated 12/23/2021
This tutorial shows how to set up an account with Azure Maps, then use the Maps
> [!div class="checklist"] > > * Create an Azure Maps account
-> * Retrieve the primary key for your Maps account
+> * Retrieve the subscription key for your Maps account
> * Create a new web page using the map control API > * Use the Maps search service to find a nearby point of interest
The Map Control API is a convenient client library. This API allows you to easil
* The HTML header includes CSS and JavaScript resource files that are hosted by the Azure Map Control library. * The `onload` event in the body of the page calls the `GetMap` function when the body of the page has loaded.
- * The `GetMap` function will contain the inline JavaScript code used to access the Azure Maps APIs. It is added in the next step.
+ * The `GetMap` function contains the inline JavaScript code used to access the Azure Maps APIs. It's added in the next step.
-3. Add the following JavaScript code to the `GetMap` function of the HTML file. Replace the string `<Your Azure Maps Key>` with the primary key that you copied from your Azure Maps account.
+3. Add the following JavaScript code to the `GetMap` function of the HTML file. Replace the string `<Your Azure Maps Subscription Key>` with the subscription key that you copied from your Azure Maps account.
```JavaScript //Instantiate a map object var map = new atlas.Map("myMap", {
- view: 'Auto',
+ view: 'Auto',
// Add your Azure Maps subscription key. https://aka.ms/am-primaryKey authOptions: { authType: 'subscriptionKey',
- subscriptionKey: '<Your Azure Maps Key>'
+ subscriptionKey: '<Your Azure Maps Subscription Key>'
} }); ```
The Map Control API is a convenient client library. This API allows you to easil
4. Save your changes to the file and open the HTML page in a browser. The map shown is the most basic map that you can make by calling `atlas.Map` using your account key.
- ![A screen shot showing the most basic map that you can make by calling atlas.Map using your Azure Maps account key.](./media/tutorial-search-location/basic-map.png)
+ :::image type="content" source="./media/tutorial-search-location/basic-map.png" alt-text="A screen shot showing the most basic map that you can make by calling atlas.Map using your Azure Maps account key.":::
5. In the `GetMap` function, after initializing the map, add the following JavaScript code.
The Map Control API is a convenient client library. This API allows you to easil
## Add search capabilities
-This section shows how to use the Maps [Search API](/rest/api/maps/search) to find a point of interest on your map. It's a RESTful API designed for developers to search for addresses, points of interest, and other geographical information. The Search service assigns a latitude and longitude information to a specified address. The **Service Module** explained below can be used to search for a location using the Maps Search API.
+This section shows how to use the Maps [Search API] to find a point of interest on your map. It's a RESTful API designed for developers to search for addresses, points of interest, and other geographical information. The Search service assigns a latitude and longitude information to a specified address. The **Service Module** explained next can be used to search for a location using the Maps Search API.
### Service Module
This section shows how to use the Maps [Search API](/rest/api/maps/search) to fi
var searchURL = new atlas.service.SearchURL(pipeline); ```
- * Use [MapControlCredential](/javascript/api/azure-maps-rest/atlas.service.mapcontrolcredential) to share authentication between a map control and the service module when creating a new [pipeline](/javascript/api/azure-maps-rest/atlas.service.pipeline) object.
+ * Use [MapControlCredential] to share authentication between a map control and the service module when creating a new [pipeline] object.
- * The [searchURL](/javascript/api/azure-maps-rest/atlas.service.searchurl) represents a URL to Azure Maps [Search](/rest/api/maps/search) operations.
+ * The [searchURL] represents a URL to Azure Maps [MapControlCredential].
-2. Next add the following script block just below the previous code just added in the map `ready` event handler. This is the code to build the search query. It uses the [Fuzzy Search service](/rest/api/maps/search/get-search-fuzzy), a basic search API of the Search Service. Fuzzy Search service handles most fuzzy inputs like addresses, places, and points of interest (POI). This code searches for nearby gas stations within the specified radius of the provided latitude and longitude. A GeoJSON feature collection from the response is then extracted using the `geojson.getFeatures()` method and added to the data source, which automatically results in the data being rendered on the maps symbol layer. The last part of this script block sets the maps camera view using the bounding box of the results using the Map's [setCamera](/javascript/api/azure-maps-control/atlas.map#setcamera-cameraoptionscameraboundsoptionsanimationoptions-) property.
+2. Next add the following script block just below the previous code just added in the map `ready` event handler. This is the code to build the search query. It uses the [Fuzzy Search service], a basic search API of the Search Service. Fuzzy Search service handles most fuzzy inputs like addresses, places, and points of interest (POI). This code searches for nearby gas stations within the specified radius of the provided latitude and longitude. A GeoJSON feature collection from the response is then extracted using the `geojson.getFeatures()` method and added to the data source, which automatically results in the data being rendered on the maps symbol layer. The last part of this script block sets the maps camera view using the bounding box of the results using the Map's [setCamera] property.
```JavaScript var query = 'gasoline-station';
This section shows how to use the Maps [Search API](/rest/api/maps/search) to fi
var data = results.geojson.getFeatures(); datasource.add(data);
- // set camera to bounds to show the results
+ // set camera to bounds to<Your Azure Maps Subscription Key> show the results
map.setCamera({ bounds: data.bbox, zoom: 10,
This section shows how to use the Maps [Search API](/rest/api/maps/search) to fi
3. Save the **MapSearch.html** file and refresh your browser. You should see the map centered on Seattle with round-blue pins for locations of gas stations in the area.
- ![A screen shot showing the map resulting from the search, which is a map showing Seattle with round-blue pins at locations of gas stations.](./media/tutorial-search-location/pins-map.png)
+ :::image type="content" source="./media/tutorial-search-location/pins-map.png" alt-text="A screen shot showing the map resulting from the search, which is a map showing Seattle with round-blue pins at locations of gas stations.":::
-4. You can see the raw data that the map is rendering by entering the following HTTPRequest in your browser. Replace `<Your Azure Maps Key>` with your primary key.
+4. You can see the raw data that the map is rendering by entering the following HTTPRequest in your browser. Replace `<Your Azure Maps Subscription Key>` with your subscription key.
```http https://atlas.microsoft.com/search/poi/json?api-version=1.0&query=gasoline%20station&subscription-key={Your-Azure-Maps-Subscription-key}&lat=47.6292&lon=-122.2337&radius=100000
At this point, the MapSearch page can display the locations of points of interes
The map that we've made so far only looks at the longitude/latitude data for the search results. However, the raw JSON that the Maps Search service returns contains additional information about each gas station. Including the name and street address. You can incorporate that data into the map with interactive popup boxes.
-1. Add the following lines of code in the map `ready` event handler after the code to query the fuzzy search service. This code will create an instance of a Popup and add a mouseover event to the symbol layer.
+1. Add the following lines of code in the map `ready` event handler after the code to query the fuzzy search service. This code creates an instance of a Popup and add a mouseover event to the symbol layer.
```javascript // Create a popup but leave it closed so we can update it and display it later.
The map that we've made so far only looks at the longitude/latitude data for the
3. Save the file and refresh your browser. Now the map in the browser shows information popups when you hover over any of the search pins.
- ![A screen shot of a map with information popups that appear when you hover over a search pin.](./media/tutorial-search-location/popup-map.png)
+ :::image type="content" source="./media/tutorial-search-location/popup-map.png" alt-text="A screen shot of a map with information popups that appear when you hover over a search pin.":::
-* For the completed code used in this tutorial, see the [search](https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Search) tutorial on GitHub.
-* To view this sample live, see [Search for points of interest](https://samples.azuremaps.com/?sample=search-for-points-of-interest) on the **Azure Maps Code Samples** site.
+* For the completed code used in this tutorial, see the [search tutorial] on GitHub.
+* To view this sample live, see [Search for points of interest] on the **Azure Maps Code Samples** site.
## Next steps
The next tutorial demonstrates how to display a route between two locations.
[Azure Maps account]: quick-demo-map-app.md#create-an-azure-maps-account [subscription key]: quick-demo-map-app.md#get-the-subscription-key-for-your-account [free account]: https://azure.microsoft.com/free/
-[manage authentication in Azure Maps]: how-to-manage-authentication.md
+[manage authentication in Azure Maps]: how-to-manage-authentication.md
+[search tutorial]: https://github.com/Azure-Samples/AzureMapsCodeSamples/tree/master/Samples/Tutorials/Search
+[Search for points of interest]: https://samples.azuremaps.com/?sample=search-for-points-of-interest
+[MapControlCredential]: /javascript/api/azure-maps-rest/atlas.service.mapcontrolcredential
+[pipeline]: /javascript/api/azure-maps-rest/atlas.service.pipeline
+[searchURL]: /javascript/api/azure-maps-rest/atlas.service.searchurl
+[Search API] /rest/api/maps/search
+[Fuzzy Search service]: /rest/api/maps/search/get-search-fuzzy
+[setCamera]: /javascript/api/azure-maps-control/atlas.map#setcamera-cameraoptionscameraboundsoptionsanimationoptions-
azure-monitor Azure Monitor Agent Troubleshoot Linux Vm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/azure-monitor-agent-troubleshoot-linux-vm.md
Follow the steps below to troubleshoot the latest version of the Azure Monitor a
3. **Verify that the agent is running**: 1. Check if the agent is emitting heartbeat logs to Log Analytics workspace using the query below. Skip if 'Custom Metrics' is the only destination in the DCR: ```Kusto
- Heartbeat | where Category == "Azure Monitor Agent" and 'Computer' == "<computer-name>" | take 10
+ Heartbeat | where Category == "Azure Monitor Agent" and Computer == "<computer-name>" | take 10
``` 2. Check if the agent service is running ```
azure-monitor Opencensus Python https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/opencensus-python.md
OpenCensus maps the following exporters to the types of telemetry that you see i
logger.addHandler(AzureLogHandler()) # Alternatively manually pass in the connection_string
- # logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>)
+ # logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>))
"""Generate random log data.""" for num in range(5):
OpenCensus maps the following exporters to the types of telemetry that you see i
logger = logging.getLogger(__name__) logger.addHandler(AzureLogHandler()) # Alternatively manually pass in the connection_string
- # logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>)
+ # logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>))
properties = {'custom_dimensions': {'key_1': 'value_1', 'key_2': 'value_2'}}
from opencensus.ext.azure.log_exporter import AzureLogHandler
logger = logging.getLogger(__name__) logger.addHandler(AzureLogHandler()) # Alternatively, manually pass in the connection_string
-# logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>)
+# logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>))
properties = {'custom_dimensions': {'key_1': 'value_1', 'key_2': 'value_2'}}
from opencensus.ext.azure.log_exporter import AzureEventHandler
logger = logging.getLogger(__name__) logger.addHandler(AzureLogHandler()) # Alternatively manually pass in the connection_string
-# logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>)
+# logger.addHandler(AzureLogHandler(connection_string=<appinsights-connection-string>))
logger.setLevel(logging.INFO) logger.info('Hello, World!')
azure-monitor Container Insights Hybrid Setup https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/containers/container-insights-hybrid-setup.md
Container insights provides a rich monitoring experience for the Azure Kubernete
## Supported configurations
-The following configurations are officially supported with Container insights. If you have a different version of Kubernetes and operating system versions, send an email to askcoin@microsoft.com.
+The following configurations are officially supported with Container insights. If you have a different version of Kubernetes and operating system versions, please open a support ticket..
- Environments: - Kubernetes on-premises.
azure-monitor Analyze Usage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/logs/analyze-usage.md
Event
``` ## Data volume by computer
-You can analyze the amount of billable data collected from a virtual machine or a set of virtual machines. The **Usage** table doesn't include information about data collected from virtual machines, so these queries use the [find operator](/azure/data-explorer/kusto/query/findoperator) to search all tables that include a computer name. The **Usage** type is omitted because this query is only for analytics of data trends.
+You can analyze the amount of billable data collected from a virtual machine or a set of virtual machines. The **Usage** table doesn't have the granularity to show data volumes for specific virtual machines, so these queries use the [find operator](/azure/data-explorer/kusto/query/findoperator) to search all tables that include a computer name. The **Usage** type is omitted because this query is only for analytics of data trends.
> [!WARNING] > Use [find](/azure/data-explorer/kusto/query/findoperator?pivots=azuremonitor) queries sparingly because scans across data types are [resource intensive](./query-optimization.md#query-details-pane) to execute. If you don't need results per subscription, resource group, or resource name, use the [Usage](/azure/azure-monitor/reference/tables/usage) table as in the preceding queries.
azure-netapp-files Configure Virtual Wan https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/configure-virtual-wan.md
Previously updated : 01/05/2023 Last updated : 03/24/2023
-# Configure Virtual WAN for Azure NetApp Files
+# Configure Virtual WAN for Azure NetApp Files (preview)
You can configure Azure NetApp Files volumes with Standard network features in one or more Virtual WAN spoke virtual networks (VNets). Virtual WAN spoke VNets allow access to the file storage service globally across your Virtual WAN environment.
azure-netapp-files Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/whats-new.md
Azure NetApp Files is updated regularly. This article provides a summary about t
## March 2023
-* [Azure Virtual WAN](configure-virtual-wan.md) is now generally available in [all regions](azure-netapp-files-network-topologies.md#supported-regions) that support standard network features
- * [Disable showmount](disable-showmount.md) (Preview) By default, Azure NetApp Files enables [showmount functionality](/windows-server/administration/windows-commands/showmount) to show NFS exported paths. The setting allows NFS clients tp use the `showmount -e` command to see a list of exports available on the Azure NetApp Files NFS-enabled storage endpoint. This functionality might cause security scanners to flag the Azure NetApp Files NFS service as having a vulnerability because these scanners often use showmount to see what is being returned. In those scenarios, you might want to disable showmount on Azure NetApp Files. This setting allows you to enable/disable showmount for your NFS-enabled storage endpoints.
azure-resource-manager Bicep Functions Lambda https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/bicep/bicep-functions-lambda.md
This article describes the lambda functions to use in Bicep. [Lambda expressions
Bicep lambda function has these limitations: -- Lambda expression can only be specified directly as function arguments in these functions: [`filter()`](#filter), [`map()`](#map), [`reduce()`](#reduce), [`sort()`](#sort), and [`toOrder()`](#toobject).
+- Lambda expression can only be specified directly as function arguments in these functions: [`filter()`](#filter), [`map()`](#map), [`reduce()`](#reduce), [`sort()`](#sort), and [`toObject()`](#toobject).
- Using lambda variables (the temporary variables used in the lambda expressions) inside resource or module array access isn't currently supported. - Using lambda variables inside the [`listKeys`](./bicep-functions-resource.md#list) function isn't currently supported. - Using lambda variables inside the [reference](./bicep-functions-resource.md#reference) function isn't currently supported.
azure-vmware Vmware Hcx Mon Guidance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-vmware/vmware-hcx-mon-guidance.md
Title: VMware HCX Mobility Optimized Networking (MON) guidance
description: Learn about Azure VMware Solution-specific use cases for Mobility Optimized Networking (MON). Previously updated : 3/10/2023 Last updated : 3/24/2023 # VMware HCX Mobility Optimized Networking (MON) guidance >[!NOTE] >
->HCX Mobility Optimized Networking is officially supported by VMware and Azure VMware Solutions from HCX version 4.1.0.
+> VMware HCX Mobility Optimized Networking is officially supported by VMware and Azure VMware Solutions from HCX version 4.1.0.
>[!IMPORTANT] >
Last updated 3/10/2023
> >[Limitations for any HCX deployment including MON](https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-BEC26054-D560-46D0-98B4-7FF09501F801.html) >
->VMware HCX Mobility Optimized Networkign (MON) is not supported with the use of a 3rd party gateway. It may only be used with the T1 gateway directly connected to the T0 gateway with no network virtual appliance (NVA). It may be able to make this configuration function, but we do not support it.
+>VMware HCX Mobility Optimized Networking (MON) is not supported with the use of a 3rd party gateway. It may only be used with the T1 gateway directly connected to the T0 gateway with no network virtual appliance (NVA). You may be able to make this configuration function, but we do not support it.
[HCX Mobility Optimized Networking (MON)](https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-0E254D74-60A9-479C-825D-F373C41F40BC.html) is an optional feature to enable when using [HCX Network Extensions (NE)](configure-hcx-network-extension.md). MON provides optimal traffic routing under certain scenarios to prevent network tromboning between the on-premises and cloud-based resources on extended networks.
Throughout the migration cycle, MON optimizes application mobility for:
- Optimizing and avoiding asymmetric traffic flows between on-premises, Azure VMware Solution, and Azure - In this article, you'll learn about the Azure VMware Solution-specific use cases for MON. - ## Optimize traffic flows across standard and stretched segments on the private cloud side In this scenario, VM1 is migrated to the cloud using the NE, which provides optimal VM to VM latency. As a result, VM1 needs low latency to VM3 on the local Azure VMware Solution segment. We migrate the VM1 gateway from on-premises to Azure VMware Solution (cloud) to ensure an optimal path for traffic (blue line). If the gateway remains on-premises (red line), a tromboning effect and higher latency are observed.
In this scenario, VM1 is migrated to the cloud using the NE, which provides opti
:::image type="content" source="media/tutorial-vmware-hcx/hcx-mon-user-case-diagram-1.png" alt-text="Diagram showing the optimization for VM to VM L2 communication when using stretched networks." border="false"::: -- ## Optimize and avoid asymmetric traffic flows In this scenario, we assume a VM from on-premises has been migrated to Azure VMware Solution and participates in L2, and L3 traffic flows back to on-premises to access services. We also assume some VM communication from Azure (in the Azure VMware Solution connected vNET) could reach down into the Azure VMware Solution private cloud.
If choosing the NE path for example, the MON policy routes have to specifically
Policy routes are evaluated only if the VM gateway is migrated to the cloud. The effect of this configuration is that any matching subnets for the destination get tunneled over the NE appliance. If not matched, they get routed through the T0 gateway. >[!NOTE]
->Special consideration for using MON in Azure VMware Solution is to give the /32 routes advertised over BGP to its peers; this includes on-premises and Azure over the ExpressRoute connection. For example, a VM in Azure learns the path to an Azure VMware Solution VM on an Azure VMware Solution MON enabled segment. Once the return traffic is sent back to the T0 as expected, if the return subnet is an RFC1918 match, traffic is forced over the NE instead of the T0. Then egresses over the ExpressRoute back to Azure on the on-premises side. This can cause confusion for stateful firewalls in the middle and asymmetric routing behavior. It's also a good idea to determine how VMs on NE MON segments will need to access the internet, either via the T0 in Azure VMware Solution or only through the NE back to on-premises.
+>Special consideration for using MON in Azure VMware Solution is to give the /32 routes advertised over BGP to its peers; this includes on-premises and Azure over the ExpressRoute connection. For example, a VM in Azure learns the path to an Azure VMware Solution VM on an Azure VMware Solution MON enabled segment. Once the return traffic is sent back to the T0 gateway as expected, if the return subnet is an RFC1918 match, traffic is forced over the NE instead of the T0. Then egresses over the ExpressRoute back to Azure on the on-premises side. This can cause confusion for stateful firewalls in the middle and asymmetric routing behavior. It's also a good idea to determine how VMs on NE MON segments will need to access the internet, either via the T0 in Azure VMware Solution or only through the NE back to on-premises. In general, all of the default policy routes should be removed to avoid asymmetric traffic. Only enable policy routes if the network infrastructure as been configured in such a way to account for and prevent asymmetric traffic.
:::image type="content" source="media/tutorial-vmware-hcx/hcx-mon-user-case-diagram-3.png" alt-text="Diagram showing the RFC1918 egress and egress traffic flow." border="false"::: As outlined in the above diagram, the importance is to match a policy route to each required subnet. Otherwise, the traffic gets routed over the T0 and not the NE.
-
To learn more about policy routes, see [Mobility Optimized Networking Policy Routes](https://docs.vmware.com/en/VMware-HCX/4.1/hcx-user-guide/GUID-F45B1DB5-C640-4A75-AEC5-45C58B1C9D63.html).-
backup Backup Azure Vms Enhanced Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/backup-azure-vms-enhanced-policy.md
Azure Backup now supports _Enhanced policy_ that's needed to support new Azure o
You must enable backup of Trusted Launch VM through enhanced policy only. Enhanced policy provides the following features: -- Supports *Multiple Backups Per Day* (in preview).
+- Supports *Multiple Backups Per Day*.
- Instant Restore tier is zonally redundant using Zone-redundant storage (ZRS) resiliency. See the [pricing details for Managed Disk Snapshots](https://azure.microsoft.com/pricing/details/managed-disks/). :::image type="content" source="./media/backup-azure-vms-enhanced-policy/enhanced-backup-policy-settings.png" alt-text="Screenshot showing the enhanced backup policy options.":::
Follow these steps:
:::image type="content" source="./media/backup-azure-vms-enhanced-policy/choose-backup-policies-option.png" alt-text="Screenshot showing to choose the backup policies option.":::
-3. Click **+Add**.
+3. Select **+Add**.
:::image type="content" source="./media/backup-azure-vms-enhanced-policy/add-backup-policy.png" alt-text="Screenshot showing to add a backup policy.":::
Follow these steps:
- **Retention range**: Options for retention range are auto-selected based on backup frequency you choose. The default retention for daily, weekly, monthly, and yearly backup points are set to 180 days, 12 weeks, 60 months, and 10 years respectively. You can customize these values as required. :::image type="content" source="./media/backup-azure-vms-enhanced-policy/enhanced-backup-policy-settings.png" alt-text="Screenshot showing to configure the enhanced backup policy.":::
-
-6. Click **Create**.
+
+ >[!Note]
+ >The maximum limit of instant recovery point retention range depends on the number of snapshots you take per day. If the snapshot count is more (for example, every *4 hours* frequency in *24 hours* duration - *6* scheduled snapshots), then the maximum allowed days for retention reduces.
+ >
+ >However, if you choose lower RPO of *12 hours*, the snapshot retention is increased to *30 days*.
+
+6. Select **Create**.
>[!Note] >- The support for Enhanced policy is available in all Azure Public and US Government regions.
backup Backup Azure Vms Introduction https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/backup-azure-vms-introduction.md
Title: About Azure VM backup description: In this article, learn how the Azure Backup service backs up Azure Virtual machines, and how to follow best practices. Previously updated : 09/13/2019 Last updated : 02/27/2023
The following table explains the different types of snapshot consistency:
**Restore queue** | Azure Backup processes restore jobs from multiple storage accounts at the same time, and it puts restore requests in a queue. **Restore copy** | During the restore process, data is copied from the vault to the storage account.<br/><br/> The total restore time depends on the I/O operations per second (IOPS) and the throughput of the storage account.<br/><br/> To reduce the copy time, select a storage account that isn't loaded with other application writes and reads.
+> [!Note]
+> Azure Backup now enables you to back up your Azure VMs multiple times a day using the Enhanced policy. With this capability, you can also define the duration in which your backup jobs would trigger and align your backup schedule with the working hours when there are frequent updates to Azure Virtual Machines. [Learn more](backup-azure-vms-enhanced-policy.md).
+ ### Backup performance These common scenarios can affect the total backup time:
backup Backup Support Matrix Iaas https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/backup-support-matrix-iaas.md
Title: Support matrix for Azure VM backups description: Get a summary of support settings and limitations for backing up Azure VMs by using the Azure Backup service. Previously updated : 12/06/2022 Last updated : 02/27/2023
Back up monthly or yearly| Not supported when you're backing up with the Azure V
Automatically adjust the clock | Not supported.<br/><br/> Azure Backup doesn't automatically adjust for daylight saving time when you're backing up a VM.<br/><br/> Modify the policy manually as needed. [Disable security features for hybrid backup](./backup-azure-security-feature.md) |Not supported. Back up a VM whose machine time is changed | Not supported.<br/><br/> If you change the machine time to a future date/time after enabling backup for that VM, even if the time change is reverted, successful backup isn't guaranteed.
-Do multiple backups per day | Supported through **Enhanced policy** (in preview). <br><br> For hourly backup, the minimum recovery point objective (RPO) is 4 hours and the maximum is 24 hours. You can set the backup schedule to 4, 6, 8, 12, and 24 hours, respectively. [Learn how to back up an Azure VM by using Enhanced policy](backup-azure-vms-enhanced-policy.md).
+Do multiple backups per day | Supported through **Enhanced policy**. <br><br> For hourly backup, the minimum recovery point objective (RPO) is 4 hours and the maximum is 24 hours. You can set the backup schedule to 4, 6, 8, 12, and 24 hours, respectively. <br><br> Note that the maximum limit of instant recovery point retention range depends on the number of snapshots you take per day. If the snapshot count is more (for example, every *4 hours* frequency in *24 hours* duration - *6* scheduled snapshots), then the maximum allowed days for retention reduces. However, if you choose lower RPO of *12* hours, the snapshot retention is increased to *30 days*. <br><br> Learn about how to [back up an Azure VM using Enhanced policy](backup-azure-vms-enhanced-policy.md).
Back up a VM with a deprecated plan when the publisher has removed it from Azure Marketplace | Not supported. <br><br> Backup is possible. However, restore will fail. <br><br> If you've already configured backup for a VM with a deprecated virtual machine offer and encounter a restore error, see [Troubleshoot backup errors with Azure VMs](backup-azure-vms-troubleshoot.md#usererrormarketplacevmnotsupportedvm-creation-failed-due-to-market-place-purchase-request-being-not-present). ## Operating system support (Windows)
Back up Azure VMs with locks | Supported for managed VMs. <br><br> Not supported
[Restore spot VMs](../virtual-machines/spot-vms.md) | Not supported. <br><br/> Azure Backup restores spot VMs as regular Azure VMs. [Restore VMs in an Azure dedicated host](../virtual-machines/dedicated-hosts.md) | Supported.<br></br>When you're restoring an Azure VM through the [Create new](backup-azure-arm-restore-vms.md#create-a-vm) option, the VM can't be restored in the dedicated host, even when the restore is successful. To achieve this, we recommend that you [restore as disks](backup-azure-arm-restore-vms.md#restore-disks). While you're restoring as disks by using the template, create a VM in a dedicated host, and then attach the disks.<br></br>This is not applicable in a secondary region while you're performing [cross-region restore](backup-azure-arm-restore-vms.md#cross-region-restore). Configure standalone Azure VMs in Windows Storage Spaces | Supported.
-[Restore virtual machine scale sets](../virtual-machine-scale-sets/virtual-machine-scale-sets-orchestration-modes.md#scale-sets-with-flexible-orchestration) | Supported for the flexible orchestration model to back up and restore a single Azure VM.
+[Restore Virtual Machine Scale Sets](../virtual-machine-scale-sets/virtual-machine-scale-sets-orchestration-modes.md#scale-sets-with-flexible-orchestration) | Supported for the flexible orchestration model to back up and restore a single Azure VM.
Restore with managed identities | Supported for managed Azure VMs. <br><br> Not supported for classic and unmanaged Azure VMs. <br><br> Cross-region restore isn't supported with managed identities. <br><br> Currently, this is available in all Azure public and national cloud regions. <br><br> [Learn more](backup-azure-arm-restore-vms.md#restore-vms-with-managed-identities). <a name="tvm-backup">Back up trusted launch VMs</a> | Backup is supported. <br><br> Backup of trusted launch VMs is supported through [Enhanced policy](backup-azure-vms-enhanced-policy.md). You can enable backup through a [Recovery Services vault](./backup-azure-arm-vms-prepare.md), the [pane for managing a VM](./backup-during-vm-creation.md#start-a-backup-after-creating-the-vm), and the [pane for creating a VM](backup-during-vm-creation.md#create-a-vm-with-backup-configured). <br><br> **Feature details** <br><br> - Backup is supported in all regions where trusted launch VMs are available. <br><br> - Configuration of backups, alerts, and monitoring for trusted launch VMs is currently not supported through the backup center. <br><br> - Migration of an existing [Gen2 VM](../virtual-machines/generation-2.md) (protected with Azure Backup) to a trusted launch VM is currently not supported. [Learn how to create a trusted launch VM](../virtual-machines/trusted-launch-portal.md?tabs=portal#deploy-a-trusted-launch-vm). <br><br> - Item-level restore is not supported. [Back up confidential VMs](../confidential-computing/confidential-vm-overview.md) | The backup support is in limited preview. <br><br> Backup is supported only for confidential VMs that have no confidential disk encryption and for confidential VMs that have confidential OS disk encryption through a platform-managed key (PMK). <br><br> Backup is currently not supported for confidential VMs that have confidential OS disk encryption through a customer-managed key (CMK). <br><br> **Feature details** <br><br> - Backup is supported in [all regions where confidential VMs are available](../confidential-computing/confidential-vm-overview.md#regions). <br><br> - Backup is supported only if you're using [Enhanced policy](backup-azure-vms-enhanced-policy.md). You can configure backup through the [pane for creating a VM](backup-azure-arm-vms-prepare.md), the [pane for managing a VM](backup-during-vm-creation.md#start-a-backup-after-creating-the-vm), and the [Recovery Services vault](backup-azure-arm-vms-prepare.md). <br><br> - [Cross-region restore](backup-azure-arm-restore-vms.md#cross-region-restore) and file recovery (item-level restore) for confidential VMs are currently not supported.
Azure Backup supports encryption for in-transit and at-rest data.
For network traffic to Azure: -- Backup traffic from servers to the Recovery Services vault is encrypted via Advanced Encryption Standard 256.
+- The Backup traffic from servers to the Recovery Services vault is encrypted via Advanced Encryption Standard 256.
- Backup data is sent over a secure HTTPS link. - Backup data is stored in the Recovery Services vault in encrypted form. - Only you have the encryption key to unlock this data. Microsoft can't decrypt the backup data at any point.
backup Quick Backup Vm Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/quick-backup-vm-portal.md
Title: Quickstart - Back up a VM with the Azure portal description: In this Quickstart, learn how to create a Recovery Services vault, enable protection on an Azure VM, and backup the VM, with the Azure portal. Previously updated : 01/11/2022 Last updated : 02/27/2023 ms.devlang: azurecli
To apply a backup policy to your Azure VMs, follow these steps:
- If you don't want to use the default policy, select **Create New**, and create a custom policy as described in the next procedure.
+> [!Note]
+> With Enhanced policy, you can now back up Azure VMs multiple times a day that helps to perform hourly backups. [Learn more](backup-azure-vms-enhanced-policy.md).
## Select a VM to back up
backup Tutorial Backup Vm At Scale https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/tutorial-backup-vm-at-scale.md
Title: Tutorial - Back up multiple Azure virtual machines description: In this tutorial, learn how to create a Recovery Services vault, define a backup policy, and simultaneously back up multiple virtual machines. Previously updated : 01/11/2022 Last updated : 02/27/2023
After enabling backup:
* However, even if the VM is turned off, it's backed up. Such a VM is known as an offline VM. In this case, the recovery point will be crash-consistent. * Explicit outbound connectivity isn't required to allow backup of Azure VMs.
+> [!Note]
+> You can also set Enhanced policy to back up Azure VMs multiple times a day. Learn about [Enhanced policy](backup-azure-vms-enhanced-policy.md). 
+ ## Initial backup You've enabled backup for the Recovery Services vaults, but an initial backup hasn't been created. It's a disaster recovery best practice to trigger the first backup, so that your data is protected.
backup Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/backup/whats-new.md
You can learn more about the new releases by bookmarking this page or by [subscr
- [Support for selective disk backup with enhanced policy for Azure VM (preview)](#support-for-selective-disk-backup-with-enhanced-policy-for-azure-vm-preview) - [Azure Kubernetes Service backup (preview)](#azure-kubernetes-service-backup-preview) - [Azure Blob vaulted backups (preview)](#azure-blob-vaulted-backups-preview)
+ - [Multiple backups per day for Azure VMs is now generally available](#multiple-backups-per-day-for-azure-vms-is-now-generally-available)
+ - October 2022 - [Multi-user authorization using Resource Guard for Backup vault (in preview)](#multi-user-authorization-using-resource-guard-for-backup-vault-in-preview) - [Enhanced soft delete for Azure Backup (preview)](#enhanced-soft-delete-for-azure-backup-preview)
You can learn more about the new releases by bookmarking this page or by [subscr
- February 2021 - [Backup for Azure Blobs (in preview)](#backup-for-azure-blobs-in-preview) +
+## Multiple backups per day for Azure VMs is now generally available
+
+Azure Backup now enables you to create a backup policy to take multiple backups a day. With this capability, you can also define the duration in which your backup jobs would trigger and align your backup schedule with the working hours when there are frequent updates to Azure Virtual Machines. For more information, see [Back up an Azure VM using Enhanced policy](backup-azure-vms-enhanced-policy.md).
+ ## Immutable vault for Azure Backup is now generally available Azure Backup now supports immutable vaults that help you ensure that recovery points once created can't be deleted before their expiry as per the backup policy (expiry at the time at which the recovery point was created). You can also choose to make the immutability irreversible to offer maximum protection to your backup data, thus helping you protect your data better against various threats, including ransomware attacks and malicious actors.
connectors Connectors Create Api Servicebus https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/connectors/connectors-create-api-servicebus.md
ms.suite: integration Previously updated : 09/30/2022 Last updated : 03/23/2023 tags: connectors
When you create a Consumption logic app workflow, you can select the **Correlate
Large message support is available only for Standard workflows when you use the Service Bus built-in connector operations. For example, you can receive and large messages using the built-in triggers and actions respectively.
+For the Service Bus managed connector, the maximum message size is limited to 1 MB, even when you use a premium tier Service Bus namespace.
+ ### Increase timeout for receiving and sending messages In Standard workflows that use the Service Bus built-in operations, you can increase the timeout for receiving and sending messages. For example, to increase the timeout for receiving a message, [change the following setting in the Azure Functions extension](../azure-functions/functions-bindings-service-bus.md#install-bundle):
container-apps Authentication https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/container-apps/authentication.md
This feature should be used with HTTPS only. Ensure `allowInsecure` is disabled
You can configure your container app for authentication with or without restricting access to your site content and APIs. To restrict app access only to authenticated users, set its *Restrict access* setting to **Require authentication**. To authenticate but not restrict access, set its *Restrict access* setting to **Allow unauthenticated access**.
+Each container app issues its own unique cookie or token for authentication. A client cannot use the same cookie or token provided by one container app to authenticate with another container app, even within the same container app environment.
+ ## Feature architecture The authentication and authorization middleware component is a feature of the platform that runs as a sidecar container on each replica in your application. When enabled, every incoming HTTP request passes through the security layer before being handled by your application.
cosmos-db Choose Model https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/choose-model.md
+
+ Title: Choose between RU-based and vCore-based models
+
+description: Choose whether the RU-based or vCore-based option for Azure Cosmos DB for MongoDB is ideal for your workload.
++++++ Last updated : 03/09/2023++
+# What is RU-based and vCore-based Azure Cosmos DB for MongoDB?
+
+Azure Cosmos DB is a fully managed NoSQL and relational database for modern app development.
+
+Both, the Request Unit (RU) and vCore-based Azure Cosmos DB for MongoDB offering make it easy to use Azure Cosmos DB as if it were a MongoDB database. Both options work without the overhead of complex management and scaling approaches. You can use your existing MongoDB skills and continue to use your favorite MongoDB drivers, SDKs, and tools by pointing your application to the connection string for your account using the API for MongoDB. Additionally, both are cloud-native offerings that can be integrated seamlessly with other Azure services to build enterprise-grade modern applications.
+
+## Choosing between RU-based and vCore-based options
+
+Here are a few key factors to help you decide which is the right architecture for you:
+
+| Factor | RU-based | vCore-based |
+| -- | -- | -|
+| What do you want to do | &bull; Works well if you're trying to build new cloud-native MongoDB apps or refactor existing apps for all the benefits of a cloud-native offering | &bull; Works well if you're trying to lift and shift existing MongoDB apps and run them as-is on a fully supported managed service. |
+| What are your availability needs | &bull; Offers upto [99.999%](../high-availability.md#slas) of availability with multi-region deployments | &bull; Offers competitive SLA (once generally available) |
+| How do you want to scale | &bull; Offers limitless horizontal scalability, instantaneous scale up and granular throughput control. | &bull; Offers high-capacity vertical and horizontal scaling with familiar vCore-based cluster tier options to choose from. |
+| What are your top read & query patterns | &bull; Works well for workloads with more point reads *(fetching a single item by its ID and shard key value)* and lesser long running queries and complex aggregation pipeline operations. | &bull; Works irrespective of the operation types in your workload. Operations may include workloads with long-running queries, complex aggregation pipelines, distributed transactions, joins, etc. |
+
+## Resource and billing differences between the options
+
+There are differences between the offerings in the way the resources are assigned and billed on the platform:
+
+| Resource details | RU-based | vCore-based |
+| -- | -- | -|
+| How are the resources assigned | &bull; This option is a multi-tenant service that instantly assigns resources to the workload to meet its storage and throughput needs. <br/>&bull; Throughput uses the concept of [Request Units (RUs)](../request-units.md). | &bull; This option provides dedicated instances using preset CPU, memory and storage resources that scale to meet your needs. |
+| How are the resources billed | &bull; You pay variable fees for the RUs and consumed storage. <br/>&bull; RU charges are based on the choice of the model: provisioned throughput (standard or autoscale) or serverless. | &bull; You pay consistent flat fee based on the compute (CPU, memory and the number of nodes) and storage. |
+
+## Next steps
+
+- [Create a Go app](quickstart-go.md) using Azure Cosmos DB for MongoDB.
+- Deploy Azure Cosmos DB for MongoDB vCore [using a Bicep template](vcore/quickstart-bicep.md).
cosmos-db Compatibility https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/compatibility.md
+
+ Title: Compatibility and feature support
+
+description: Review Azure Cosmos DB for MongoDB vCore supported features and syntax including; commands, query support, datatypes, aggregation, and operators.
++++++ Last updated : 03/09/2023++
+# MongoDB compatibility and feature support with Azure Cosmos DB for MongoDB vCore
+
+Azure Cosmos DB is Microsoft's fully managed NoSQL and relational database, offering [multiple database APIs](../../choose-api.md). You can communicate with Azure Cosmos DB for MongoDB using the MongoDB drivers, SDKs and tools you're already familiar with. Azure Cosmos DB for MongoDB enables the use of existing client drivers by adhering to the MongoDB wire protocol.
+
+By using the Azure Cosmos DB for MongoDB, you can enjoy the benefits of the MongoDB you're used to, with all of the enterprise capabilities that Azure Cosmos DB provides.
+
+## Protocol Support
+
+The supported operators and any limitations or exceptions are listed here. Any client driver that understands these protocols should be able to connect to Azure Cosmos DB for MongoDB. When you create Azure Cosmos DB for MongoDB vCore clusters, the endpoint is in the format `*.mongocluster.cosmos.azure.com`.
+
+> [!NOTE]
+> This article only lists the supported server commands, and excludes client-side wrapper functions. Client-side wrapper functions such as `deleteMany()` and `updateMany()` internally utilize the `delete()` and `update()` server commands. Functions utilizing supported server commands are compatible with the Azure Cosmos DB for MongoDB.
+
+## Query language support
+
+Azure Cosmos DB for MongoDB provides comprehensive support for MongoDB query language constructs. Below you can find the detailed list of currently supported operations, operators, stages, commands, and options.
+
+## Database commands
+
+Azure Cosmos DB for MongoDB vCore supports the following database commands:
+
+### Query and write operation commands
+
+| Command | Supported |
+|||
+| `change streams` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `delete` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `find` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `findAndModify` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `getLastError` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getMore` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Partial |
+| `insert` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `resetError` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `update` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Session commands
+
+| Command | Supported |
+|||
+| `abortTransaction` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `commitTransaction` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `endSessions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `killAllSessions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `killAllSessionsByPattern` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `killSessions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `refreshSessions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `startSession` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Authentication commands
+
+| Command | Supported |
+|||
+| `authenticate` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getnonce` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `logout` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Geospatial command
+
+| Command | Supported |
+|||
+| `geoSearch` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Query Plan Cache commands
+
+| Command | Supported |
+|||
+| `planCacheClear` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `planCacheClearFilters` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `planCacheListFilters` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `planCacheSetFilter` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Administration commands
+
+| Command | Supported |
+|||
+| `cloneCollectionAsCapped` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `collMod` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Partial |
+| `compact` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `connPoolSync` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `convertToCapped` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `create` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Partial |
+| `createIndexes` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `currentOp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `drop` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `dropDatabase` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `dropConnections` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dropIndexes` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `filemd5` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `fsync` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `fsyncUnlock` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getDefaultRWConcern` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getClusterParameter` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getParameter` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `killCursors` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `killOp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `listCollections` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `listDatabases` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `listIndexes` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `logRotate` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `reIndex` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `renameCollection` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `rotateCertificates` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `setFeatureCompatibilityVersion` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `setIndexCommitQuorum` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `setParameter` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `setDefaultRWConcern` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `shutdown` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### User Management commands
+
+| Command | Supported |
+|||
+| `createUser` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dropAllUsersFromDatabase` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dropUser` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `grantRolesToUser` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `revokeRolesFromUser` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `updateUser` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `usersInfo` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Role Management commands
+
+| Command | Supported |
+|||
+| `createRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dropRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dropAllRolesFromDatabase` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `grantPrivilegesToRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `grantRolesToRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `invalidateUserCache` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `revokePrivilegesFromRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `revokeRolesFromRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `rolesInfo` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `updateRole` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Replication commands
+
+| Command | Supported |
+|||
+| `applyOps` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `hello` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `replSetAbortPrimaryCatchUp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetFreeze` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetGetConfig` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetGetStatus` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetInitiate` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetMaintenance` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetReconfig` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetResizeOplog` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetStepDown` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `replSetSyncFrom` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Sharding commands
+
+| Command | Supported |
+|||
+| `abortReshardCollection` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `addShard` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `addShardToZone` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `balancerCollectionStatus` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `balancerStart` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `balancerStatus` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `balancerStop` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `checkShardingIndex` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `clearJumboFlag` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `cleanupOrphaned` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `cleanupReshardCollection` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `commitReshardCollection` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `configureCollectionBalancing` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `enableSharding` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `flushRouterConfig` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getShardMap` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getShardVersion` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `isdbgrid` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `listShards` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `medianKey` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `moveChunk` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `movePrimary` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `mergeChunks` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `refineCollectionShardKey` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `removeShard` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `removeShardFromZone` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `reshardCollection` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `setShardVersion` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `shardCollection` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `shardingState` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `split` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `splitVector` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `unsetSharding` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `updateZoneKeyRange` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Diagnostics commands
+
+| Command | Supported |
+|||
+| `availableQueryOptions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `buildInfo`| :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `collStats` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `connPoolStats` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `connectionStatus` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Partial |
+| `cursorInfo` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dataSize` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dbHash` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `dbStats` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `driverOIDTest` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `explain`| :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `features` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getCmdLineOpts` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `getLog`| :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `hostInfo` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Partial |
+| `_isSelf` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `listCommands` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `lockInfo` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `netstat` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `ping`| :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `profile` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `serverStatus` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `shardConnPoolStats` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `top` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `validate`| :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `whatsmyuri`| :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Free Monitoring Commands
+
+| Command | Supported |
+|||
+| `getFreeMonitoringStatus` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `setFreeMonitoring` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Auditing command
+
+| Command | Supported |
+|||
+| `logApplicationMessage` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+## Aggregation pipeline
+
+Azure Cosmos DB for MongoDB vCore supports the following aggregation pipeline features:
+
+### Aggregation commands
+
+| Command | Supported |
+|||
+| `aggregate` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `count` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `distinct` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `mapReduce` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Aggregation stages
+
+| Command | Supported |
+|||
+| `$addFields` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$bucket` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$bucketAuto` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$changeStream` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$count` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$currentOp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$facet` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$geoNear` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$graphLookup` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$group` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$indexStats` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$limit` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$listLocalSessions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$listSessions` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$lookup` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$match` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$merge` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$out` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$planCacheStats` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$project` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$redact` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$regexFind` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$regexFindAll` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$regexMatch` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$replaceRoot` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$replaceWith` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$sample` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$set` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$skip` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$sort` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$sortByCount` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$unset` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$unwind` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+> [!NOTE]
+> The `$lookup` aggregation does not yet support using variable expressions using 'let'.
+
+### Boolean expressions
+
+| Command | Supported |
+|||
+| `and` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `not` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `or` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Type expressions
+
+| Command | Supported |
+|||
+| `$type` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toLong` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toString` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$convert` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toDate` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toDecimal` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toObjectId` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toDouble` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toBool` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toInt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$isNumber` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Set expressions
+
+| Command | Supported |
+|||
+| `$anyElementTrue` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$setUnion` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$allElementsTrue` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$setIntersection` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$setDifference` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$setEquals` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$setIsSubset` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Comparison expressions
+
+| Command | Supported |
+|||
+| `$ne` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$lte` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$gt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$gte` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$lt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$eq` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$cmp` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Custom Aggregation expressions
+
+| Command | Supported |
+|||
+| `$accumulator` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$function` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Data size Operators
+
+| Command | Supported |
+|||
+| `$binarySize` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$bsonSize` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Arithmetic expressions
+
+| Command | Supported |
+|||
+| `$add` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$multiply` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$subtract` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$divide` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$ceil` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$floor` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$trunc` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$abs` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$mod` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$pow` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$sqrt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$exp` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$ln` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$log` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$log10` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$round` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Timestamp expressions
+
+| Command | Supported |
+|||
+| `$tsIncrement` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$tsSecond` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Trigonometry expressions
+
+| Command | Supported |
+|||
+| `$sin` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$cos` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$tan` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$asin` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$acos` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$atan` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$atan2` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$asinh` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$acosh` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$atanh` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$sinh` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$cosh` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$tanh` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$degreesToRadians` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$radiansToDegrees` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### String expressions
+
+| Command | Supported |
+|||
+| `$concat` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateToString` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toLower` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$toString` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$substr` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$split` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$strLenCP` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$toUpper` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$indexOfCP` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$substrCP` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$ltrim` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$substrBytes` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$indexOfBytes` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$trim` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$strLenBytes` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateFromString` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$regexFind` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$regexFindAll` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$regexMatch` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$replaceOne` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$replaceAll` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$rtrim` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$strcasecmp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Text expression Operator
+
+| Command | Supported |
+|||
+| `$meta` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Array expressions
+
+| Command | Supported |
+|||
+| `$in` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$size` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$arrayElemAt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$slice` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$filter` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$map` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$objectToArray` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$arrayToObject` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$reduce` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$indexOfArray` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$concatArrays` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$isArray` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$zip` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$reverseArray` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$range` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$first` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$firstN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$last` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$lastN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$maxN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$minN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$sortArray` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Variable operator
+
+| Command | Supported |
+|||
+| `$let` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### System variables
+
+| Command | Supported |
+|||
+| `$$CLUSTERTIME` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$CURRENT` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$DESCEND` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$KEEP` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$NOW` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$PRUNE` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$REMOVE` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$$ROOT` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Window operators
+
+| Command | Supported |
+|||
+| `$sum` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$push` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$addToSet` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$count` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$max` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$min` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$avg` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$stdDevPop` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$bottom` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$bottomN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$covariancePop` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$covarianceSamp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$denseRank` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$derivative` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$documentNumber` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$expMovingAvg` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$first` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$integral` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$last` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$linearFill` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$locf` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$minN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$rank` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$shift` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$stdDevSamp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$top` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$topN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Literal operator
+
+| Command | Supported |
+|||
+| `$literal` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Date expressions
+
+| Command | Supported |
+|||
+| `$dateToString` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$month` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$year` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$hour` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$minute` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$second` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$dayOfMonth` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$week` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$millisecond` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$toDate` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$dateToParts` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$dayOfWeek` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$dayOfYear` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$isoWeek` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$isoWeekYear` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$isoDayOfWeek` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$dateAdd` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateDiff` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateFromParts` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateFromString` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateSubtract` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$dateTrunc` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Conditional expressions
+
+| Command | Supported |
+|||
+| `$cond` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$ifNull` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$switch` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Accumulator expressions
+
+| Command | Supported |
+|||
+| `$accumulator` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$addToSet` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$avg` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$bottom` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$bottomN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$count` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$first` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$firstN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$last` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$lastN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$max` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$maxN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$mergeObjects` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$min` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$push` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$stdDevPop` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$stdDevSamp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$sum` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$top` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$topN` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$stdDevPop` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$stdDevSamp` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$sum` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Miscellaneous operators
+
+| Command | Supported |
+|||
+| `$getField` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$rand` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$sampleRate` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Object expressions
+
+| Command | Supported |
+|||
+| `$mergeObjects` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$objectToArray` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$setField` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+## Data types
+
+Azure Cosmos DB for MongoDB supports documents encoded in MongoDB BSON format.
+
+| Command | Supported |
+|||
+| `Double` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `String` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Object` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Array` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Binary Data` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `ObjectId` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Boolean` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Date` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Null` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `32-bit Integer (int)` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Timestamp` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `64-bit Integer (long)` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `MinKey` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `MaxKey` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Decimal128` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Regular Expression` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `JavaScript` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `JavaScript (with scope)` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Undefined` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+## Indexes and index properties
+
+Azure Cosmos DB for MongoDB vCore supports the following indexes and index properties:
+
+### Indexes
+
+| Command | Supported |
+|||
+| `Single Field Index` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Compound Index` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Multikey Index` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Text Index` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `Geospatial Index` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `Hashed Index` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Index properties
+
+| Command | Supported |
+|||
+| `TTL` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Unique` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Partial` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Case Insensitive` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `Sparse` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `Background` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+## Operators
+
+Azure Cosmos DB for MongoDB vCore supports the following operators:
+
+### Comparison Query operators
+
+| Command | Supported |
+|||
+| `$eq` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$gt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$gte` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$in` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$lt` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$lte` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$ne` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$nin` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Logical operators
+
+| Command | Supported |
+|||
+| `$or` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$and` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$not` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$nor` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Element operators
+
+| Command | Supported |
+|||
+| `$exists` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$type` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Evaluation query operators
+
+| Command | Supported |
+|||
+| `$expr` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$jsonSchema` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$mod` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$regex` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$text` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$where` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Array operators
+
+| Command | Supported |
+|||
+| `$all` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$elemMatch` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$size` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Bitwise Query operators
+
+| Command | Supported |
+|||
+| `$bitsAllClear` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$bitsAllSet` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$bitsAnyClear` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$bitsAnySet` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Miscellaneous operators
+
+| Command | Supported |
+|||
+| `$comment` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$rand` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$natural` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+### Projection operators
+
+| Command | Supported |
+|||
+| `$` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$elemMatch` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$slice` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Update operators
+
+Azure Cosmos DB for MongoDB vCore supports the following update operators:
+
+#### Field update operators
+
+| Command | Supported |
+|||
+| `$currentDate` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$inc` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$min` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$max` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$mul` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$rename` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$set` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$setOnInsert` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$unset` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+#### Array update operators
+
+| Command | Supported |
+|||
+| `$` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$[]` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$[<identifier>]` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$addToSet` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$pop` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$pull` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$push` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$pullAll` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+#### Update modifiers
+
+| Command | Supported |
+|||
+| `$each` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$position` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$slice` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+| `$sort` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+#### Bitwise update operator
+
+| Command | Supported |
+|||
+| `$bit` | :::image type="icon" source="media/compatibility/yes-icon.svg"::: Yes |
+
+### Geospatial operators
+
+| Operator | Supported |
+| | |
+| `$geoIntersects` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$geoWithin` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$near` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$nearSphere` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$box` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$center` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$centerSphere` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$geometry` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$maxDistance` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$minDistance` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$polygon` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+| `$uniqueDocs` | :::image type="icon" source="media/compatibility/no-icon.svg"::: No |
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Migration options for Azure Cosmos DB for MongoDB vCore](migration-options.md)
cosmos-db High Availability https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/high-availability.md
+
+ Title: High availability and replication
+
+description: Review replication and high availability concepts in the context of Azure Cosmos DB for MongoDB vCore.
++++++ Last updated : 02/07/2023++
+# High availability in Azure Cosmos DB for MongoDB vCore
+
+High availability (HA) avoids database downtime by maintaining standby replicas of every node in a cluster. If a node goes down, Azure Cosmos DB for MongoDB vCore switches incoming connections from the failed node to its standby replica.
+
+## How it works
+
+When HA is enabled, Azure Cosmos DB for MongoDB vCore runs one replica node for each primary node in the cluster. The primary and its replica use synchronous replication. The service detects failures on primary nodes and fails over to the replica nodes with zero data loss. The MongoDB connection string remains the same.
+
+When HA is enabled, HA replica nodes are provisioned in a different availability zone from their primary nodes, if the region supports multiple zones and has available capacity. HA replicas don't receive requests from clients unless their primary node fails.
+
+Even without HA enabled, each node has its own locally redundant storage (LRS) with three synchronous replicas maintained by Azure Storage service. If there's a single replica failure, the Azure Storage service detects the failure, and transparently re-creates the relevant data. For LRS storage durability, see metrics on [this page](../../../storage/common/storage-redundancy.md#summary-of-redundancy-options).
+
+## Configure high availability
+
+High availability (HA) can be specified when [creating a cluster](quickstart-portal.md) or in the [**Scale** section of an existing cluster](how-to-scale-cluster.md) in the Azure portal.
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Scale a cluster in Azure Cosmos DB for MongoDB vCore](how-to-scale-cluster.md)
cosmos-db How To Restore Cluster https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/how-to-restore-cluster.md
+
+ Title: Restore a cluster backup
+
+description: Restore an Azure Cosmos DB for MongoDB vCore cluster from a point in time encrypted backup snapshot.
++++++ Last updated : 03/07/2023++
+# Restore a cluster in Azure Cosmos DB for MongoDB vCore
++
+Azure Cosmos DB for MongoDB vCore provides automatic backups that enable point-in-time recovery (PITR) without any action required from users. Backups allow customers to restore a server to any point in time within the retention period.
+
+> [!IMPORTANT]
+> During the preview phase, backups are free of charge.
+
+> [!NOTE]
+> The backup and restore feature is designed to protect against data loss, but it doesn't provide a complete disaster recovery solution. You should ensure that alaredy have your own disaster recovery plan in place to protect against larger scale outages.
+
+## Prerequisites
+
+- An existing Azure Cosmos DB for MongoDB vCore cluster.
+ - If you don't have an Azure subscription, [create an account for free](https://azure.microsoft.com/free).
+ - If you have an existing Azure subscription, [create a new Azure Cosmos DB for MongoDB vCore cluster](quickstart-portal.md).
+
+## Backups
+
+Backups are **performed automatically** in the background. Backups are retained for 35 days for active clusters and 7 days for deleted clusters. All backups are encrypted using AES 256-bit encryption.
+
+> [!NOTE]
+> Backup files can't be exported. They may only be used for restore operations in Azure Cosmos DB for MongoDB vCore.
+
+In Azure regions that support availability zones, backup snapshots are stored in three availability zones. As long as at least one availability zone is online, the cluster is restorable.
+
+## Restore from a backup
+
+The restore process creates a new cluster with the same configuration in the same Azure region, subscription, and resource group as the original. To restore data, customers must create an Azure support request.
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. Navigate to the **Help + support** section and select **Create a support request**. For more information, see [create an Azure support request](../../../azure-portal/supportability/how-to-create-azure-support-request.md#go-to-help--support-from-the-global-header).
+
+1. Once the support ticket is submitted, our team guides you through the process of restoring your data from the backup.
+
+## Next steps
+
+In this guide, we've covered the backup and restore features for Azure Cosmos DB for MongoDB vCore.
+
+> [!div class="nextstepaction"]
+> [Review security concepts](security.md)
cosmos-db How To Scale Cluster https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/how-to-scale-cluster.md
+
+ Title: Scale or configure a cluster
+
+description: Scale an Azure Cosmos DB for MongoDB vCore cluster by changing the tier and disk size or change the configuration by enabling high availability.
++++++ Last updated : 03/07/2023++
+# Scaling and configuring Your Azure Cosmos DB for MongoDB vCore cluster
++
+Azure Cosmos DB for MongoDB vCore provides seamless scalability and high availability. This document serves as a quick guide for developers who want to learn how to scale and configure their clusters. When changes are made, they're performed live to the cluster without downtime.
+
+## Prerequisites
+
+- An existing Azure Cosmos DB for MongoDB vCore cluster.
+ - If you don't have an Azure subscription, [create an account for free](https://azure.microsoft.com/free).
+ - If you have an existing Azure subscription, [create a new Azure Cosmos DB for MongoDB vCore cluster](quickstart-portal.md).
+
+## Navigate to the scale section
+
+To change the configuration of your cluster, use the **Scale** section of the Azure Cosmos DB for MongoDB vCore cluster page in the Azure portal. The portal includes real-time costs for these changes.
+
+> [!TIP]
+> For this guide, we recommend using the resource group name ``msdocs-cosmos-howto-rg``.
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. Navigate to the existing Azure Cosmos DB for MongoDB vCore cluster page.
+
+1. From the Azure Cosmos DB for MongoDB vCore cluster page, select the **Scale** navigation menu option.
+
+ :::image type="content" source="media/how-to-scale-cluster/select-scale-option.png" lightbox="media/how-to-scale-cluster/select-scale-option.png" alt-text="Screenshot of the Scale option on the page for an Azure Cosmos DB for MongoDB vCore cluster.":::
+
+## Change the cluster tier
+
+The cluster tier you select influences the amount of vCores and RAM assigned to your cluster. You can change the cluster tier to suit your needs at any time without downtime. For example, you can increase from **M50** to **M60** or decrease **M50** to **M40** using the Azure portal.
+
+1. To change the cluster tier, select the new tier from the drop-down menu.
+
+ :::image type="content" source="media/how-to-scale-cluster/configure-tier.png" alt-text="Screenshot of the cluster tier option in the Scale page of a cluster.":::
+
+ > [!NOTE]
+ > This change is performed live to the cluster without downtime.
+
+1. Select **Save** to persist your change.
+
+## Increase disk size
+
+You can increase the storage size to give your database more room to grow. For example, you can increase the storage from **128 GB** to **256 GB**.
+
+1. To increase the storage size, select the new size from the drop-down menu.
+
+ :::image type="content" source="media/how-to-scale-cluster/configure-storage.png" alt-text="Screenshot of the storage per node option in the Scale page of a cluster.":::
+
+ > [!NOTE]
+ > This change is performed live to the cluster without downtime. Also, storage size can only be increased, not decreased.
+
+1. Select **Save** to persist your change.
+
+## Enable or disable high availability
+
+You can enable or disable high availability (HA) to suit your needs. HA avoids database downtime by maintaining replica nodes of every primary node in a cluster. If a primary node goes down, incoming connections are automatically redirected to its replica node, ensuring that there's minimal downtime.
+
+1. To enable or disable HA, toggle the checkbox option.
+
+ :::image type="content" source="media/how-to-scale-cluster/configure-high-availability.png" alt-text="Screenshot of the high availability checkbox in the Scale page of a cluster.":::
+
+1. Select **Save** to persist your change.
+
+## Next steps
+
+In this guide, we've shown that scaling and configuring your Cosmos DB for MongoDB vCore cluster in the Azure portal is a straightforward process. The Azure portal includes the ability to adjust the cluster tier, increase storage size, and enable or disable high availability without any downtime.
+
+> [!div class="nextstepaction"]
+> [Restore a Azure Cosmos DB for MongoDB vCore cluster](how-to-restore-cluster.md)
cosmos-db Introduction https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/introduction.md
+
+ Title: Introduction/Overview
+
+description: Learn about Azure Cosmos DB for MongoDB vCore, a fully managed MongoDB-compatible database for building modern applications with a familiar architecture.
++++++ Last updated : 03/07/2023++
+# What is Azure Cosmos DB for MongoDB vCore?
+
+Azure Cosmos DB for MongoDB vCore provides developers with a fully managed MongoDB-compatible database service for building modern applications with a familiar architecture. With Cosmos DB for MongoDB vCore, developers can enjoy the benefits of native Azure integrations, low total cost of ownership (TCO), and the familiar vCore architecture when migrating existing applications or building new ones.
+
+## Effortless integration with the Azure platform
+
+Azure Cosmos DB for MongoDB vCore provides a comprehensive and integrated solution for resource management, making it easy for developers to seamlessly manage their resources using familiar Azure tools. The service features deep integration into various Azure products, such as Azure Monitor and Azure CLI. This deep integration ensures that developers have everything they need to work efficiently and effectively.
+
+Developers can rest easy knowing that they have access to one unified support team for all their services, eliminating the need to juggle multiple support teams for different services.
+
+## Low total cost of ownership (TCO)
+
+Azure Cosmos DB for MongoDB's scalable architecture is designed to deliver the best performance and cost efficiency for your workloads. Visit the [pricing page](https://azure.microsoft.com/pricing/details/cosmos-db/) to learn more about pricing for each cluster tier or price out a cluster in the Azure portal. With optional high availability (HA), there's no need to pay for resources you don't need for workloads such as development and testing. With HA disabled, cost savings are passed on to you in the form of a reduced per-hour cost.
+
+Here are the current tiers for the service:
+
+| Cluster tier | Base storage | RAM | vCPUs |
+| | | | |
+| M30 | 128 GB | 8 GB | 2 |
+| M40 | 128 GB | 16 GB | 4 |
+| M50 | 128 GB | 32 GB | 8 |
+| M60 | 128 GB | 64 GB | 16 |
+| M80 | 128 GB | 128 GB | 32 |
+
+Azure Cosmos DB for MongoDB vCore is organized into easy to understand cluster tiers based on vCPUs, RAM, and attached storage. These tiers make it easy to lift and shift your existing workloads or build new applications.
+
+## Flexibility for developers
+
+Cosmos DB for MongoDB vCore is built with flexibility for developers in mind. The service offers high capacity vertical and horizontal scaling with no shard key required until the database surpasses TBs. The service also supports automatically sharding existing databases with no downtime. Developers can easily scale their clusters up or down, vertically and horizontally, all with no downtime, to meet their needs.
+
+## Next steps
+
+- Read more about [feature compatibility with MongoDB](compatibility.md).
+- Review options for [migrating from MongoDB to Azure Cosmos DB for MongoDB vCore](migration-options.md)
+- Get started by [creating an account](quickstart-portal.md).
cosmos-db Migration Options https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/migration-options.md
+
+ Title: Migrate data from MongoDB
+
+description: Learn about the various options to migrate your data from other MongoDB sources to Azure Cosmos DB for MongoDB vCore.
++++++ Last updated : 03/09/2023++
+# Options for migrating data to Azure Cosmos DB for MongoDB vCore
+
+This document describes the various options to lift and shift your MongoDB workloads to Azure Cosmos DB for MongoDB vCore-based offering.
+
+## Native MongoDB tools (Offline)
+
+- You can use the native MongoDB tools such as *mongodump/mongorestore*, *mongoexport/mongoimport* to migrate datasets offline (without replicating live changes) to Azure Cosmos DB for MongoDB vCore-based offering.
+- *mongodump/mongorestore* works well for migrating your entire MongoDB database. The compact BSON format makes more efficient use of network resources as the data is inserted into Azure Cosmos DB.
+ - *mongodump* exports your existing data as a BSON file.
+ - *mongorestore* imports your BSON file dump into Azure Cosmos DB.
+- *mongoexport/mongoimport* works well for migrating a subset of your MongoDB database.
+ - *mongoexport* exports your existing data to a human-readable JSON or CSV file.
+ - *mongoexport* takes an argument specifying the subset of your existing data to export.
+ - *mongoimport* opens a JSON or CSV file and inserts the content into the target database instance (Azure Cosmos DB in this case.).
+ - Since JSON and CSV aren't compact formats, you may incur excess network charges as *mongoimport* sends data to Azure Cosmos DB.
+- Here's how you can [migrate data to Azure Cosmos DB for MongoDB vCore using the native MongoDB tools](../tutorial-mongotools-cosmos-db.md#perform-the-migration).
+
+## Data migration using Azure Databricks (Offline/Online)
+
+- This method offers full control of the migration rate and data transformation. It can also support large datasets that are in TBs in size.
+- [Azure Databricks](https://azure.microsoft.com/services/databricks/) is a platform as a service (PaaS) offering for [Apache Spark](https://spark.apache.org/). You can use Azure Databricks to do an offline/online migration of databases from MongoDB to Azure Cosmos DB for MongoDB.
+- Here's how you can [migrate data to Azure Cosmos DB for MongoDB vCore offline using Azure Databricks](../migrate-databricks.md#provision-an-azure-databricks-cluster)
+
+## Next steps
+
+- Migrate data to Azure Cosmos DB for MongoDB vCore [using native MongoDB tools](../tutorial-mongotools-cosmos-db.md).
+- Migrate data to Azure Cosmos DB for MongoDB vCore [using Azure Databricks](../migrate-databricks.md).
cosmos-db Quickstart Bicep https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/quickstart-bicep.md
+
+ Title: |
+ Quickstart: Deploy a cluster by using a Bicep template
+
+description: In this quickstart, create a new Azure Cosmos DB for MongoDB vCore cluster to store databases, collections, and documents by using a Bicep template.
++++++ Last updated : 03/07/2023++
+# Quickstart: Create an Azure Cosmos DB for MongoDB vCore cluster by using a Bicep template
++
+In this quickstart, you create a new Azure Cosmos DB for MongoDB vCore cluster. This cluster contains all of your MongoDB resources: databases, collections, and documents. The cluster provides a unique endpoint for various tools and SDKs to connect to Azure Cosmos DB and perform everyday operations.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free).
+
+## Review the Bicep file
+
+The Bicep file used in this quickstart is from [Azure Quickstart Templates](/samples/azure/azure-quickstart-templates/cosmosdb-free/).
+
+```bicep
+@description('Azure Cosmos DB MongoDB vCore cluster name')
+@maxLength(44)
+param clusterName string = 'msdocs-${uniqueString(resourceGroup().id)}'
+
+@description('Location for the cluster.')
+param location string = resourceGroup().location
+
+@description('Username for admin user')
+param adminUsername string
+
+@secure()
+@description('Password for admin user')
+@minLength(8)
+@maxLength(128)
+param adminPassword string
+
+resource cluster 'Microsoft.DocumentDB/mongoClusters@2022-10-15-preview' = {
+ name: clusterName
+ location: location
+ properties: {
+ administratorLogin: adminUsername
+ administratorLoginPassword: adminPassword
+ nodeGroupSpecs: [
+ {
+ kind: 'Shard'
+ nodeCount: 1
+ sku: 'M40'
+ diskSizeGB: 128
+ enableHa: false
+ }
+ ]
+ }
+}
+
+resource firewallRules 'Microsoft.DocumentDB/mongoClusters/firewallRules@2022-10-15-preview' = {
+ parent: cluster
+ name: 'AllowAllAzureServices'
+ properties: {
+ startIpAddress: '0.0.0.0'
+ endIpAddress: '0.0.0.0'
+ }
+}
+```
+
+Two Azure resources are defined in the Bicep file:
+
+- [`Microsoft.DocumentDB/databaseAccounts`](/azure/templates/microsoft.documentdb/databaseAccounts?pivots=deployment-language-bicep): Creates an Azure Cosmos DB for MongoDB vCore cluster.
+ - [`Microsoft.DocumentDB/databaseAccounts/sqlDatabases`](/azure/templates/microsoft.documentdb/databaseAccounts?pivots=deployment-language-bicep): Creates firewall rules for the Azure Cosmos DB for MongoDB vCore cluster.
+
+## Deploy the Bicep file
+
+Create an Azure Cosmos DB for MongoDB vCore cluster by using the Bicep template.
+
+### [Azure CLI](#tab/azure-cli)
+
+1. Create shell variables for *resourceGroupName*, and *location*
+
+ ```azurecli
+ # Variable for resource group name and location
+ resourceGroupName="msdocs-cosmos-quickstart-rg"
+ location="eastus"
+ ```
+
+1. If you haven't already, sign in to the Azure CLI using the [`az login`](/cli/azure/reference-index#az-login) command.
+
+1. Use the [`az group create`](/cli/azure/group#az-group-create) command to create a new resource group in your subscription.
+
+ ```azurecli
+ az group create \
+ --name $resourceGroupName \
+ --location $location
+ ```
+
+1. Use [`az deployment group create`](/cli/azure/deployment/group#az-deployment-group-create) to deploy the bicep template. You're then prompted to enter a value for the `adminUsername` and `adminPassword` parameters.
+
+ ```azurecli
+ az deployment group create \
+ --resource-group $resourceGroupName \
+ --template-file 'main.bicep'
+ ```
+
+ > [!TIP]
+ > Alternatively, use the ``--parameters`` option to pass in a parameters file with pre-defined values.
+ >
+ > ```azurecli
+ > az deployment group create \
+ > --resource-group $resourceGroupName \
+ > --template-file 'main.bicep' \
+ > --parameters @main.parameters.json
+ > ```
+ >
+ > This example JSON file injects `clusteradmin` and `P@ssw.rd` values for the `adminUsername` and `adminPassword` parameters respectively.
+ >
+ > ```json
+ > {
+ > "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
+ > "contentVersion": "1.0.0.0",
+ > "parameters": {
+ > "adminUsername": {
+ > "value": "clusteradmin"
+ > },
+ > "adminPassword": {
+ > "value": "P@ssw.rd"
+ > }
+ > }
+ > }
+ > ```
+ >
+
+1. Wait for the deployment operation to complete before moving on.
+
+### [Azure PowerShell](#tab/azure-powershell)
+
+1. Create shell variables for *RESOURCE_GROUP_NAME*, and *LOCATION*
+
+ ```azurepowershell
+ # Variable for resource group name and location
+ $RESOURCE_GROUP_NAME = "msdocs-cosmos-quickstart-rg"
+ $LOCATION = "East US"
+ ```
+
+1. If you haven't already, sign in to Azure PowerShell using the [`Connect-AzAccount`](/powershell/module/az.accounts/connect-azaccount) cmdlet.
+
+1. Use the [`New-AzResourceGroup`](/powershell/module/az.resources/new-azresourcegroup) cmdlet to create a new resource group in your subscription.
+
+ ```azurepowershell
+ $parameters = @{
+ Name = $RESOURCE_GROUP_NAME
+ Location = $LOCATION
+ }
+ New-AzResourceGroup @parameters
+ ```
+
+1. Use [`New-AzResourceGroupDeployment`](/powershell/module/az.resources/new-azresourcegroupdeployment) to deploy the bicep template. You're then prompted to enter a value for the `adminUsername` and `adminPassword` parameters.
+
+ ```azurepowershell
+ $parameters = @{
+ ResourceGroupName = $RESOURCE_GROUP_NAME
+ TemplateFile = "main.bicep"
+ }
+ New-AzResourceGroupDeployment @parameters
+ ```
+
+ > [!TIP]
+ > Alternatively, use the ``-TemplateParameterFile`` option to pass in a parameters file with pre-defined values.
+ >
+ > ```azurepowershell
+ > $parameters = @{
+ > ResourceGroupName = $RESOURCE_GROUP_NAME
+ > TemplateFile = "main.bicep"
+ > TemplateParameterFile = "main.parameters.json"
+ > }
+ > New-AzResourceGroupDeployment @parameters
+ > ```
+ >
+ > This example JSON file injects `clusteradmin` and `P@ssw.rd` values for the `adminUsername` and `adminPassword` parameters respectively.
+ >
+ > ```json
+ > {
+ > "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
+ > "contentVersion": "1.0.0.0",
+ > "parameters": {
+ > "adminUsername": {
+ > "value": "clusteradmin"
+ > },
+ > "adminPassword": {
+ > "value": "P@ssw.rd"
+ > }
+ > }
+ > }
+ > ```
+ >
+
+1. Wait for the deployment operation to complete before moving on.
+++
+## Review deployed resources
+
+List the resources deployed by the Bicep template to your target resource group.
+
+### [Azure CLI](#tab/azure-cli)
+
+1. Use [`az resource list`](/cli/azure/resource#az-resource-list) to get a list of resources in your resource group.
+
+ ```azurecli
+ az resource list \
+ --resource-group $resourceGroupName \
+ --location $location \
+ --output tsv
+ ```
+
+1. In the example output, look for resources that have a type of `Microsoft.DocumentDB/mongoClusters`. Here's an example of the type of output to expect:
+
+ ```output
+ Name ResourceGroup Location Type Status
+ -- - - --
+ msdocs-sz2dac3xtwzzu msdocs-cosmos-quickstart-rg eastus Microsoft.DocumentDB/mongoClusters
+ ```
+
+### [Azure PowerShell](#tab/azure-powershell)
+
+1. Use [`Get-AzResource`](/powershell/module/az.resources/get-azresource) to get a list of resources in your resource group.
+
+ ```azurepowershell
+ $parameters = @{
+ ResourceGroupName = $RESOURCE_GROUP_NAME
+ }
+ Get-AzResource @parameters
+ ```
+
+1. In the example output, look for resources that have a type of `Microsoft.DocumentDB/mongoClusters`. Here's an example of the type of output to expect:
+
+ ```output
+ Name : msdocs-sz2dac3xtwzzu
+ ResourceGroupName : msdocs-cosmos-quickstart-rg
+ ResourceType : Microsoft.DocumentDB/mongoClusters
+ Location : eastus
+ ResourceId : /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/msdocs-cosmos-quickstart-rg/providers/Microsoft.DocumentDB/mongoClusters/msdocs-sz2dac3xtwzzu
+ Tags :
+ ```
+
++
+## Clean up resources
+
+When you're done with your Azure Cosmos DB for MongoDB vCore cluster, you can delete the Azure resources you created so you don't incur more charges.
+
+### [Azure CLI](#tab/azure-cli)
+
+1. Use [`az group delete`](/cli/azure/group#az-group-delete) to remove the resource group from your subscription.
+
+ ```azurecli
+ az group delete \
+ --name $resourceGroupName
+ ```
+
+### [Azure PowerShell](#tab/azure-powershell)
+
+1. Use [`Remove-AzResourceGroup`](/powershell/module/az.resources/remove-azresourcegroup) to remove the resource group from your subscription.
+
+ ```azurepowershell
+ $parameters = @{
+ Name = $RESOURCE_GROUP_NAME
+ }
+ Remove-AzResourceGroup @parameters
+ ```
+++
+## Next steps
+
+In this guide, you learned how to create an Azure Cosmos DB for MongoDB vCore cluster. You can now migrate data to your cluster.
+
+> [!div class="nextstepaction"]
+> [Migrate data to Azure Cosmos DB for MongoDB vCore](migration-options.md)
cosmos-db Quickstart Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/quickstart-portal.md
+
+ Title: |
+ Quickstart: Create a new cluster
+
+description: In this quickstart, create a new Azure Cosmos DB for MongoDB vCore cluster to store databases, collections, and documents by using the Azure portal.
++++++ Last updated : 03/07/2023++
+# Quickstart: Create an Azure Cosmos DB for MongoDB vCore cluster by using the Azure portal
++
+In this quickstart, you create a new Azure Cosmos DB for MongoDB vCore cluster. This cluster contains all of your MongoDB resources: databases, collections, and documents. The cluster provides a unique endpoint for various tools and SDKs to connect to Azure Cosmos DB and perform everyday operations.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free).
+
+## Create a cluster
+
+Create a MongoDB cluster by using Azure Cosmos DB for MongoDB vCore.
+
+> [!TIP]
+> For this guide, we recommend using the resource group name ``msdocs-cosmos-quickstart-rg``.
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. From the Azure portal menu or the **Home page**, select **Create a resource**.
+
+1. On the **New** page, search for and select **Azure Cosmos DB**.
+
+1. On the **Which API best suits your workload?** page, select the **Create** option within the **Azure Cosmos DB for MongoDB** section. For more information, see [API for MongoDB and it's various models](../choose-model.md).
+
+ :::image type="content" source="media/quickstart-portal/select-api-option.png" lightbox="media/quickstart-portal/select-api-option.png" alt-text="Screenshot of the select API option page for Azure Cosmos DB.":::
+
+1. On the **Which type of resource?** page, select the **Create** option within the **vCore cluster** section. For more information, see [API for MongoDB vCore overview](introduction.md).
+
+ :::image type="content" source="media/quickstart-portal/select-resource-type.png" alt-text="Screenshot of the select resource type option page for Azure Cosmos DB for MongoDB.":::
+
+1. On the **Create Azure Cosmos DB for MongoDB cluster** page, select the **Configure** option within the **Cluster tier** section.
+
+ :::image type="content" source="media/quickstart-portal/select-cluster-option.png" alt-text="Screenshot of the configure cluster option for a new Azure Cosmos DB for MongoDB cluster.":::
+
+1. On the **Scale** page, leave the options set to their default values:
+
+ | Setting | Value |
+ | | |
+ | **Node count** | Single node |
+ | **Cluster tier** | M30 Tier, 2 vCores, 8-GiB RAM |
+ | **Storage per node** | 128 GiB |
+
+1. Leave the **High availability** option unselected. In the high availability (HA) acknowledgment section, select **I understand**. Finally, select **Save** to persist your changes to the cluster tier.
+
+ :::image type="content" source="media/quickstart-portal/configure-scale.png" alt-text="Screenshot of cluster tier and scale options for a cluster.":::
+
+1. Back on the cluster page, enter the following information:
+
+ | Setting | Value | Description |
+ | | | |
+ | Subscription | Subscription name | Select the Azure subscription that you wish to use for this Azure Cosmos DB for MongoDB cluster. |
+ | Resource Group | Resource group name | Select a resource group, or select **Create new**, then enter a unique name for the new resource group. |
+ | cluster Name | A unique name | Enter a name to identify your Azure Cosmos DB for MongoDB cluster. The name is used as part of a fully qualified domain name (FQDN) with a suffix of *documents.azure.com*, so the name must be globally unique. The name can only contain lowercase letters, numbers, and the hyphen (-) character. The name must also be between 3-44 characters in length. |
+ | Location | The region closest to your users | Select a geographic location to host your Azure Cosmos DB for MongoDB cluster. Use the location that is closest to your users to give them the fastest access to the data. |
+ | MongoDB version | Version of MongoDB to run in your cluster | This value is set to a default of **5.0** |
+ | Admin username | Provide a username to access the cluster | This user is created on the cluster as a user administrator. |
+ | Password | Use a unique password to pair with the username | Password must be at least eight characters and at most 128 characters. |
+
+ :::image type="content" source="media/quickstart-portal/configure-cluster.png" alt-text="Screenshot of various configuration options for a cluster.":::
+
+1. Select **Next: Networking**.
+
+1. In the **Networking** section, select **Allow public access from Azure services**. Additionally, add a firewall rule to give your client device or applications access to the cluster.
+
+ :::image type="content" source="media/quickstart-portal/configure-cluster.png" alt-text="Screenshot of networking and firewall options for a cluster.":::
+
+ > [!NOTE]
+ > In many corporate environments, developer machine IPs are hidden due to a VPN. In these cases, it's recommended to start with allowing access to all IPs for connection testing initially before refining the allow-list.
+
+1. Select **Review + create**.
+
+1. Review the settings you provide, and then select **Create**. It takes a few minutes to create the cluster. Wait for the portal page to display **Your deployment is complete** before moving on.
+
+1. Select **Go to resource** to go to the Azure Cosmos DB for MongoDB cluster page.
+
+ :::image type="content" source="media/quickstart-portal/deployment-complete.png" alt-text="Screenshot of the deployment page for a cluster.":::
+
+## Get cluster credentials
+
+Get the connection string you need to connect to this cluster using your application code.
+
+1. From the Azure Cosmos DB for MongoDB vCore cluster page, select the **Connection strings** navigation menu option.
+
+ :::image type="content" source="media/quickstart-portal/select-connection-strings-option.png" alt-text="Screenshot of the connection strings option on the page for a cluster.":::
+
+1. Record the value from the **Connection string** field.
+
+ :::image type="content" source="media/quickstart-portal/connection-string-value.png" alt-text="Screenshot of the connection string credential for a cluster.":::
+
+ > [!IMPORTANT]
+ > The connection string in the portal does not include the username and password values. You must replace the `<user>` and `<password>` placeholders with the credentials you used when you originally created the cluster.
+
+## Clean up resources
+
+When you're done with Azure Cosmos DB for MongoDB vCore cluster, you can delete the Azure resources you created so you don't incur more charges.
+
+1. In the Azure portal search bar, search for and select **Resource groups**.
+
+1. In the list, select the resource group you used for this quickstart.
+
+ :::image type="content" source="media/quickstart-portal/locate-resource-group.png" alt-text="Screenshot of a list of resource groups filtered down to a specific prefix.":::
+
+1. On the resource group page, select **Delete resource group**.
+
+ :::image type="content" source="media/quickstart-portal/select-delete-resource-group-option.png" alt-text="Screenshot of the delete resource group option in the menu for a specific resource group.":::
+
+1. In the deletion confirmation dialog, enter the name of the resource group to confirm that you intend to delete it. Finally, select **Delete** to permanently delete the resource group.
+
+ :::image type="content" source="media/quickstart-portal/delete-resource-group-dialog.png" alt-text="Screenshot of the delete resource group confirmation dialog with the name of the group filled out.":::
+
+## Next steps
+
+In this guide, you learned how to create an Azure Cosmos DB for MongoDB vCore cluster. You can now migrate data to your cluster.
+
+> [!div class="nextstepaction"]
+> [Migrate data to Azure Cosmos DB for MongoDB vCore](migration-options.md)
cosmos-db Security https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/security.md
+
+ Title: Security options and features
+
+description: Review security options and built-in security mechanisms for Azure Cosmos DB for MongoDB vCore accounts.
+++++ Last updated : 02/07/2023++
+# Security in Azure Cosmos DB for MongoDB vCore
+
+This page outlines the multiple layers of security available to protect the data in your cluster.
+
+## In transit
+
+Encryption (SSL/TLS) is always enforced, and if you attempt to connect to your cluster without encryption, that attempt fails. Only connections via a MongoDB client are accepted and encryption is always enforced.
+
+Whenever data is written to Azure Cosmos DB for MongoDB vCore, your data is encrypted in-transit with Transport Layer Security 1.2.
+
+## At rest
+
+Azure Cosmos DB for MongoDB vCore uses the FIPS 140-2 validated cryptographic module for storage encryption of data at-rest. Data, including all backups, are encrypted on disk, including the temporary files. The service uses the AES 256-bit cipher included in Azure storage encryption, and the keys are system-managed. Storage encryption is always on, and can't be disabled.
+
+## Network security options
+
+This section outlines various network security options you can configure for your account.
+
+### No access
+
+**No Access** is the default option for a newly created cluster if public or private access isn't enabled. In this case, no computers, whether inside or outside of Azure, can connect to the database nodes.
+
+### Public IP access with firewall
+
+In the public access option, a public IP address is assigned to the cluster, and access to the cluster is protected by a firewall.
+
+## Firewall overview
+
+Azure Cosmos DB for MongoDB vCore uses a server-level firewall to prevent all access to your cluster until you specify which computers have permission. The firewall grants access to the cluster based on the originating IP address of each request. To configure your firewall, you create firewall rules that specify ranges of acceptable IP addresses.
+
+Firewall rules enable clients to access your cluster and all the databases within it. Server-level firewall rules can be configured using the Azure portal or programmatically using Azure tools such as the Azure CLI.
+
+By default, the firewall blocks all access to your cluster. To begin using your cluster from another computer, you need to specify one or more server-level firewall rules to enable access to your cluster. Use the firewall rules to specify which IP address ranges from the Internet to allow. Firewall rules don't affect access to the Azure portal website itself. Connection attempts from the internet and Azure must first pass through the firewall before they can reach your databases.
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Migrate MongoDB data to Azure Cosmos DB for MongoDB vCore](migration-options.md)
cosmos-db Tutorial Nodejs Web App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/mongodb/vcore/tutorial-nodejs-web-app.md
+
+ Title: |
+ Tutorial: Build a Node.js web application
+
+description: In this tutorial, create a Node.js web application that connects to an Azure Cosmos DB for MongoDB vCore cluster and manages documents within a collection.
++++++ Last updated : 03/09/2023++
+# Tutorial: Connect a Node.js web app with Azure Cosmos DB for MongoDB vCore
+
+The [MERN (MongoDB, Express, React.js, Node.js) stack](https://www.mongodb.com/mern-stack) is a popular collection of technologies used to build many modern web applications. With Azure Cosmos DB for MongoDB vCore, you can build a new web application or migrate an existing application using MongoDB drivers that you're already familiar with. In this tutorial, you:
+
+> [!div class="checklist"]
+>
+> - Set up your environment
+> - Test the MERN application with a local MongoDB container
+> - Test the MERN application with the Azure Cosmos DB for MongoDB vCore cluster
+> - Deploy the MERN application to Azure App Service
+>
+
+## Prerequisites
+
+To complete this tutorial, you need the following resources:
+
+- An existing Azure Cosmos DB for MongoDB vCore cluster.
+ - If you don't have an Azure subscription, [create an account for free](https://azure.microsoft.com/free).
+ - If you have an existing Azure subscription, [create a new Azure Cosmos DB for MongoDB vCore cluster](quickstart-portal.md?tabs=azure-cli).
+- A [GitHub account](https://github.com/join).
+ - GitHub comes with free Codespaces hours for all users. For more information, see [GitHub Codespaces free utilization](https://github.com/features/codespaces#pricing).
+
+## 1 - Set up your environment
+
+Let's start by setting up your dev environment. You have the choice of **GitHub Codespaces** or **Visual Studio Code** as your integrated development environment (IDE).
+
+### [GitHub Codespaces](#tab/github-codespaces)
+
+For the most straightforward dev environment, we use GitHub Codespaces so that you have the correct developer tools and dependencies preinstalled on your machine. Codespaces also preconfigures your local MongoDB database for testing.
+
+1. Create a new GitHub Codespace on the `main` branch of the [`azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app`](https://github.com/azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app) GitHub repository.
+
+ > [!div class="nextstepaction"]
+ > [Open this project in GitHub Codespaces](https://github.com/azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app/codespaces)
+
+1. Wait for the Codespace to start. This startup process can take two to three minutes.
+
+1. Open a new terminal in the codespace.
+
+ > [!TIP]
+ > You can use the main menu to navigate to the **Terminal** menu option and then select the **New Terminal** option.
+ >
+ > :::image type="content" source="media/tutorial-nodejs-web-app/open-terminal-option.png" lightbox="media/tutorial-nodejs-web-app/open-terminal-option.png" alt-text="Screenshot of the codespaces menu option to open a new terminal.":::
+
+1. Check the versions of the tools you use in this tutorial.
+
+ ```shell
+ docker --version
+
+ node --version
+
+ npm --version
+
+ az --version
+ ```
+
+ > [!NOTE]
+ > This tutorial requires the following versions of each tool which are preinstalled in your environment:
+ >
+ > | Tool | Version |
+ > | | |
+ > | Docker | &ge; 20.10.0 |
+ > | Node.js | &ge; 18.0150 |
+ > | NPM | &ge; 9.5.0 |
+ > | Azure CLI | &ge; 2.46.0 |
+ >
+
+### [Visual Studio Code](#tab/visual-studio-code)
+
+Alternatively, you can complete this tutorial in [Visual Studio Code](https://code.visualstudio.com) with software installed on your local machine.
+
+1. Make sure you have the following prerequisites installed:
+
+ | Tool | Version |
+ | | |
+ | [Docker](https://www.docker.com/) | &ge; 20.10.0 |
+ | [Node.js](https://nodejs.org/) | &ge; 18.0150 |
+ | [Node Package Manager (npm)](https://nodejs.org/) | &ge; 9.5.0 |
+ | [Azure CLI](/cli/azure) | &ge; 2.46.0 |
+
+1. Make sure you have the following extensions installed:
+
+ | Extension | Marketplace link |
+ | | |
+ | MongoDB for VS Code | [mongodb.mongodb-vscode](https://marketplace.visualstudio.com/items?itemName=mongodb.mongodb-vscode) |
+
+1. Open **Visual Studio Code** with an empty workspace.
+
+1. Open a new terminal.
+
+ > [!TIP]
+ > You can use the main menu to navigate to the **Terminal** menu option and then select the **New Terminal** option.
+ >
+ > :::image type="content" source="media/tutorial-nodejs-web-app/open-terminal-option.png" lightbox="media/tutorial-nodejs-web-app/open-terminal-option.png" alt-text="Screenshot of the menu option to open a new terminal.":::
+
+1. Use `git clone` to clone the MERN application from GitHub.
+
+ ```shell
+ git clone https://github.com/azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app.git .
+ ```
+++
+## 2 - Test the MERN application's API with the MongoDB container
+
+Start by running the sample application's API with the local MongoDB container to validate that the application works.
+
+1. Run a MongoDB container using Docker and publish the typical MongoDB port (`27017`).
+
+ ```shell
+ docker pull mongo:6.0
+
+ docker run --detach --publish 27017:27017 mongo:6.0
+ ```
+
+1. In the side bar, select the MongoDB extension.
+
+ :::image type="content" source="media/tutorial-nodejs-web-app/select-mongodb-option.png" alt-text="Screenshot of the MongoDB extension in the side bar.":::
+
+1. Add a new connection to the MongoDB extension using the connection string `mongodb://localhost`.
+
+ :::image type="content" source="media/tutorial-nodejs-web-app/select-mongodb-add-connection.png" alt-text="Screenshot of the add connection button in the MongoDB extension.":::
+
+1. Once the connection is successful, open the **data/products.mongodb** playground file.
+
+1. Select the **Run all** icon to execute the script.
+
+ :::image type="content" source="media/tutorial-nodejs-web-app/select-mongodb-playground-run-all.png" alt-text="Screenshot of the run all button in a playground for the MongoDB extension.":::
+
+1. The playground run should result in a list of documents in the local MongoDB collection. Here's a truncated example of the output.
+
+ ```json
+ [
+ {
+ "_id": { "$oid": "640a146e89286b79b6628eef" },
+ "name": "Confira Watch",
+ "category": "watches",
+ "price": 105
+ },
+ {
+ "_id": { "$oid": "640a146e89286b79b6628ef0" },
+ "name": "Diannis Watch",
+ "category": "watches",
+ "price": 98,
+ "sale": true
+ },
+ ...
+ ]
+ ```
+
+ > [!NOTE]
+ > The object ids (`_id`) are randomnly generated and will differ from this truncated example output.
+
+1. In the **client/** directory, create a new **.env** file.
+
+1. In the **client/.env** file, add an environment variable for this value:
+
+ | Environment Variable | Value |
+ | | |
+ | `CONNECTION_STRING` | The connection string to the Azure Cosmos DB for MongoDB vCore cluster. For now, use `mongodb://localhost`. |
+
+ ```env
+ CONNECTION_STRING=mongodb://localhost:27017?directConnection=true
+ ```
+
+1. Change the context of the terminal to the **server/** folder.
+
+ ```shell
+ cd server
+ ```
+
+1. Install the dependencies from Node Package Manager (npm).
+
+ ```shell
+ npm install
+ ```
+
+1. Start the Node.js &amp; Express application.
+
+ ```shell
+ npm start
+ ```
+
+1. The API automatically opens a browser window to verify that it returns an array of product documents.
+
+1. Close the extra browser tab/window.
+
+1. Close the terminal.
+
+## 3 - Test the MERN application with the Azure Cosmos DB for MongoDB vCore cluster
+
+Now, let's validate that the application works seamlessly with Azure Cosmos DB for MongoDB vCore. For this task, populate the pre-existing cluster with seed data using the MongoDB shell and then update the API's connection string.
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. Navigate to the existing Azure Cosmos DB for MongoDB vCore cluster page.
+
+1. From the Azure Cosmos DB for MongoDB vCore cluster page, select the **Connection strings** navigation menu option.
+
+ :::image type="content" source="media/tutorial-nodejs-web-app/select-connection-strings-option.png" alt-text="Screenshot of the connection strings option on the page for a cluster.":::
+
+1. Record the value from the **Connection string** field.
+
+ :::image type="content" source="media/tutorial-nodejs-web-app/connection-string-value.png" alt-text="Screenshot of the connection string credential for a cluster.":::
+
+ > [!IMPORTANT]
+ > The connection string in the portal does not include the username and password values. You must replace the `<user>` and `<password>` placeholders with the credentials you used when you originally created the cluster.
+
+1. Back within your integrated development environment (IDE), open a new terminal.
+
+1. Start the MongoDB Shell using the `mongosh` command and the connection string you recorded earlier. Make sure you replace the `<user>` and `<password>` placeholders with the credentials you used when you originally created the cluster.
+
+ ```shell
+ mongosh "<mongodb-cluster-connection-string>"
+ ```
+
+ > [!NOTE]
+ >
+ > You may need to encode specific values for the connection string. In this example, the name of the cluster is `msdocs-cosmos-tutorial`, the username is `clusteradmin`, and the password is `P@ssw.rd`. In the password the `@` character will need to be encoded using `%40`. An example connection string is provided here with the correct encoding of the password.
+ >
+ > ```output
+ > CONNECTION_STRING=mongodb+srv://clusteradmin:P%40ssw.rd@msdocs-cosmos-tutorial.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000
+ > ```
+ >
+
+1. Within the shell, run the following commands to create your database, create your collection, and seed with starter data.
+
+ :::code language="mongosh" source="~/azure-cosmos-db-mongodb-mern-web-app/data/products.mongodb" highlight="5-16":::
+
+1. The commands should result in a list of documents in the local MongoDB collection. Here's a truncated example of the output.
+
+ ```json
+ [
+ {
+ "_id": { "$oid": "640a146e89286b79b6628eef" },
+ "name": "Confira Watch",
+ "category": "watches",
+ "price": 105
+ },
+ {
+ "_id": { "$oid": "640a146e89286b79b6628ef0" },
+ "name": "Diannis Watch",
+ "category": "watches",
+ "price": 98,
+ "sale": true
+ },
+ ...
+ ]
+ ```
+
+ > [!NOTE]
+ > The object ids (`_id`) are randomnly generated and will differ from this truncated example output.
+
+1. Exit the MongoDB shell.
+
+ ```shell
+ exit
+ ```
+
+1. Open the **client/.env** file again. Then, update the value of the `CONNECTION_STRING` environment variables with the connection string you used with the mongo shell:
+
+ ```output
+ CONNECTION_STRING=<your-connection-string>
+ ```
+
+1. Validate that the application is using the database service by changing the context of the terminal to the **server/** folder, installing dependencies from Node Package Manager (npm), and then starting the application.
+
+ ```shell
+ cd server
+
+ npm install
+
+ npm start
+ ```
+
+1. The API automatically opens a browser window to verify that it returns an array of product documents.
+
+1. Close the extra browser tab/window. Then, close the terminal.
+
+## 4 - Deploy the MERN application to Azure App Service
+
+Deploy the service and client to Azure App Service to prove that the application works end-to-end. Use secrets in the web apps to store environment variables with credentials and API endpoints.
+
+1. Within your integrated development environment (IDE), open a new terminal.
+
+1. Create a shell variable for the name of the pre-existing resource group named *resourceGroupName*.
+
+ ```azurecli
+ # Variable for resource group name
+ resourceGroupName="<existing-resource-group>"
+ ```
+
+1. Create shell variables for the two web app named *serverAppName* and *clientAppName*.
+
+ ```azurecli
+ # Variable for randomnly generated suffix
+ let suffix=$RANDOM*$RANDOM
+
+ # Variable for web app names with a randomnly generated suffix
+ serverAppName="server-app-$suffix"
+ clientAppName="client-app-$suffix"
+ ```
+
+1. If you haven't already, sign in to the Azure CLI using the [`az login --use-device-code`](/cli/azure/reference-index#az-login) command.
+
+1. Change the current working directory to the **server/** path.
+
+ ```shell
+ cd server
+ ```
+
+1. Create a new web app for the server component of the MERN application with [`az webapp up`](/cli/azure/webapp#az-webapp-up).
+
+ ```shell
+ az webapp up \
+ --resource-group $resourceGroupName \
+ --name $serverAppName \
+ --sku F1 \
+ --runtime "NODE|18-lts"
+ ```
+
+1. Create a new connection string setting for the server web app named `CONNECTION_STRING` with [`az webapp config connection-string set`](/cli/azure/webapp/config/connection-string#az-webapp-config-connection-string-set). Use the same value for the connection string you used with the MongoDB shell and **.env** file earlier in this tutorial.
+
+ ```shell
+ az webapp config connection-string set \
+ --resource-group $resourceGroupName \
+ --name $serverAppName \
+ --connection-string-type custom \
+ --settings "CONNECTION_STRING=<mongodb-connection-string>"
+ ```
+
+1. Get the URI for the server web app with [`az webapp show`](/cli/azure/webapp#az-webapp-show) and store it in a shell variable name d **serverUri**.
+
+ ```azurecli
+ serverUri=$(az webapp show \
+ --resource-group $resourceGroupName \
+ --name $serverAppName \
+ --query hostNames[0] \
+ --output tsv)
+ ```
+
+1. Use the [`open-cli`](https://www.npmjs.com/package/open-cli) package and command from NuGet with `npx` to open a browser window using the URI for the server web app. Validate that the server app is returning your JSON array data from the MongoDB vCore cluster.
+
+ ```shell
+ npx open-cli "https://$serverUri/products" --yes
+ ```
+
+ > [!TIP]
+ > Sometimes deployments can finish asynchronously. If you are not seeing what you expect, wait another minute and refresh your browser window.
+
+1. Change the working directory to the **client/** path.
+
+ ```shell
+ cd ../client
+ ```
+
+1. Create a new web app for the client component of the MERN application with [`az webapp up`](/cli/azure/webapp#az-webapp-up).
+
+ ```shell
+ az webapp up \
+ --resource-group $resourceGroupName \
+ --name $clientAppName \
+ --sku F1 \
+ --runtime "NODE|18-lts"
+ ```
+
+1. Create a new app setting for the client web app named `REACT_APP_API_ENDPOINT` with [`az webapp config appsettings set`](/cli/azure/webapp/config/appsettings#az-webapp-config-appsettings-set). Use the server API endpoint stored in the **serverUri** shell variable.
+
+ ```shell
+ az webapp config appsettings set \
+ --resource-group $resourceGroupName \
+ --name $clientAppName \
+ --settings "REACT_APP_API_ENDPOINT=https://$serverUri"
+ ```
+
+1. Get the URI for the client web app with [`az webapp show`](/cli/azure/webapp#az-webapp-show) and store it in a shell variable name d **clientUri**.
+
+ ```azurecli
+ clientUri=$(az webapp show \
+ --resource-group $resourceGroupName \
+ --name $clientAppName \
+ --query hostNames[0] \
+ --output tsv)
+ ```
+
+1. Use the [`open-cli`](https://www.npmjs.com/package/open-cli) package and command from NuGet with `npx` to open a browser window using the URI for the client web app. Validate that the client app is rendering data from the server app's API.
+
+ ```shell
+ npx open-cli "https://$clientUri" --yes
+ ```
+
+ > [!TIP]
+ > Sometimes deployments can finish asynchronously. If you are not seeing what you expect, wait another minute and refresh your browser window.
+
+1. Close the terminal.
+
+## Clean up resources
+
+When you're working in your own subscription, at the end of a project, it's a good idea to remove the resources that you no longer need. Resources left running can cost you money. You can delete resources individually or delete the resource group to delete the entire set of resources.
+
+1. To delete the entire resource group, use [`az group delete`](/cli/azure/group#az-group-delete).
+
+ ```azurecli
+ az group delete \
+ --name $resourceGroupName \
+ --yes
+ ```
+
+1. Validate that the resource group is deleted using [`az group list`](/cli/azure/group#az-group-list).
+
+ ```azurecli
+ az group list
+ ```
+
+## Next steps
+
+Now that you have built your first application for the MongoDB vCore cluster, learn how to migrate your data to Azure Cosmos DB.
+
+> [!div class="nextstepaction"]
+> [Migrate your data](migration-options.md)
cost-management-billing Calculate Ea Reservations Savings https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/reservations/calculate-ea-reservations-savings.md
Previously updated : 12/06/2022 Last updated : 03/24/2023
This article helps Enterprise Agreement users manually calculate their reservati
Although the example process shown in this article uses Excel, you can use the spreadsheet application of your choice.
-This article is specific to EA users. Microsoft Customer Agreement (MCA) users can use similar steps to calculate their reservation savings through invoices. However, the MCA amortized usage file doesn't contain UnitPrice (on-demand pricing) for reservations. Other resources in the file do. For more information, see [Download usage for your Microsoft Customer Agreement](understand-reserved-instance-usage-ea.md#download-usage-for-your-microsoft-customer-agreement).
+This article is specific to EA users. Microsoft Customer Agreement (MCA) users can use similar steps to calculate their reservation savings through invoices. However, the MCA amortized usage file doesn't contain UnitPrice (on-demand pricing) for reservations. Other resources in the file do. For more information, see [Download usage for your Microsoft Customer Agreement](../savings-plan/utilization-cost-reports.md).
## Required permissions
cost-management-billing Reserved Instance Purchase Recommendations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/reservations/reserved-instance-purchase-recommendations.md
The following steps define how recommendations are calculated:
3. The costs are simulated for different quantities, and the quantity that maximizes the savings is recommended. 4. If your resources are shut down regularly, the simulation can't find any savings, and no purchase recommendation is provided. 5. The recommendation calculations include any special discounts that you might have for your on-demand usage rates.
- - The recommendations account for existing reservations and savings plans. So, previously purchased reservations and savings plans are excluded when providing recommendations.
+
+The recommendations account for existing reservations and savings plans. So, previously purchased reservations and savings plans are excluded when providing recommendations.
## Recommendations in the Azure portal
cost-management-billing Utilization Cost Reports https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/savings-plan/utilization-cost-reports.md
In the Azure portal, navigate toΓÇ»[Cost Management + Billing](https://portal.az
### MCA customers
-If you're an Owner, Contributor or Reader on your Billing Account, you can download the CSV file that contains new usage data from the [Azure portal](https://ms.portal.azure.com/#home). In the portal, navigate to **Cost management + Billing**.
+To view and download usage data for a billing profile, you must be a billing profile Owner, Contributor, Reader, or Invoice manager.
-1. Select the billing account.
-2. Select **Invoices.**
-3. Download the Actual Cost CSV file based on your scenario.
- - To download the usage for the current month, select **Download pending usage.**
- - To download the usage for a prior invoice, select the ellipsis symbol ( **...** ) and select **Prepare Azure usage file.**
-1. If you want to download the Amortized Cost CSV file, you'll need to use [Exports](../costs/tutorial-export-acm-data.md) or the [Cost Details API](../automate/get-small-usage-datasets-on-demand.md).
+To download usage for billed charges:
+
+1. Search for **Cost Management + Billing**.
+2. Select a billing profile.
+3. Select **Invoices**.
+4. In the invoice grid, find the row of the invoice corresponding to the usage that you want to download.
+5. Select the ellipsis (**...**) at the end of the row.
+6. In the download context menu, select **Azure usage and charges**.
## Common cost and usage tasks
cost-management-billing Download Azure Invoice https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/understand/download-azure-invoice.md
tags: billing
Previously updated : 06/08/2022 Last updated : 03/24/2023
You must have an owner, contributor, reader, or an invoice manager role on a bil
## Get your billing profile's invoice in email
-You must have an owner or a contributor role on the billing profile or its billing account to update its email invoice preference. Once you have opted-in, all users with an owner, contributor, readers, and invoice manager roles on a billing profile will get its invoice in email.
+You must have an owner or a contributor role on the billing profile or its billing account to update its email invoice preference. Once you have opted-in, all users with an owner, contributor, readers, and invoice manager roles on a billing profile will get its invoice in email.
+
+> [!NOTE]
+> The *send by email* and *invoice email preference* invoice functionality isnΓÇÖt supported for Microsoft Customer Agreements when you work with a Microsoft partner.
1. Sign in to the [Azure portal](https://portal.azure.com). 1. Search for **Cost Management + Billing**.
data-factory Built In Preinstalled Components Ssis Integration Runtime https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/built-in-preinstalled-components-ssis-integration-runtime.md
This article lists all built-in and preinstalled components, such as clients, dr
| Type | Name - Version - Platform | |||
-| **Built-in clients/drivers/providers** | *Access Database Engine 2016 Redistributable* - RTM - X64<br/><br/>*Microsoft Analysis Management Objects* - 15.0.1000.81 - X64<br/><br/>*Microsoft Analysis Services OLEDB Provider* - 15.0.1000.81 - X64<br/><br/>*Microsoft SQL Server 2012 Native Client* - 11.4.7462.6 - X64<br/><br/>*Microsoft ODBC Driver 13 for SQL Server* - 14.0.900.902 - X64<br/><br/>*Microsoft OLEDB Driver 18 for SQL Server* - 18.1.0.0 - X64<br/><br/>*Microsoft OLEDB Provider for DB2* - 6.0 - X64<br/><br/>*SharePoint Online Client Components SDK* - 15.4711.1001 - X64 |
+| **Built-in clients/drivers/providers** | *Access Database Engine 2016 Redistributable* - RTM - X64<br/><br/>*Microsoft Analysis Management Objects* - 15.0.2000.443 - X64<br/><br/>*Microsoft Analysis Services OLEDB Provider* - 15.0.2000.443 - X64<br/><br/>*Microsoft SQL Server 2012 Native Client* - 11.4.7462.6 - X64<br/><br/>*Microsoft ODBC Driver 13 for SQL Server* - 14.0.900.902 - X64<br/><br/>*Microsoft OLEDB Driver 18 for SQL Server* - 18.6.5 - X64<br/><br/>*Microsoft OLEDB Provider for DB2* - 6.0 - X64<br/><br/>*SharePoint Online Client Components SDK* - 15.4711.1001 - X64 |
## Built-in and preinstalled connection managers on Azure-SSIS IR
data-factory Create Self Hosted Integration Runtime https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/create-self-hosted-integration-runtime.md
Here are details of the application's actions and arguments:
|`-dlma`,<br/>`-DisableLocalMachineAccess`|| Disable local machine access (localhost, private IP) on the current self-hosted IR node. In self-hosted IR High Availability scenario, the action needs to be invoked on every self-hosted IR node.| |`-DisableLocalFolderPathValidation`|| Disable security validation to enable access to file system of the local machine.| |`-EnableLocalFolderPathValidation`|| Enable security validation to disable access to file system of the local machine. |
-|`-EnableExecuteSsisPackage`|| Enable SSIS package execution on self-hosted IR node.|
-|`-DisableExecuteSsisPackage`|| Disable SSIS package execution on self-hosted IR node.|
+|`-eesp`,<br/>`-EnableExecuteSsisPackage`|| Enable SSIS package execution on self-hosted IR node.|
+|`-desp`,<br/>`-DisableExecuteSsisPackage`|| Disable SSIS package execution on self-hosted IR node.|
+|`-gesp`,<br/>`-GetExecuteSsisPackage`|| Get the value if ExecuteSsisPackage option is enabled on self-hosted IR node.|
## Install and register a self-hosted IR from Microsoft Download Center
data-factory Self Hosted Integration Runtime Proxy Ssis https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/self-hosted-integration-runtime-proxy-ssis.md
You then set up your self-hosted IR in the same data factory where your Azure-SS
Finally, you download and install the latest version of self-hosted IR, as well as the additional drivers and runtime, on your on-premises machine or Azure virtual machine (VM), as follows: - Download and install the latest version of [self-hosted IR](https://www.microsoft.com/download/details.aspx?id=39717).+
+- Enable SSIS package execution on self-hosted integration runtime node if self-hosted IR version is **5.28.0** or later.
+
+ **ExecuteSsisPackage** property is newly introduced from self-hosted IR version **5.28.0**. Use below self-hosted IR command line action to enable or disable SSIS package execution:
+
+ - -EnableExecuteSsisPackage Enable SSIS package execution on self-hosted IR node.
+
+ - -DisableExecuteSsisPackage Disable SSIS package execution on self-hosted IR node.
+
+ - -GetExecuteSsisPackage
+
+ Self-hosted IR command line details refer to [Set up an existing self-hosted IR via local PowerShell](create-self-hosted-integration-runtime.md?tabs=data-factory#set-up-an-existing-self-hosted-ir-via-local-powershell).
+
+ Newly installed self-hosted IR node with version 5.28.0 or later, ExecuteSsisPackage property is by default **disabled**.
+
+ Existing self-hosted IR node updated to version 5.28.0 or later, ExecuteSsisPackage property is by default **enabled**
+ - If you use Object Linking and Embedding Database (OLEDB), Open Database Connectivity (ODBC), or ADO.NET connectors in your packages, download and install the relevant drivers on the same machine where your self-hosted IR is installed, if you haven't done so already. If you use the earlier version of the OLEDB driver for SQL Server (SQL Server Native Client [SQLNCLI]), [download the 64-bit version](https://www.microsoft.com/download/details.aspx?id=50402).
If you need to access data stores that have been configured to use only the stro
- Changing variable values in both on-premises and cloud staging tasks is currently unsupported. - Changing variable values of type object in on-premises staging tasks won't be reflected in other tasks. - *ParameterMapping* in OLEDB Source is currently unsupported. As a workaround, please use *SQL Command From Variable* as the *AccessMode* and use *Expression* to insert your variables/parameters in a SQL command. As an illustration, see the *ParameterMappingSample.dtsx* package that can be found in the *SelfHostedIRProxy/Limitations* folder of our public preview blob container. Using Azure Storage Explorer, you can connect to our public preview blob container by entering the above SAS URI.-- To enable/disable SSIS package executions on self-hosted integration runtime nodes, please refer to this document [Create and configure a self-hosted integration runtime](create-self-hosted-integration-runtime.md?tabs=data-factory#set-up-an-existing-self-hosted-ir-via-local-powershell) to manage self-hosted IR via powershell. ExecuteSsisPackage property is true by default if self-hosted IR upgrades to the version equal to or higher than 5.28.0. If self-hosted IR is newly installed with a version equal to or higher than 5.28.0, then ExecuteSsisPackage property is by default false. ## Next steps
databox-online Azure Stack Edge Gpu Troubleshoot Virtual Machine Provisioning https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/databox-online/azure-stack-edge-gpu-troubleshoot-virtual-machine-provisioning.md
Previously updated : 08/03/2021 Last updated : 03/23/2023 # Troubleshoot VM deployment in Azure Stack Edge Pro GPU
The following issues are the top causes of VM provisioning timeouts:
- The default gateway and DNS server couldn't be reached from the guest VM. [Learn more](#gateway-dns-server-couldnt-be-reached-from-guest-vm) - During a `cloud init` installation, `cloud init` either didn't run or there were issues while it was running. (Linux VMs only) [Learn more](#cloud-init-issues-linux-vms) - For a Linux VM deployed using a custom VM image, the Provisioning flags in the /etc/waagent.conf file are not correct. (Linux VMs only) [Learn more](#provisioning-flags-set-incorrectly-linux-vms)
+- Primary NIC attached to a SRIOV enabled vSwitch [Learn more](#primary-nic-attached-to-a-sriov-enabled-vswitch)
### IP assigned to the VM is already in use
To check for some of the most common issues that prevent `cloud init` from runni
| Enable provisioning | `Provisioning.Enabled=n` | | Rely on cloud-init to provision | `Provisioning.UseCloudInit=y` |
+### Primary NIC attached to a SRIOV enabled vSwitch
+**Error description:** The primary network interface attached to a single root I/O virtualization (SRIOV) interface-enabled virtual switch caused network traffic to bypass the hyper-v, so the host could not receive DHCP requests from the VM, resulting in a provisioning timeout.
+
+**Suggested solutions:**
+
+- Connect the VM primary network interface to a virtual switch without enabling accelerated networking.
+
+- On an Azure Stack Edge Pro 1 device, virtual switches created on Port 1 to Port 4 do not enable accelerated networking. On Port 5 or Port 6, virtual switches will enable accelerated networking by default. 
+
+ - On an Azure Stack Edge Pro 2 device, virtual switches created on Port 1 or Port 2 do not enable accelerated networking. On Port 3 or Port 4, virtual switches will enable accelerated networking by default. 
+
## Network interface creation issues This section provides guidance for issues that cause network interface creation to fail during a VM deployment.
firewall-manager Secured Virtual Hub https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/firewall-manager/secured-virtual-hub.md
Previously updated : 11/29/2022 Last updated : 03/24/2023
firewall Firewall Network Rule Logging https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/firewall/firewall-network-rule-logging.md
- Title: Azure Firewall network rule name logging (preview)
-description: Learn about Azure Firewall network rule name logging (preview)
---- Previously updated : 01/25/2023---
-# Azure Firewall network rule name logging (preview)
--
-> [!IMPORTANT]
-> This feature 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.
-
-Currently, a network rule hit event shows the following attributes in the logs:
-
- - Source and destination IP/port
- - Action (allow, or deny)
-
- With this new feature, the event logs for network rules also show the following attributes:
- - Policy name
- - Rule collection group
- - Rule collection
- - Rule name
-
-## Enable/disable network rule name logging
-
-To enable the Network Rule name Logging feature, the following commands need to be run in Azure PowerShell. For the feature to immediately take effect, an operation needs to be run on the firewall. This operation can be a rule change (least intrusive), a setting change, or a stop/start operation. Otherwise, the firewall/s is updated with the feature within several days.
-
-Run the following Azure PowerShell commands to configure Azure Firewall network rule name logging:
-
-```azurepowershell
-Connect-AzAccount
-Select-AzSubscription -Subscription "subscription_id or subscription_name"
-Register-AzProviderFeature -FeatureName AFWEnableNetworkRuleNameLogging -ProviderNamespace Microsoft.Network
-Register-AzResourceProvider -ProviderNamespace Microsoft.Network
-```
-
-Run the following Azure PowerShell command to turn off this feature:
-
-```azurepowershell
-Unregister-AzProviderFeature -FeatureName AFWEnableNetworkRuleNameLogging -ProviderNamespace Microsoft.Network
-```
-
-## Next steps
---- To learn more about Azure Firewall logs and metrics, see [Azure Firewall logs and metrics](logs-and-metrics.md)
firewall Firewall Preview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/firewall/firewall-preview.md
This article will be updated to reflect the features that are currently in previ
The following features are available in preview.
-### Network rule name logging (preview)
-
-With this new feature, the event logs for network rules adds the following attributes:
- - Policy name
- - Rule collection group
- - Rule collection
- - Rule name
-
-For more information, see [Azure Firewall network rule name logging (preview)](firewall-network-rule-logging.md).
- ### Structured Firewall Logs (preview) With Structured Firewall Logs, you'll be able to choose to use Resource Specific tables instead of an existing AzureDiagnostics table. Structured Firewall Logs is required for Policy Analytics. This new method helps you with better log querying and is recommended because:
firewall Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/firewall/overview.md
Azure Firewall Standard has the following known issues:
|DNAT rule for allow *any* (*) will SNAT traffic.|If a DNAT rule allows *any* (*) as the Source IP address, then an implicit Network rule matches VNet-VNet traffic and will always SNAT the traffic.|This is a current limitation.| |Adding a DNAT rule to a secured virtual hub with a security provider isn't supported.|This results in an asynchronous route for the returning DNAT traffic, which goes to the security provider.|Not supported.| | Error encountered when creating more than 2000 rule collections. | The maximal number of NAT/Application or Network rule collections is 2000 (Resource Manager limit). | This is a current limitation. |
-|Unable to see Network Rule Name in Azure Firewall Logs|Azure Firewall network rule log data doesn't show the Rule name for network traffic.|Network rule name logging is in preview. For for information, see [Azure Firewall preview features](firewall-preview.md#network-rule-name-logging-preview).|
|XFF header in HTTP/S|XFF headers are overwritten with the original source IP address as seen by the firewall. This is applicable for the following use cases:<br>- HTTP requests<br>- HTTPS requests with TLS termination|A fix is being investigated.| |Can't upgrade to Premium with Availability Zones in the Southeast Asia region|You can't currently upgrade to Azure Firewall Premium with Availability Zones in the Southeast Asia region.|Deploy a new Premium firewall in Southeast Asia without Availability Zones, or deploy in a region that supports Availability Zones.| |CanΓÇÖt deploy Firewall with Availability Zones with a newly created Public IP address|When you deploy a Firewall with Availability Zones, you canΓÇÖt use a newly created Public IP address.|First create a new zone redundant Public IP address, then assign this previously created IP address during the Firewall deployment.|
governance Policy For Kubernetes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/governance/policy/concepts/policy-for-kubernetes.md
# Understand Azure Policy for Kubernetes clusters
-Azure Policy extends [Gatekeeper](https://github.com/open-policy-agent/gatekeeper) v3, an _admission
+Azure Policy extends [Gatekeeper](https://open-policy-agent.github.io/gatekeeper) v3, an _admission
controller webhook_ for [Open Policy Agent](https://www.openpolicyagent.org/) (OPA), to apply at-scale enforcements and safeguards on your clusters in a centralized, consistent manner. Azure Policy makes it possible to manage and report on the compliance state of your Kubernetes clusters
from one place. The add-on enacts the following functions:
- Checks with Azure Policy service for policy assignments to the cluster. - Deploys policy definitions into the cluster as [constraint template](https://open-policy-agent.github.io/gatekeeper/website/docs/howto/#constraint-templates) and
- [constraint](https://github.com/open-policy-agent/gatekeeper#constraints) custom resources.
+ [constraint](https://open-policy-agent.github.io/gatekeeper/website/docs/howto/#constraints) custom resources.
- Reports auditing and compliance details back to Azure Policy service. Azure Policy for Kubernetes supports the following cluster environments:
iot-central Concepts Quotas Limits https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-central/core/concepts-quotas-limits.md
There are various quotas and limits that apply to IoT Central applications. IoT
| Item | Quota or limit | Notes | | - | -- | -- | | Number of property updates per second | 100 | This is a soft limit. IoT Central autoscales the application as needed<sup>1</sup>. |
-| Maximum size of a property | 32 KB | This value is set by the IoT Hub service. |
+| Properties | Maximum size of desired properties and reported properties sections are 32 KB each. Maximum size of tags section is 8 KB. Maximum size of each individual property in every section is 4 KB. | These values are set by the IoT Hub service. |
## Commands
iot-central Howto Query With Rest Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-central/core/howto-query-with-rest-api.md
Every IoT Central REST API call requires an authorization header. To learn more,
For the reference documentation for the IoT Central REST API, see [Azure IoT Central REST API reference](/rest/api/iotcentral/). > [!IMPORTANT]
-> Support for property queries is now deprecated in the IoT Central REST API and will be removed from the existing API releases.
+> Support for property queries is now deprecated in the IoT Central REST API and will be removed from the existing API releases.
[!INCLUDE [iot-central-postman-collection](../../../includes/iot-central-postman-collection.md)]
The following sections describe these clauses in more detail.
## SELECT clause
+> [!IMPORTANT]
+> Support for property queries is now deprecated in the IoT Central REST API and will be removed from the existing API releases.
+ The `SELECT` clause lists the data values to include in the query output and can include the following items: - Telemetry. Use the telemetry names from the device template.
The time window value uses the [ISO 8601 durations format](https://en.wikipedia.
### Value comparisons
+> [!IMPORTANT]
+> Support for property queries is now deprecated in the IoT Central REST API and will be removed from the existing API releases.
+ You can get telemetry or property values based on specific values. For example, the following query returns all messages where the temperature is greater than zero, the pressure is greater than 50, and the device ID is one of **sample-002** and **sample-003**: ```json
iot-dps Quick Enroll Device Tpm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-dps/quick-enroll-device-tpm.md
This section shows you how to create a .NET Core console app that adds an indivi
2. Using a text editor, create a _create_individual_enrollment.js_ file in your working folder. Add the following code to the file:
- ```Java
+ ```javascript
'use strict'; var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
iot-hub-device-update Device Update Howto Proxy Updates https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub-device-update/device-update-howto-proxy-updates.md
Title: Complete a proxy update by using Device Update for Azure IoT Hub | Microsoft Docs description: Get started with Device Update for Azure IoT Hub by using the Device Update binary agent for proxy updates.--++ Last updated 1/26/2022
For testing and demonstration purposes, we'll create the following mock componen
sudo /usr/bin/AducIotAgent -E /var/lib/adu/extensions/sources/libcontoso-component-enumerator.so ```
-2. View and record the current components' software version by using the following command to set up the VM to support proxy updates:
-
- ```sh
- ~/demo/show-demo-components.sh
- ```
- ## Import an example update If you haven't already done so, create a [Device Update account and instance](create-device-update-account.md), including configuring an IoT hub. Then start the following procedure.
key-vault Quick Create Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/key-vault/managed-hsm/quick-create-cli.md
tags: azure-resource-manager
Previously updated : 03/21/2023 Last updated : 03/24/2023 ms.devlang: azurecli
az login
## Create a resource group
-A resource group is a logical container into which Azure resources are deployed and managed. The following example creates a resource group named *ContosoResourceGroup* in the *westus3* location.
+A resource group is a logical container into which Azure resources are deployed and managed. The following example creates a resource group named *ContosoResourceGroup* in the *eastus2* location.
```azurecli-interactive
-az group create --name "ContosoResourceGroup" --location westus3
+az group create --name "ContosoResourceGroup" --location eastus2
``` ## Create a Managed HSM
key-vault Quick Create Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/key-vault/managed-hsm/quick-create-powershell.md
Title: Create and retrieve attributes of a managed key in Azure Key Vault ΓÇô Az
description: Quickstart showing how to set and retrieve a managed key from Azure Key Vault using Azure PowerShell Previously updated : 03/21/2023 Last updated : 03/24/2023
Login-AzAccount
## Create a resource group
-A resource group is a logical container into which Azure resources are deployed and managed. Use the Azure PowerShell [New-AzResourceGroup](/powershell/module/az.resources/new-azresourcegroup) cmdlet to create a resource group named *myResourceGroup* in the *eastus* location.
+A resource group is a logical container into which Azure resources are deployed and managed. Use the Azure PowerShell [New-AzResourceGroup](/powershell/module/az.resources/new-azresourcegroup) cmdlet to create a resource group named *myResourceGroup* in the *eastus2* location.
```azurepowershell-interactive
-New-AzResourceGroup -Name "myResourceGroup" -Location "eastus"
+New-AzResourceGroup -Name "myResourceGroup" -Location "eastus2"
``` ## Get your principal ID
Use the Azure PowerShell [New-AzKeyVaultManagedHsm](/powershell/module/az.keyvau
- Your principal ID: Pass the Azure Active Directory principal ID that you obtained in the last section to the "Administrator" parameter. ```azurepowershell-interactive
-New-AzKeyVaultManagedHsm -Name "<your-unique-managed-hsm-name>" -ResourceGroupName "myResourceGroup" -Location "eastus" -Administrator "<your-principal-ID>"
+New-AzKeyVaultManagedHsm -Name "<your-unique-managed-hsm-name>" -ResourceGroupName "myResourceGroup" -Location "eastus2" -Administrator "<your-principal-ID>"
``` > [!NOTE] > The create command can take a few minutes. Once it returns successfully you are ready to activate your HSM.
lab-services Azure Polices For Lab Services https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/azure-polices-for-lab-services.md
Title: Azure Policies for Lab Services description: Learn how to use Azure Policy to use built-in policies for Azure Lab Services to make sure your labs are compliant with your requirements. --++ Last updated 11/08/2022
lab-services Create And Configure Labs Admin https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/create-and-configure-labs-admin.md
Title: Configure regions for labs description: Learn how to change the region of a lab. --++ Last updated 06/17/2022
lab-services How To Determine Your Quota Usage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/how-to-determine-your-quota-usage.md
Title: How to determine your quota usage description: Learn how to determine where the cores for your subscription are used and if you have any spare capacity against your quota. -++ Last updated 10/11/2022 - # Determine usage and quota
lab-services How To Request Capacity Increase https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/how-to-request-capacity-increase.md
Title: Request a core limit increase description: Learn how to request a core limit (quota) increase to expand capacity for your labs. --++ Last updated 10/06/2022
lab-services How To Reset And Redeploy Vm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/how-to-reset-and-redeploy-vm.md
description: Learn how to troubleshoot a VM in Azure Lab Services by redeploying
--++ Last updated 12/06/2022 <!-- As a student, I want to be able to troubleshoot connectivity problems with my VM so that I can get back up and running quickly, without having to escalate an issue -->
lab-services How To Use Restrict Allowed Virtual Machine Sku Sizes Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/how-to-use-restrict-allowed-virtual-machine-sku-sizes-policy.md
Title: How to restrict the virtual machine sizes allowed for labs description: Learn how to use the Lab Services should restrict allowed virtual machine SKU sizes Azure Policy to restrict educators to specified virtual machine sizes for their labs. --++ Last updated 08/23/2022
lab-services Migrate To 2022 Update https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/lab-services/migrate-to-2022-update.md
Title: Moving from lab accounts to lab plans
description: 'Learn how to transition from Azure Lab Services to Azure Lab Services August 2022 Update.' --++ Last updated 11/30/2022
networking Network Monitoring Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/networking/network-monitoring-overview.md
Title: 'About Network Monitoring in Azure Monitor logs | Microsoft Docs'
-description: Overview of network monitoring solutions, including NPM, to manage networks across cloud, on-premises, and hybrid environments.
---
-tags: azure-resource-manager
-
+ Title: Network Monitoring in Azure Monitor logs
+description: Overview of network monitoring solutions, including network performance monitor, to manage networks across cloud, on-premises, and hybrid environments.
+ - Previously updated : 02/22/2018-- Last updated : 03/23/2023+ # Network monitoring solutions Azure offers a host of solutions to monitor your networking assets. Azure has solutions and utilities to monitor network connectivity, the health of ExpressRoute circuits, and analyze network traffic in the cloud.
-## Network Performance Monitor (NPM)
+## Network Performance Monitor
-Network Performance Monitor (NPM) is a suite of capabilities, each of which is geared towards monitoring the health of your network, network connectivity to your applications, and provides insights into the performance of your network. NPM is cloud-based and provides a hybrid network monitoring solution that monitors connectivity between:
+Network Performance Monitor is a suite of capabilities that is geared towards monitoring the health of your network. Network Performance Monitor monitors network connectivity to your applications, and provides insights into the performance of your network. Network Performance Monitor is cloud-based and provides a hybrid network monitoring solution that monitors connectivity between:
* Cloud deployments and on-premises locations+ * Multiple data centers and branch offices+ * Mission critical multi-tier applications/micro-services+ * User locations and web-based applications (HTTP/HTTPs)
-Performance Monitor, ExpressRoute Monitor, and Service Connectivity Monitor are monitoring capabilities within NPM and are described below.
+Performance Monitor, ExpressRoute Monitor, and Service Connectivity Monitor are monitoring capabilities within Network Performance Monitor and are described in the following sections.
## Performance Monitor
-Performance Monitor is part of NPM and is network monitoring for cloud, hybrid, and on-premises environments. You can monitor network connectivity across remote branch and field offices, store locations, data centers, and clouds. You can detect network issues before your users complain. The key advantages are:
+Performance Monitor is part of Network Performance Monitor and is network monitoring for cloud, hybrid, and on-premises environments. You can monitor network connectivity across remote branch and field offices, store locations, data centers, and clouds. You can detect network issues before your users complain. The key advantages are:
* Monitor loss and latency across various subnets and set alerts+ * Monitor all paths (including redundant paths) on the network
-* Troubleshoot transient and point-in-time network issues, that are difficult to replicate
-* Determine the specific segment on the network, that is responsible for degraded performance
+
+* Troubleshoot transient and point-in-time network issues, that's difficult to replicate
+
+* Determine the specific segment on the network that is responsible for degraded performance
+ * Monitor the health of the network, without the need for SNMP
-![NPM topology map](./media/network-monitoring-overview/npm-topology-map.png)
For more information, view the following articles: * [Configure a Network Performance Monitor Solution in Azure Monitor logs](/previous-versions/azure/azure-monitor/insights/network-performance-monitor) + * [Use cases](/archive/blogs/msoms/monitor-on-premises-cloud-iaas-and-hybrid-networks-using-oms-network-performance-monitor)+ * Product Updates:+ * [February 2017](/archive/blogs/msoms/oms-network-performance-monitor-is-now-generally-available)+ * [August 2017](/archive/blogs/msoms/improvements-to-oms-network-performance-monitor) ## ExpressRoute Monitor
-NPM for ExpressRoute offers comprehensive ExpressRoute monitoring for Azure Private peering and Microsoft peering connections. You can monitor E2E connectivity and performance between your branch offices and Azure over ExpressRoute. The key capabilities are:
+Network Performance Monitor for ExpressRoute offers comprehensive ExpressRoute monitoring for Azure Private peering and Microsoft peering connections. You can monitor E2E connectivity and performance between your branch offices and Azure over ExpressRoute. The key capabilities are:
+
+* Autodetection of ER circuits associated with your subscription
+
+* Detection of network topology from on-premises to your cloud applications
+
+* Capacity planning, bandwidth utilization analysis
-* Auto-detection of ER circuits associated with your subscription
-* Detection of network topology from on-premises to your cloud applications
-* Capacity planning, bandwidth utilization analysis
* Monitoring and alerting on both primary and secondary paths+ * Monitoring connectivity to Azure services such as Microsoft 365, Dynamics 365, ... over ExpressRoute
-* Detect degradation of connectivity to VNets
-![Geo-map showing traffic across regions](./media/network-monitoring-overview/expressroute-topology-map.png)
+* Detect degradation of connectivity to virtual networks
+ For more information, see the following articles: * [Configure Network Performance Monitor for ExpressRoute](../expressroute/how-to-npm.md)
-* [Blog post](https://aka.ms/NPMExRmonitorGA)
## Service Connectivity Monitor With Service Connectivity monitoring, you can now test reachability of applications and detect performance bottlenecks across on-premises, carrier networks and cloud/private data centers. * Monitor end-to-end network connectivity to applications+ * Correlate application delivery with network performance, detect precise location of degradation along the path between the user and the application+ * Test application reachability from multiple user locations across the globe+ * Determine network latency and packet loss for your line of business and SaaS applications
-* Determine hot spots on the network, that may be causing poor application performance
+
+* Determine hot spots on the network that may be causing poor application performance
+ * Monitor reachability to Microsoft 365 applications, using built-in tests for Microsoft 365, Dynamics 365, Skype for Business and other Microsoft services For more information, see the following articles: * [Configure Network Performance Monitor for monitoring Service Endpoints](/previous-versions/azure/azure-monitor/insights/network-performance-monitor-service-connectivity#configuration)+ * [Blog post](https://aka.ms/svcendptmonitor) ## Traffic Analytics+ Traffic Analytics is a cloud-based solution that provides visibility into user and application activity on your cloud networks. NSG Flow logs are analyzed to provide insights into:
-* Traffic flows across your networks between Azure and Internet, public cloud regions, VNETs, and subnets
+* Traffic flows across your networks between Azure and Internet, public cloud regions, virtual networks, and subnets
+ * Applications and protocols on your network, without the need for sniffers or dedicated flow collector appliances+ * Top talkers, chatty applications, VM conversations in the cloud, traffic hotspots
-* Sources and destinations of traffic across VNETs, inter-relationships between critical business services and applications
-* Security – malicious traffic, ports open to the Internet, applications or VMs attempting Internet access…
+
+* Sources and destinations of traffic across virtual networks, inter-relationships between critical business services and applications
+
+* Security – malicious traffic, ports open to the Internet, applications or VMs attempting Internet access…
+ * Capacity utilization - helps you eliminate issues of over-provisioning or underutilization by monitoring utilization trends of VPN gateways and other services
-Traffic Analytics equips you with actionable information that helps you audit your organizationΓÇÖs network activity, secure applications and data, optimize workload performance and stay compliant.
+Traffic Analytics equips you with information that helps you audit your organizationΓÇÖs network activity, secure applications and data, and optimize workload performance and stay compliant.
-![Geo-map showing traffic across regions 2](../network-watcher/media/traffic-analytics/geo-map-view-showcasing-traffic-distribution-to-countries-and-continents.png)
Related links:
-* [Blog post](https://aka.ms/trafficanalytics), [Documentation](../network-watcher/traffic-analytics.md), [FAQ](../network-watcher/traffic-analytics-faq.yml)
+
+* [Blog post](https://aka.ms/trafficanalytics)
+
+* [Documentation](../network-watcher/traffic-analytics.md)
+
+* [FAQ](../network-watcher/traffic-analytics-faq.yml)
## DNS Analytics
-Built for DNS Administrators, this solution collects, analyzes, and correlates DNS logs to provide security, operations, and performance-related insights. Some of the capabilities are:
+
+DNS Analytics is built for DNS Administrators, this solution collects, analyzes, and correlates DNS logs to provide security, operations, and performance-related insights. Some of the capabilities are:
* Identification of clients that try to resolve to malicious domains+ * Identification of stale resource records+ * Visibility into frequently queried domain names and talkative DNS clients+ * Visibility into the request load on DNS servers+ * Monitoring of dynamic DNS registration failures
-![DNS Analytics Dashboard](./media/network-monitoring-overview/dns-analytics-overview.png)
Related links:
-* [Blog post](/archive/blogs/msoms/introducing-oms-dns-analytics), [Documentation](/previous-versions/azure/azure-monitor/insights/dns-analytics)
+
+* [Blog post](/archive/blogs/msoms/introducing-oms-dns-analytics)
+
+* [Documentation](/previous-versions/azure/azure-monitor/insights/dns-analytics)
## Miscellaneous
networking Virtual Network Cli Sample Peer Two Virtual Networks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/networking/scripts/virtual-network-cli-sample-peer-two-virtual-networks.md
This script creates and connects two virtual networks in the same region through
[!INCLUDE [quickstarts-free-trial-note](../../../includes/quickstarts-free-trial-note.md)] - ## Sample script [!code-azurecli-interactive[main](../../../cli_scripts/virtual-network/peer-two-virtual-networks/peer-two-virtual-networks.sh "Peer two networks")]
networking Virtual Network Cli Sample Route Traffic Through Nva https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/networking/scripts/virtual-network-cli-sample-route-traffic-through-nva.md
Title: Azure CLI script sample - Route traffic through a network virtual appliance description: Azure CLI script sample - Route traffic through a firewall network virtual appliance.---+ - Previously updated : 07/07/2017- Last updated : 03/23/2023+ - # Use an Azure CLI script to route traffic through a network virtual appliance
This script sample creates a virtual network with front-end and back-end subnets
[!INCLUDE [quickstarts-free-trial-note](../../../includes/quickstarts-free-trial-note.md)] - ## Sample script - [!code-azurecli-interactive[main](../../../cli_scripts/virtual-network/route-traffic-through-nva/route-traffic-through-nva.sh "Route traffic through a network virtual appliance")] ## Clean up deployment
This script sample creates a virtual network with front-end and back-end subnets
Run the following command to remove the resource group, VM, and all related resources. ```azurecli
-az group delete --name MyResourceGroup --yes
+az group delete --name $resourceGroup --yes
``` ## Script explanation
This script uses the following commands to create a resource group, virtual netw
For more information on the Azure CLI, see [Azure CLI documentation](/cli/azure).
-Additional networking CLI script samples can be found in the [Azure Networking Overview documentation](../cli-samples.md)
+More networking CLI script samples can be found in the [Azure Networking Overview documentation](../cli-samples.md)
networking Virtual Network Filter Network Traffic https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/networking/scripts/virtual-network-filter-network-traffic.md
This script sample creates a virtual network with front-end and back-end subnets
Run the following command to remove the resource group, VM, and all related resources. ```azurecli
-az group delete --name MyResourceGroup --yes
+az group delete --name $resourceGroup --yes
``` ## Script explanation
networking Virtual Network Powershell Sample Peer Two Virtual Networks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/networking/scripts/virtual-network-powershell-sample-peer-two-virtual-networks.md
Title: Azure PowerShell Script Sample - Peer two virtual networks | Microsoft Docs
+ Title: Azure PowerShell Script Sample - Peer two virtual networks
description: Create and connect two virtual networks in the same region. Use the Azure script for two peer virtual networks to connect the networks through Azure.---+ - Previously updated : 05/16/2017- Last updated : 03/23/2023+ # Peer two virtual networks
-This script creates and connects two virtual networks in the same region through the Azure network. After running the script, you will create a peering between two virtual networks.
+This script creates and connects two virtual networks in the same region through the Azure network. After running the script, you'll create a peering between two virtual networks.
If needed, install the Azure PowerShell using the instruction found in the [Azure PowerShell guide](/powershell/azure/), and then run `Connect-AzAccount` to create a connection with Azure.
This script uses the following commands to create a resource group, virtual mach
For more information on the Azure PowerShell, see [Azure PowerShell documentation](/powershell/azure/).
-Additional networking PowerShell script samples can be found in the [Azure Networking Overview documentation](../powershell-samples.md?toc=%2fazure%2fnetworking%2ftoc.json).
+More networking PowerShell script samples can be found in the [Azure Networking Overview documentation](../powershell-samples.md?toc=%2fazure%2fnetworking%2ftoc.json).
postgresql Concepts Connection Libraries https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/postgresql/flexible-server/concepts-connection-libraries.md
+
+ Title: Connection libraries - Azure Database for PostgreSQL - Flexible Server
+description: This article describes several libraries and drivers that you can use when coding applications to connect and query Azure Database for PostgreSQL - Flexible Server.
+++++ Last updated : 03/24/2023++
+# Connection libraries for Azure Database for PostgreSQL - Flexible Server
++
+This article lists libraries and drivers that developers can use to develop applications to connect to and query Azure Database for PostgreSQL.
+
+## Client interfaces
+
+Most language client libraries used to connect to PostgreSQL server are external projects and are distributed independently. The libraries listed are supported on the Windows, Linux, and Mac platforms, for connecting to Azure Database for PostgreSQL. Several quickstart examples are listed in the Next steps section.
+
+| **Language** | **Client interface** | **Additional information** | **Download** |
+|--|-|-|--|
+| Python | [psycopg](https://www.psycopg.org/) | DB API 2.0-compliant | [Download](https://sourceforge.net/projects/adodbapi/) |
+| PHP | [php-pgsql](https://secure.php.net/manual/en/book.pgsql.php) | Database extension | [Install](https://secure.php.net/manual/en/pgsql.installation.php) |
+| Node.js | [Pg npm package](https://www.npmjs.com/package/pg) | Pure JavaScript non-blocking client | [Install](https://www.npmjs.com/package/pg) |
+| Java | [JDBC](https://jdbc.postgresql.org/) | Type 4 JDBC driver | [Download](https://jdbc.postgresql.org/download/)  |
+| Ruby | [Pg gem](https://deveiate.org/code/pg/) | Ruby Interface | [Download](https://rubygems.org/downloads/pg-0.20.0.gem) |
+| Go | [Package pq](https://godoc.org/github.com/lib/pq) | Pure Go postgres driver | [Install](https://github.com/lib/pq/blob/master/README.md) |
+| C\#/ .NET | [Npgsql](https://www.npgsql.org/) | ADO.NET Data Provider | [Download](https://dotnet.microsoft.com/download) |
+| ODBC | [psqlODBC](https://odbc.postgresql.org/) | ODBC Driver | [Download](https://www.postgresql.org/ftp/odbc/versions/) |
+| C | [libpq](https://www.postgresql.org/docs/9.6/static/libpq.html) | Primary C language interface | Included |
+| C++ | [libpqxx](http://pqxx.org/) | New-style C++ interface | [Download](https://pqxx.org/libpqxx/) |
+
+## Next steps
+
+Read these quickstarts on how to connect to and query Azure Database for PostgreSQL by using your language of choice:
+
+[Python](./connect-python.md) | [Java](./connect-java.md) | [Azure CLI](./connect-azure-cli.md) | [.NET (C#)](./connect-csharp.md)
private-link Private Endpoint Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/private-link/private-endpoint-overview.md
A private-link resource is the destination target of a specified private endpoin
When you use private endpoints, traffic is secured to a private-link resource. The platform validates network connections, allowing only those that reach the specified private-link resource. To access additional sub-resources within the same Azure service, additional private endpoints with corresponding targets are required. In the case of Azure Storage, for instance, you would need separate private endpoints to access the _file_ and _blob_ sub-resources.
-Private endpoints provide a privately accessible IP address for the Azure service, but do not necessarily restrict public network access to it. [Azure App Service](tutorial-private-endpoint-webapp-portal.md) and [Azure Functions](../azure-functions/functions-create-vnet.md) become inaccessible publicly when they are associated with a private endpoint. All other Azure services require additional [access controls](../event-hubs/event-hubs-ip-filtering.md), however. These controls provide an extra network security layer to your resources, providing protection that helps prevent access to the Azure service associated with the private-link resource.
+Private endpoints provide a privately accessible IP address for the Azure service, but do not necessarily restrict public network access to it. All other Azure services require additional [access controls](../event-hubs/event-hubs-ip-filtering.md), however. These controls provide an extra network security layer to your resources, providing protection that helps prevent access to the Azure service associated with the private-link resource.
Private endpoints support network policies. Network policies enable support for Network Security Groups (NSG), User Defined Routes (UDR), and Application Security Groups (ASG). For more information about enabling network policies for a private endpoint, see [Manage network policies for private endpoints](disable-private-endpoint-network-policy.md). To use an ASG with a private endpoint, see [Configure an application security group (ASG) with a private endpoint](configure-asg-private-endpoint.md).
purview Concept Policies Devops https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/purview/concept-policies-devops.md
For more on these DMVs/DMFs you can check these docs
## Next steps To get started with DevOps policies, consult the following blogs, videos and guides: * Try DevOps policies for Azure SQL Database: [Quick start guide](https://aka.ms/quickstart-DevOps-policies)
-See [other videos, blogs and documents](./how-to-policies-devops-authoring-generic.md#next-steps)
+* See [other videos, blogs and documents](./how-to-policies-devops-authoring-generic.md#next-steps)
purview How To Policies Devops Authoring Generic https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/purview/how-to-policies-devops-authoring-generic.md
Previously updated : 03/12/2023 Last updated : 03/23/2023 # Create, list, update and delete Microsoft Purview DevOps policies
SELECT * FROM [databaseName].schemaName.tableName
## Role definition detail This section contains a reference of how relevant Microsoft Purview data policy roles map to specific actions in SQL data sources.
+>[!NOTE]
+> The roles below may be expanded in the future to include additional actions that become available as long as they are are consistent with the spirit of the role.
+ | **Microsoft Purview policy role definition** | **Data source specific actions** | |-|--| | | |
This section contains a reference of how relevant Microsoft Purview data policy
||Microsoft.Sql/sqlservers/databases/SystemViewsAndFunctions/DatabaseSecurityMetadata/rows/select | |||
+>[!NOTE]
+> The role definition for SQL Performance Monitor will be expanded around April 2023 to include the following actions.
+
+- /Sqlservers/Databases/SystemViewsAndFunctions/DatabasePerformanceState/Rows/Select
+- /Sqlservers/SystemViewsAndFunctions/ServerPerformanceState/Rows/Select
+- /Sqlservers/Databases/SystemViewsAndFunctions/DatabaseGeneralMetadata/Rows/Select
+- /Sqlservers/SystemViewsAndFunctions/ServerGeneralMetadata/Rows/Select
+- /Sqlservers/Databases/DBCCs/ViewDatabasePerformanceState/Execute
+- /Sqlservers/DBCCs/ViewServerPerformanceState/Execute
+- /Sqlservers/Databases/ExtendedEventSessions/Create
+- /Sqlservers/Databases/ExtendedEventSessions/Options/Alter
+- /Sqlservers/Databases/ExtendedEventSessions/Events/Add
+- /Sqlservers/Databases/ExtendedEventSessions/Events/Drop
+- /Sqlservers/Databases/ExtendedEventSessions/State/Enable
+- /Sqlservers/Databases/ExtendedEventSessions/State/Disable
+- /Sqlservers/Databases/ExtendedEventSessions/Drop
+- /Sqlservers/Databases/ExtendedEventSessions/Target/Add
+- /Sqlservers/Databases/ExtendedEventSessions/Target/Drop
+- /Sqlservers/ExtendedEventSessions/Create
+- /Sqlservers/ExtendedEventSessions/Options/Alter
+- /Sqlservers/ExtendedEventSessions/Events/Add
+- /Sqlservers/ExtendedEventSessions/Events/Drop
+- /Sqlservers/ExtendedEventSessions/State/Enable
+- /Sqlservers/ExtendedEventSessions/State/Disable
+- /Sqlservers/ExtendedEventSessions/Drop
+- /Sqlservers/ExtendedEventSessions/Target/Add
+- /Sqlservers/ExtendedEventSessions/Target/Drop
+ ## Next steps Check the blogs, videos and related documents
Check the blogs, videos and related documents
* Doc: [Microsoft Purview DevOps policies on Azure Arc-enabled SQL Server](./how-to-policies-devops-arc-sql-server.md) * Doc: [Microsoft Purview DevOps policies on Azure SQL Database](./how-to-policies-devops-azure-sql-db.md) * Doc: [Microsoft Purview DevOps policies on entire resource groups or subscriptions](./how-to-policies-devops-resource-group.md)
-* Doc: [Troubleshoot Microsoft Purview policies for SQL data sources](./troubleshoot-policy-sql.md)
+* Doc: [Troubleshoot Microsoft Purview policies for SQL data sources](./troubleshoot-policy-sql.md)
search Cognitive Search Tutorial Blob https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/cognitive-search-tutorial-blob.md
The skillset is attached to an [indexer](search-indexer-overview.md). It uses bu
## Prerequisites
-* [Postman desktop app](https://www.getpostman.com/)
+* [Postman app](https://www.postman.com/downloads/)
* [Azure Storage](https://azure.microsoft.com/services/storage/) * [Azure Cognitive Search](https://azure.microsoft.com/services/search/) * [Sample data](https://github.com/Azure-Samples/azure-search-sample-data/tree/master/ai-enrichment-mixed-media)
search Cognitive Search Tutorial Debug Sessions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/cognitive-search-tutorial-debug-sessions.md
Before you begin, have the following prerequisites in place:
+ Azure Storage account with [Blob storage](../storage/blobs/index.yml), used for hosting sample data, and for persisting cached data created during a debug session.
-+ [Postman desktop app](https://www.getpostman.com/) and a [Postman collection](https://github.com/Azure-Samples/azure-search-postman-samples/tree/master/Debug-sessions) to create objects using the REST APIs.
++ [Postman app](https://www.postman.com/downloads/) and a [Postman collection](https://github.com/Azure-Samples/azure-search-postman-samples/tree/master/Debug-sessions) to create objects using the REST APIs. + [Sample PDFs (clinical trials)](https://github.com/Azure-Samples/azure-search-sample-data/tree/master/clinical-trials/clinical-trials-pdf-19).
search Knowledge Store Create Rest https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/knowledge-store-create-rest.md
To make the initial data set available, the hotel reviews are first imported int
## Prerequisites
-+ [Postman desktop app](https://www.getpostman.com/)
++ [Postman app](https://www.postman.com/downloads/) + An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/).
search Knowledge Store Projection Example Long https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/knowledge-store-projection-example-long.md
If your application requirements call for multiple skills and projections, this
## Download sample definitions
-This example uses [Postman Desktop application](https://www.postman.com/downloads/) and the [Search REST APIs](/rest/api/searchservice/).
+This example uses [Postman app](https://www.postman.com/downloads/) and the [Search REST APIs](/rest/api/searchservice/).
Clone or download [azure-search-postman-samples](https://github.com/Azure-Samples/azure-search-postman-samples) on GitHub and import the [**Projections collection**](https://github.com/Azure-Samples/azure-search-postman-samples/tree/master/projections) to step through this example yourself. ## Set up sample data
-Sample documents aren't specifically included with the Projections collection, but the [AI enrichment demo data files](https://github.com/Azure-Samples/azure-search-sample-data/tree/master/ai-enrichment-mixed-media) from the [azure-search-sample-data repo](https://github.com/Azure-Samples/azure-search-sample-data) contain text and images, and will work with the projections described in this example.
+Sample documents aren't included with the Projections collection, but the [AI enrichment demo data files](https://github.com/Azure-Samples/azure-search-sample-data/tree/master/ai-enrichment-mixed-media) from the [azure-search-sample-data repo](https://github.com/Azure-Samples/azure-search-sample-data) contain text and images, and will work with the projections described in this example.
Create a blob container in Azure Storage and upload all 14 items.
A [Shaper skill](cognitive-search-skill-shaper.md) is a utility for working with
In this example, the custom shape combines blob metadata and identified entities and key phrases. The custom shape is called `projectionShape` and is parented under `/document`.
-One purpose of shaping is to ensure that all enrichment nodes are expressed in well-formed JSON, which is required for projecting into knowledge store. This is especially true when an enrichment tree contains nodes that are not well-formed JSON (for example, when an enrichment is parented to a primitive like a string).
+One purpose of shaping is to ensure that all enrichment nodes are expressed in well-formed JSON, which is required for projecting into knowledge store. This is especially true when an enrichment tree contains nodes that aren't well-formed JSON (for example, when an enrichment is parented to a primitive like a string).
Notice the last two nodes, `KeyPhrases` and `Entities`. These are wrapped into a valid JSON object with the `sourceContext`. This is required as `keyphrases` and `entities` are enrichments on primitives and need to be converted to valid JSON before they can be projected.
Notice the last two nodes, `KeyPhrases` and `Entities`. These are wrapped into a
### Add Shapers to a skillset
-The example skillset introduced at the start of this article did not include the Shaper skill, but Shaper skills belong in a skillset and are often placed towards the end.
+The example skillset introduced at the start of this article didn't include the Shaper skill, but Shaper skills belong in a skillset and are often placed towards the end.
Within a skillset, a Shaper skill might look like this:
Within a skillset, a Shaper skill might look like this:
## Projecting to tables
-Drawing on the examples above, there is a known quantity of enrichments and data shapes that can be referenced in table projections. In the tables projection below, three tables are defined by setting the `tableName`, `source` and `generatedKeyName` properties.
+Drawing on the examples above, there's a known quantity of enrichments and data shapes that can be referenced in table projections. In the tables projection below, three tables are defined by setting the `tableName`, `source` and `generatedKeyName` properties.
All three of these tables will be related through generated keys and by the shared parent `/document/projectionShape`.
You can check projection definitions by following these steps:
1. After updating the skillset, run the indexer.
-You now have a working projection with three tables. [Importing these tables into Power BI](knowledge-store-connect-power-bi.md) should result in Power BI auto-discovering the relationships.
+You now have a working projection with three tables. [Importing these tables into Power BI](knowledge-store-connect-power-bi.md) should result in Power BI discovering the relationships.
Before moving on to the next example, let's revisit aspects of the table projection to understand the mechanics of slicing and relating data.
Before moving on to the next example, let's revisit aspects of the table project
Slicing is a technique that subdivides a whole consolidated shape into constituent parts. The outcome consists of separate but related tables that you can work with individually.
-In the example, `projectionShape` is the consolidated shape (or enrichment node). In the projection definition, `projectionShape` is sliced into additional tables, which enables you to pull out parts of the shape, `keyPhrases` and `Entities`. In Power BI, this is useful as multiple entities and keyPhrases are associated with each document, and you will get more insights if you can see entities and keyPhrases as categorized data.
+In the example, `projectionShape` is the consolidated shape (or enrichment node). In the projection definition, `projectionShape` is sliced into additional tables, which enables you to pull out parts of the shape, `keyPhrases` and `Entities`. In Power BI, this is useful as multiple entities and keyPhrases are associated with each document, and you'll get more insights if you can see entities and keyPhrases as categorized data.
Slicing implicitly generates a relationship between the parent and child tables, using the `generatedKeyName` in the parent table to create a column with the same name in the child table. ### Naming relationships
-The `generatedKeyName` and `referenceKeyName` properties are used to relate data across tables or even across projection types. Each row in the child table has a property pointing back to the parent. The name of the column or property in the child is the `referenceKeyName` from the parent. When the `referenceKeyName` is not provided, the service defaults it to the `generatedKeyName` from the parent.
+The `generatedKeyName` and `referenceKeyName` properties are used to relate data across tables or even across projection types. Each row in the child table has a property pointing back to the parent. The name of the column or property in the child is the `referenceKeyName` from the parent. When the `referenceKeyName` isn't provided, the service defaults it to the `generatedKeyName` from the parent.
Power BI relies on these generated keys to discover relationships within the tables. If you need the column in the child table named differently, set the `referenceKeyName` property on the parent table. One example would be to set the `generatedKeyName` as ID on the tblDocument table and the `referenceKeyName` as DocumentID. This would result in the column in the tblEntities and tblKeyPhrases tables containing the document ID being named DocumentID. ## Projecting blob documents
-Object projections are JSON representations of the enrichment tree that can be sourced from any node. In comparison with table projections, object projections are simpler to define and are used when projecting whole documents. Object projections are limited to a single projection in a container and cannot be sliced.
+Object projections are JSON representations of the enrichment tree that can be sourced from any node. In comparison with table projections, object projections are simpler to define and are used when projecting whole documents. Object projections are limited to a single projection in a container and can't be sliced.
To define an object projection, use the `objects` array in the projections property.
-The source is the path to a node of the enrichment tree that is the root of the projection. Although it is not required, the node path is usually the output of a Shaper skill. This is because most skills do not output valid JSON objects on their own, which means that some form of shaping is necessary. In many cases, the same Shaper skill that creates a table projection can be used to generate an object projection. Alternatively, the source can also be set to a node with [an inline shaping](knowledge-store-projection-shape.md#inline-shape) to provide the structure.
+The source is the path to a node of the enrichment tree that is the root of the projection. Although it isn't required, the node path is usually the output of a Shaper skill. This is because most skills don't output valid JSON objects on their own, which means that some form of shaping is necessary. In many cases, the same Shaper skill that creates a table projection can be used to generate an object projection. Alternatively, the source can also be set to a node with [an inline shaping](knowledge-store-projection-shape.md#inline-shape) to provide the structure.
The destination is always a blob container.
To define a file projection, use the `files` array in the projections property.
The source is always `/document/normalized_images/*`. File projections only act on the `normalized_images` collection. Neither indexers nor a skillset will pass through the original non-normalized image.
-The destination is always a blob container, with a folder prefix of the base64 encoded value of the document ID. File projections cannot share the same container as object projections and need to be projected into a different container.
+The destination is always a blob container, with a folder prefix of the base64 encoded value of the document ID. File projections can't share the same container as object projections and need to be projected into a different container.
The following example projects all normalized images extracted from the document node of an enriched document, into a container called `myImages`.
From the consolidated crossProjection object, slice the object into multiple tab
} ```
-Object projections require a container name for each projection. Object projections and file projections cannot share a container.
+Object projections require a container name for each projection. Object projections and file projections can't share a container.
### Relationships among table, object, and file projections
-This example also highlights another feature of projections. By defining multiple types of projections within the same projection object, there is a relationship expressed within and across the different types (tables, objects, files). This allows you to start with a table row for a document and find all the OCR text for the images within that document in the object projection.
+This example also highlights another feature of projections. By defining multiple types of projections within the same projection object, there's a relationship expressed within and across the different types (tables, objects, files). This allows you to start with a table row for a document and find all the OCR text for the images within that document in the object projection.
-If you do not want the data related, define the projections in different projection groups. For example, the following snippet will result in the tables being related, but without relationships between the tables and the object (OCR text) projections.
+If you don't want the data related, define the projections in different projection groups. For example, the following snippet will result in the tables being related, but without relationships between the tables and the object (OCR text) projections.
Projection groups are useful when you want to project the same data in different shapes for different needs. For example, a projection group for the Power BI dashboard, and another projection group for capturing data used to train a machine learning model wrapped in a custom skill.
When building projections of different types, file and object projections are ge
## Next steps
-The example in this article demonstrates common patterns on how to create projections. Now that you have a good understanding of the concepts, you are better equipped to build projections for your specific scenario.
+The example in this article demonstrates common patterns on how to create projections. Now that you have a good understanding of the concepts, you're better equipped to build projections for your specific scenario.
> [!div class="nextstepaction"] > [Configure caching for incremental enrichment](search-howto-incremental-index.md)
search Samples Rest https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/samples-rest.md
Learn about the REST API samples that demonstrate the functionality and workflow
REST is the definitive programming interface for Azure Cognitive Search, and all operations that can be invoked programmatically are available first in REST, and then in SDKs. For this reason, most examples in the documentation leverage the REST APIs to demonstrate or explain important concepts.
-REST samples are usually developed and tested on Postman, but you can use any client that supports HTTP calls, including the [Postman desktop app](https://www.postman.com/downloads/). [This quickstart](search-get-started-rest.md) explains how to formulate the HTTP request from end-to-end.
+REST samples are usually developed and tested on Postman, but you can use any client that supports HTTP calls, including the [Postman app](https://www.postman.com/downloads/). [This quickstart](search-get-started-rest.md) explains how to formulate the HTTP request from end-to-end.
## Doc samples
search Search File Storage Integration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-file-storage-integration.md
This article supplements [**Create an indexer**](search-howto-create-indexers.md
+ Read permissions on Azure Storage. A "full access" connection string includes a key that grants access to the content, but if you're using Azure roles instead, make sure the [search service managed identity](search-howto-managed-identities-data-sources.md) has **Data and Reader** permissions.
-+ A REST client, such as [Postman](search-get-started-rest.md), to send REST calls that create the data source, index, and indexer.
++ Use a REST client, such as [Postman app](https://www.postman.com/downloads/), if you want to formulate REST calls similar to the ones shown in this article. ## Supported document formats
search Search Get Started Rest https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-get-started-rest.md
This article explains how to formulate requests interactively using the [Azure Cognitive Search REST APIs](/rest/api/searchservice) and a REST client for sending and receiving requests.
-The article uses the Postman desktop application. You can [download and import a Postman collection](https://github.com/Azure-Samples/azure-search-postman-samples/tree/master/Quickstart) if you prefer to use predefined requests.
+The article uses the Postman app. You can [download and import a Postman collection](https://github.com/Azure-Samples/azure-search-postman-samples/tree/master/Quickstart) if you prefer to use predefined requests.
If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin. ## Prerequisites
-+ [Postman desktop app](https://www.getpostman.com/), used for sending requests to Azure Cognitive Search.
++ [Postman app](https://www.postman.com/downloads/), used for sending requests to Azure Cognitive Search. + [Create an Azure Cognitive Search service](search-create-service-portal.md) or [find an existing service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices) under your current subscription. You can use a free service for this quickstart.
Request header composition includes two elements: `Content-Type` and the `api-ke
For the requests to succeed, you'll need to provide the service name and api-key as collection variables.
-1. Open the Postman Desktop app and import the collection.
+1. Open the Postman app and import the collection.
1. Select the collection's access menu, select **Edit**, and provide the service name and key of your search service.
search Search How To Create Search Index https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-how-to-create-search-index.md
The following screenshot highlights where **Add index** and **Import data** appe
### [**REST**](#tab/index-rest)
-[**Create Index (REST API)**](/rest/api/searchservice/create-index) is used to create an index. The Postman desktop app can function as a search index client to connect to your search service and send requests. See [Create a search index using REST and Postman](search-get-started-rest.md) to get started.
+[**Create Index (REST API)**](/rest/api/searchservice/create-index) is used to create an index. The Postman app can function as a search index client to connect to your search service and send requests. See [Create a search index using REST and Postman](search-get-started-rest.md) to get started.
The REST API provides defaults for field attribution. For example, all `Edm.String` fields are searchable by default. Attributes are shown in full below for illustrative purposes, but you can omit attribution in cases where the default values apply.
search Search Howto Create Indexers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-howto-create-indexers.md
When you're ready to create an indexer on a remote search service, you'll need a
### [**REST**](#tab/indexer-rest)
-The Postman desktop app can function as an indexer client. Using the app, you can connect to your search service and send [Create Indexer (REST)](/rest/api/searchservice/create-indexer) or [Update indexer](/rest/api/searchservice/update-indexer) requests.
+The Postman app can function as an indexer client. Using the app, you can connect to your search service and send [Create Indexer (REST)](/rest/api/searchservice/create-indexer) or [Update indexer](/rest/api/searchservice/update-indexer) requests.
```http POST /indexers?api-version=[api-version]
search Search Howto Index Azure Data Lake Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-howto-index-azure-data-lake-storage.md
For a code sample in C#, see [Index Data Lake Gen2 using Azure AD](https://githu
+ Read permissions on Azure Storage. A "full access" connection string includes a key that grants access to the content, but if you're using Azure roles instead, make sure the [search service managed identity](search-howto-managed-identities-data-sources.md) has **Storage Blob Data Reader** permissions.
-+ A REST client, such as [Postman](search-get-started-rest.md), to send REST calls that create the data source, index, and indexer.
++ Use a REST client, such as [Postman app](https://www.postman.com/downloads/), if you want to formulate REST calls similar to the ones shown in this article. > [!NOTE] > ADLS Gen2 implements an [access control model](../storage/blobs/data-lake-storage-access-control.md) that supports both Azure role-based access control (Azure RBAC) and POSIX-like access control lists (ACLs) at the blob level. Azure Cognitive Search does not support document-level permissions. All users have the same level of access to all searchable and retrievable content in the index. If document-level permissions are an application requirement, consider [security trimming](search-security-trimming-for-azure-search.md) as a potential solution.
search Search Howto Index Encrypted Blobs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-howto-index-encrypted-blobs.md
If you don't have an Azure subscription, open a [free account](https://azure.mic
+ [Azure Key Vault](https://azure.microsoft.com/services/key-vault/) in the same subscription as Azure Cognitive Search. The key vault must have **soft-delete** and **purge protection** enabled.
-+ [Postman desktop app](https://www.getpostman.com/)
++ [Postman app](https://www.postman.com/downloads/) Custom skill deployment creates an Azure Function app and an Azure Storage account. Since these resources are created for you, they aren't listed as a prerequisite. When you're finished with this tutorial, remember to clean up the resources so that you aren't billed for services you're not using.
search Search Howto Indexing Azure Blob Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-howto-indexing-azure-blob-storage.md
Blob indexers are frequently used for both [AI enrichment](cognitive-search-conc
By default, both search and storage accept requests from public IP addresses. If network security isn't an immediate concern, you can index blob data using just the connection string and read permissions. When you're ready to add network protections, see [Indexer access to content protected by Azure network security features](search-indexer-securing-resources.md) for guidance about data access.
-+ A REST client, such as [Postman](search-get-started-rest.md), to make the requests described in this article.
++ Use a REST client, such as [Postman app](https://www.postman.com/downloads/), if you want to formulate REST calls similar to the ones shown in this article. <a name="SupportedFormats"></a>
search Search Howto Indexing Azure Tables https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-howto-indexing-azure-tables.md
This article supplements [**Create an indexer**](search-howto-create-indexers.md
+ [Azure Table Storage](../storage/tables/table-storage-overview.md)
-+ Tables containing text. If you have binary data, you can include [AI enrichment](cognitive-search-concept-intro.md) for image analysis.
++ Tables containing text. If you have binary data, consider [AI enrichment](cognitive-search-concept-intro.md) for image analysis.
-+ Read permissions to access Azure Storage. A "full access" connection string includes a key that gives access to the content, but if you're using Azure roles, make sure the [search service managed identity](search-howto-managed-identities-data-sources.md) has **Data and Reader** permissions.
++ Read permissions on Azure Storage. A "full access" connection string includes a key that gives access to the content, but if you're using Azure roles, make sure the [search service managed identity](search-howto-managed-identities-data-sources.md) has **Data and Reader** permissions.
-+ A REST client, such as [Postman](search-get-started-rest.md), to send REST calls that create the data source, index, and indexer.
++ Use a REST client, such as [Postman app](https://www.postman.com/downloads/), if you want to formulate REST calls similar to the ones shown in this article. ## Define the data source
-The data source definition specifies the data to index, credentials, and policies for identifying changes in the data. A data source is defined as an independent resource so that it can be used by multiple indexers.
+The data source definition specifies the source data to index, credentials, and policies for change detection. A data source is an independent resource that can be used by multiple indexers.
-1. [Create or update a data source](/rest/api/searchservice/create-data-source) to set its definition:
+1. [Create or update a data source](/rest/api/searchservice/create-data-source) to set its definition:
- ```json
+ ```http
+ POST https://[service name].search.windows.net/datasources?api-version=2020-06-30
{
- "name" : "hotel-tables",
- "type" : "azuretable",
- "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
- "container" : { "name" : "tblHotels", "query" : "PartitionKey eq '123'" }
+ "name": "my-table-storage-ds",
+ "description": null,
+ "type": "azuretable",
+ "subtype": null,
+ "credentials": {
+ "connectionString": "DefaultEndpointsProtocol=https;AccountName=<account name>"
+ },
+ "container": {
+ "name": "my-table-in-azure-storage",
+ "query": ""
+ },
+ "dataChangeDetectionPolicy": null,
+ "dataDeletionDetectionPolicy": null,
+ "encryptionKey": null,
+ "identity": null
}
- ```
+ ```
1. Set "type" to `"azuretable"` (required).
The data source definition specifies the data to index, credentials, and policie
1. Set "container" to the name of the table.
-1. Optionally, set "query" to a filter on PartitionKey. This is a best practice that improves performance. If "query" is specified any other way, the indexer will execute a full table scan, resulting in poor performance if the tables are large.
+1. Optionally, set "query" to a filter on PartitionKey. Setting this property is a best practice that improves performance. If "query" is null, the indexer executes a full table scan, which can result in poor performance if the tables are large.
A data source definition can also include [soft deletion policies](search-howto-index-changed-deleted-blobs.md), if you want the indexer to delete a search document when the source document is flagged for deletion.
Indexers can connect to a table using the following connections.
| The SAS should have the list and read permissions on the container. For more information, see [Using Shared Access Signatures](../storage/common/storage-sas-overview.md). | > [!NOTE]
-> If you use SAS credentials, you will need to update the data source credentials periodically with renewed signatures to prevent their expiration. If SAS credentials expire, the indexer will fail with an error message similar to "Credentials provided in the connection string are invalid or have expired".
+> If you use SAS credentials, you'll need to update the data source credentials periodically with renewed signatures to prevent their expiration. When SAS credentials expire, the indexer will fail with an error message similar to "Credentials provided in the connection string are invalid or have expired".
<a name="Performance"></a>
To avoid a full scan, you can use table partitions to narrow the scope of each i
+ Monitor indexer progress by using [Get Indexer Status API](/rest/api/searchservice/get-indexer-status), and periodically update the `<TimeStamp>` condition of the query based on the latest successful high-water-mark value.
- + With this approach, if you need to trigger a complete reindexing, you need to reset the data source query in addition to resetting the indexer.
+ + With this approach, if you need to trigger a full reindex, reset the data source query in addition to [resetting the indexer](search-howto-run-reset-indexers.md).
## Add search fields to an index
In a [search index](search-what-is-an-index.md), add fields to accept the conten
{ "name" : "my-search-index", "fields": [
- { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
+ { "name": "Key", "type": "Edm.String", "key": true, "searchable": false },
{ "name": "SomeColumnInMyTable", "type": "Edm.String", "searchable": true } ] } ```
-1. Create a document key field ("key": true), but allow the indexer to populate it automatically. Do not define a field mapping to alternative unique string field in your table.
+1. Create a document key field ("key": true), but allow the indexer to populate it automatically. A table indexer populates the key field with concatenated partition and row keys from the table. For example, if a rowΓÇÖs PartitionKey is `1` and RowKey is `1_123`, then the key value is `11_123`. If the partition key is null, just the row key is used.
+
+ If you're using the Import data wizard to create the index, the portal infers a "Key" field for the search index and uses an implicit field mapping to connect the source and destination fields. You don't have to add the field yourself, and you don't need to set up a field mapping.
- A table indexer populates the key field with concatenated partition and row keys from the table. For example, if a rowΓÇÖs PartitionKey is `PK1` and RowKey is `RK1`, then the key value is `PK1RK1`. If the partition key is null, just the row key is used.
+ If you're using the REST APIs and you want implicit field mappings, create and name the document key field "Key" in the search index definition as shown in the previous step (`{ "name": "Key", "type": "Edm.String", "key": true, "searchable": false }`). The indexer populates the Key field automatically, with no field mappings required.
-1. Create additional fields that correspond to entity fields. For example, if an entity looks like the following example, your search index should have fields for HotelName, Description, and Category.
+ If you don't want a field named "Key" in your search index, add an explicit field mapping in the indexer definition with the field name you want, setting the source field to "Key":
+
+ ```json
+ "fieldMappings" : [
+ {
+ "sourceFieldName" : "Key",
+ "targetFieldName" : "MyDocumentKeyFieldName"
+ }
+ ]
+ ```
+
+1. Now add any other entity fields that you want in your index. For example, if an entity looks like the following example, your search index should have fields for HotelName, Description, and Category to receive those values.
:::image type="content" source="media/search-howto-indexing-tables/table.png" alt-text="Screenshot of table content in Storage browser." border="true":::
- Using the same names and compatible [data types](/rest/api/searchservice/supported-data-types) minimizes the need for [field mappings](search-indexer-field-mappings.md).
+ Using the same names and compatible [data types](/rest/api/searchservice/supported-data-types) minimizes the need for [field mappings](search-indexer-field-mappings.md). When names and types are the same, the indexer can determine the data path automatically.
## Configure and run the table indexer
-Once the index and data source have been created, you're ready to create the indexer. Indexer configuration specifies the inputs, parameters, and properties controlling run time behaviors.
+Once you have an index and data source, you're ready to create the indexer. Indexer configuration specifies the inputs, parameters, and properties controlling run time behaviors.
1. [Create or update an indexer](/rest/api/searchservice/create-indexer) by giving it a name and referencing the data source and target index: ```http POST https://[service name].search.windows.net/indexers?api-version=2020-06-30 {
- "name" : "table-indexer",
- "dataSourceName" : "my-table-datasource",
+ "name" : "my-table-indexer",
+ "dataSourceName" : "my-table-storage-ds",
"targetIndexName" : "my-search-index",
- "parameters": {
- "batchSize": null,
- "maxFailedItems": null,
- "maxFailedItemsPerBatch": null,
- "base64EncodeKeys": null,
- "configuration:" { }
+ "disabled": null,
+ "schedule": null,
+ "parameters" : {
+ "batchSize" : null,
+ "maxFailedItems" : null,
+ "maxFailedItemsPerBatch" : null,
+ "base64EncodeKeys" : null,
+ "configuration" : { }
},
- "schedule" : { },
- "fieldMappings" : [ ]
+ "fieldMappings" : [ ],
+ "cache": null,
+ "encryptionKey": null
} ```
-1. [Specify field mappings](search-indexer-field-mappings.md) if there are differences in field name or type, or if you need multiple versions of a source field in the search index.
+1. [Specify field mappings](search-indexer-field-mappings.md) if there are differences in field name or type, or if you need multiple versions of a source field in the search index. The Target field is the name of the field in the search index.
+
+ ```json
+ "fieldMappings" : [
+ {
+ "sourceFieldName" : "Description",
+ "targetFieldName" : "HotelDescription"
+ }
+ ]
+ ```
1. See [Create an indexer](search-howto-create-indexers.md) for more information about other properties.
The response includes status and the number of items processed. It should look s
"lastResult": { "status":"success", "errorMessage":null,
- "startTime":"2022-02-21T00:23:24.957Z",
- "endTime":"2022-02-21T00:36:47.752Z",
+ "startTime":"2023-02-21T00:23:24.957Z",
+ "endTime":"2023-02-21T00:36:47.752Z",
"errors":[], "itemsProcessed":1599501, "itemsFailed":0,
The response includes status and the number of items processed. It should look s
{ "status":"success", "errorMessage":null,
- "startTime":"2022-02-21T00:23:24.957Z",
- "endTime":"2022-02-21T00:36:47.752Z",
+ "startTime":"2023-02-21T00:23:24.957Z",
+ "endTime":"2023-02-21T00:36:47.752Z",
"errors":[], "itemsProcessed":1599501, "itemsFailed":0,
Execution history contains up to 50 of the most recently completed executions, w
## Next steps
-You can now [run the indexer](search-howto-run-reset-indexers.md), [monitor status](search-howto-monitor-indexers.md), or [schedule indexer execution](search-howto-schedule-indexers.md). The following articles apply to indexers that pull content from Azure Storage:
+Learn more about how to [run the indexer](search-howto-run-reset-indexers.md), [monitor status](search-howto-monitor-indexers.md), or [schedule indexer execution](search-howto-schedule-indexers.md). The following articles apply to indexers that pull content from Azure Storage:
-+ [Index large data sets](search-howto-large-index.md)
-+ [Indexer access to content protected by Azure network security features](search-indexer-securing-resources.md)
++ [Tutorial: Index JSON blobs from Azure Storage](search-semi-structured-data.md)++ [Tutorial: Index encrypted blobs in Azure Storage](search-howto-index-encrypted-blobs.md)
search Search Indexer Howto Access Private https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-indexer-howto-access-private.md
Rerun the first request to monitor the provisioning state as it transitions from
See [Manage with the Azure CLI](search-manage-azure-cli.md) for instructions on getting started.
-First, use [az-search-shared-private-link-resource list](/azure/search/shared-private-link-resource?view=azure-cli-latest#az-search-shared-private-link-resource-list&preserve-view=true) to review any existing shared private links to ensure you're not duplicating a link. There can be only one shared private link for each resource and sub-resource combination.
+First, use [az-search-shared-private-link-resource list](/cli/azure/search/shared-private-link-resource) to review any existing shared private links to ensure you're not duplicating a link. There can be only one shared private link for each resource and sub-resource combination.
```azurecli az search shared-private-link-resource list --service-name {{your-search-service-name}} --resource-group {{your-search-service-resource-group}}
After the indexer is created successfully, it should connect to the Azure resour
1. If you haven't done so already, verify that your Azure PaaS resource refuses connections from the public internet. If connections are accepted, review the DNS settings in the **Networking** page of your Azure PaaS resource.
-1. Choose a tool that can invoke an outbound request scenario, such as an indexer connection to a private endpoint. An easy choice is using the **Import data** wizard, but you can also try the Postman desktop app and REST APIs for more precision. Assuming that your search service isn't also configured for a private connection, the REST client connection to Search can be over the public internet.
+1. Choose a tool that can invoke an outbound request scenario, such as an indexer connection to a private endpoint. An easy choice is using the **Import data** wizard, but you can also try the Postman app and REST APIs for more precision. Assuming that your search service isn't also configured for a private connection, the REST client connection to Search can be over the public internet.
1. Set the connection string to the private Azure PaaS resource. The format of the connection string doesn't change for shared private link. The search service invokes the shared private link internally.
search Search Query Create https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-query-create.md
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/
## Choose a client
-For early development and proof-of-concept testing, we recommend starting with an interactive tool like Azure portal, or the Postman Desktop App for making REST API calls. With these approaches, you can test a query request in isolation and assess the effects of different properties without having to write any code.
+For early development and proof-of-concept testing, we recommend starting with an interactive tool like Azure portal, or the Postman app for making REST API calls. With these approaches, you can test a query request in isolation and assess the effects of different properties without having to write any code.
To call search from within an app, we recommend the Azure.Document.Search client libraries in the Azure SDKs for .NET, Java, JavaScript, and Python.
You can select any index and REST API version, including preview. A query string
### Use a REST client
-The [Postman desktop app](https://www.postman.com/downloads/) can function as a query client. Using the app, you can connect to your search service and send [Search Documents (REST)](/rest/api/searchservice/search-documents) requests. Numerous tutorials and examples demonstrate REST clients for querying indexing.
+The [Postman app](https://www.postman.com/downloads/) can function as a query client. Using the app, you can connect to your search service and send [Search Documents (REST)](/rest/api/searchservice/search-documents) requests. Numerous tutorials and examples demonstrate REST clients for querying indexing.
Start with [Create a search index using REST and Postman](search-get-started-rest.md) for step-by-step instructions for setting up requests.
search Search Security Trimming For Azure Search With Aad https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-security-trimming-for-azure-search-with-aad.md
This article covers the following tasks:
> - Cache the new groups > - Index documents with associated groups > - Issue a search request with group identifiers filter
->
+ > [!NOTE] > Sample code snippets in this article are written in C#. You can find the full source code [on GitHub](https://github.com/Azure-Samples/search-dotnet-getting-started).
search Search Semi Structured Data https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/search-semi-structured-data.md
If you don't have an Azure subscription, create a [free account](https://azure.m
## Prerequisites + [Azure Storage](../storage/common/storage-account-create.md)
-+ [Postman desktop app](https://www.getpostman.com/)
++ [Postman app](https://www.postman.com/downloads/) + [Create](search-create-service-portal.md) or [find an existing search service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices) > [!Note]
search Semantic How To Query Request https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/semantic-how-to-query-request.md
You'll need a search client that supports preview APIs on the query request. Her
+ [Search explorer](search-explorer.md) in Azure portal, recommended for initial exploration.
-+ [Postman Desktop App](https://www.postman.com/downloads/) using the [2021-04-30-Preview REST APIs](/rest/api/searchservice/preview-api/search-documents). See this [Quickstart](search-get-started-rest.md) for help with setting up your requests.
++ [Postman app](https://www.postman.com/downloads/) using the [2021-04-30-Preview REST APIs](/rest/api/searchservice/preview-api/search-documents). See this [Quickstart](search-get-started-rest.md) for help with setting up your requests. + [Azure.Search.Documents 11.4.0-beta.5](https://www.nuget.org/packages/Azure.Search.Documents/11.4.0-beta.5) in the Azure SDK for .NET Preview.
search Tutorial Create Custom Analyzer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/tutorial-create-custom-analyzer.md
This tutorial uses Postman and Azure Cognitive Search's [REST APIs](/rest/api/se
The following services and tools are required for this tutorial.
-+ [Postman desktop app](https://www.getpostman.com/)
++ [Postman app](https://www.postman.com/downloads/) + [Create](search-create-service-portal.md) or [find an existing search service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices) ## Download files
search Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/search/whats-new.md
Learn about the latest updates to Azure Cognitive Search functionality, docs, an
| Item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Type | Description | |--||--|
-| [**ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search (GitHub)**](https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/README.md) | Sample | Python code and a template for combining Cognitive Search with the large language models in OpenAI. For background, see this Tech Community blog post: [Revolutionize your Enterprise Data with ChatGPT](https://techcommunity.microsoft.com/t5/ai-applied-ai-blog/revolutionize-your-enterprise-data-with-chatgpt-next-gen-apps-w/ba-p/3762087). To summarize the key points: <ul><li>Use Cognitive Search to consolidate and index searchable content.</li> <li>Query the index for initial search results.</li> <li>Assemble prompts from those results and send to the gpt-35-turbo (preview) model in Azure OpenAI.</li> <li>Return a summary and provide citations and transparency in your customer-facing app so that users can evaluate the response.</li> </ul>|
+| [**ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search (GitHub)**](https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/README.md) | Sample | Python code and a template for combining Cognitive Search with the large language models in OpenAI. For background, see this Tech Community blog post: [Revolutionize your Enterprise Data with ChatGPT](https://techcommunity.microsoft.com/t5/ai-applied-ai-blog/revolutionize-your-enterprise-data-with-chatgpt-next-gen-apps-w/ba-p/3762087). <br><br>Key points: <br><br>Use Cognitive Search to consolidate and index searchable content.</br> <br>Query the index for initial search results.</br> <br>Assemble prompts from those results and send to the gpt-35-turbo (preview) model in Azure OpenAI.</br> <br>Return a cross-document answer and provide citations and transparency in your customer-facing app so that users can assess the response.</br>|
## November 2022
security Subdomain Takeover https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/security/fundamentals/subdomain-takeover.md
The tool supports the Azure resources listed in the following table. The tool ex
| Service | Type | FQDNproperty | Example | |||--|| | Azure Front Door | microsoft.network/frontdoors | properties.cName | `abc.azurefd.net` |
-| Azure Blob Storage | microsoft.storage/storageaccounts | properties.primaryEndpoints.blob | `abc. blob.core.windows.net` |
+| Azure Blob Storage | microsoft.storage/storageaccounts | properties.primaryEndpoints.blob | `abc.blob.core.windows.net` |
| Azure CDN | microsoft.cdn/profiles/endpoints | properties.hostName | `abc.azureedge.net` | | Public IP addresses | microsoft.network/publicipaddresses | properties.dnsSettings.fqdn | `abc.EastUs.cloudapp.azure.com` | | Azure Traffic Manager | microsoft.network/trafficmanagerprofiles | properties.dnsConfig.fqdn | `abc.trafficmanager.net` |
service-connector Tutorial Django Webapp Postgres Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/service-connector/tutorial-django-webapp-postgres-cli.md
zone_pivot_groups: postgres-server-options
::: zone pivot="postgres-single-server"
-This tutorial shows how to deploy a data-driven Python [Django](https://www.djangoproject.com/) web app to [Azure App Service](overview.md) and connect it to an Azure Database for a Postgres database. You can also try the PostgresSQL Flexible Server by selecting the option above. Flexible Server provides a simpler deployment mechanism and lower ongoing costs.
+This tutorial shows how to deploy a data-driven Python [Django](https://www.djangoproject.com/) web app to [Azure App Service](overview.md) and connect it to an Azure Database for a Postgres database. You can also try the PostgreSQL Flexible Server by selecting the option above. Flexible Server provides a simpler deployment mechanism and lower ongoing costs.
In this tutorial, you use the Azure CLI to complete the following tasks:
site-recovery Azure To Azure Architecture https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/site-recovery/azure-to-azure-architecture.md
If outbound access for VMs is controlled with URLs, allow these URLs.
| - | -- | - | -- | | Storage | `*.blob.core.windows.net` | `*.blob.core.usgovcloudapi.net` | Allows data to be written from the VM to the cache storage account in the source region. | | Azure Active Directory | `login.microsoftonline.com` | `login.microsoftonline.us` | Provides authorization and authentication to Site Recovery service URLs. |
-| Replication | `*.hypervrecoverymanager.windowsazure.com` | `*.hypervrecoverymanager.windowsazure.com` | Allows the VM to communicate with the Site Recovery service. |
+| Replication | `*.hypervrecoverymanager.windowsazure.com` | `*.hypervrecoverymanager.windowsazure.us` | Allows the VM to communicate with the Site Recovery service. |
| Service Bus | `*.servicebus.windows.net` | `*.servicebus.usgovcloudapi.net` | Allows the VM to write Site Recovery monitoring and diagnostics data. | | Key Vault | `*.vault.azure.net` | `*.vault.usgovcloudapi.net` | Allows access to enable replication for ADE-enabled virtual machines via portal | | Azure Automation | `*.automation.ext.azure.com` | `*.azure-automation.us` | Allows enabling auto-upgrade of mobility agent for a replicated item via portal |
spring-apps How To Enterprise Marketplace Offer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enterprise-marketplace-offer.md
Title: View Azure Spring Apps Enterprise tier offering from Azure Marketplace
-description: Learn how to view the Azure Spring Apps Enterprise tier offering from Azure Marketplace.
+ Title: Enterprise tier in Azure Marketplace
+description: Learn about the Azure Spring Apps Enterprise tier offering available in Azure Marketplace.
Previously updated : 10/12/2022- Last updated : 03/24/2023+
-# View Azure Spring Apps Enterprise tier offering in Azure Marketplace
+# Enterprise tier in Azure Marketplace
> [!NOTE] > Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams. **This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
-This article shows you how to view the Azure Spring Apps Enterprise tier with VMware Tanzu offering through Azure Marketplace. You can redirect to the Azure Spring Apps Enterprise tier creation page from Azure Marketplace.
+This article describes the Azure Marketplace offer and license requirements for the VMware Taznu components in the Enterprise tier in Azure Spring Apps.
-Azure Spring Apps Enterprise tier is optimized for the needs of enterprise Spring developers through advanced configurability, flexibility, portability, and enterprise-ready VMware Spring Runtime 24x7 support. Developers also benefit from access to Spring experts and from commercial Tanzu components, such as VMware Tanzu® Build Service™, Application Configuration Service for VMware Tanzu®, and VMware Tanzu® Service Registry.
+## Enterprise tier and VMware Tanzu components
-You can obtain and pay for a license to Tanzu components through an [Azure Marketplace offering](https://aka.ms/ascmpoffer). Azure Spring Apps manages the license acquisition so you don't have to do it yourself.
+The Azure Spring Apps Enterprise tier is optimized for the needs of enterprise Spring developers and provides advanced configurability, flexibility, and portability. Azure Spring Apps also provides the enterprise-ready VMware Spring Runtime with 24/7 support in a strong partnership with VMware. You can learn more about the tier's value propositions in the [Enterprise plan](./overview.md#enterprise-plan) section of [What is Azure Spring Apps?](/azure/spring-apps/overview)
-## Prerequisites
+Because the Enterprise tier provides feature parity with the Standard tier, it provides a rich set of features that include app lifecycle management, monitoring, and troubleshooting.
-To purchase in Azure Marketplace, you must meet the following prerequisites:
+The Enterprise tier provides the following managed VMware Tanzu components that empower enterprises to ship faster:
-- Your Azure subscription must be registered to the `Microsoft.SaaS` resource provider. For more information, see the [Register resource provider](../azure-resource-manager/management/resource-providers-and-types.md#register-resource-provider) section of [Azure resource providers and types](../azure-resource-manager/management/resource-providers-and-types.md).-- Your Azure subscription must have an associated payment method. Azure credits or free MSDN subscriptions aren't supported. For more information, see the [Purchasing requirements](/marketplace/azure-marketplace-overview#purchasing-requirements) section of [What is Azure Marketplace?](/marketplace/azure-marketplace-overview)-- Your Azure subscription must belong to a billing account in a supported geographic location. For more information, see the [Supported geographic locations](#supported-geographic-locations) section of this article.-- Your organization must allow Azure Marketplace purchases. For more information, see the [Enabling Azure Marketplace purchases](../cost-management-billing/manage/ea-azure-marketplace.md#enabling-azure-marketplace-purchases) section of [Azure Marketplace](../cost-management-billing/manage/ea-azure-marketplace.md).-- Your organization must allow acquisition of any Azure Marketplace software application described in the [Purchase policy management](/marketplace/azure-purchasing-invoicing#purchase-policy-management) section of [Azure Marketplace purchasing](/marketplace/azure-purchasing-invoicing).-- You must accept the legal terms and privacy statements during enterprise tier provisioning on Azure portal, or use the following CLI command to do so in advance.
+- Tanzu Build Service
+- Application Configuration Service for Tanzu
+- Tanzu Service Registry
+- Spring Cloud Gateway for Tanzu
+- API portal for VMware Tanzu
+- Application Live View for VMware Tanzu
+- Application Accelerator for VMware Tanzu
- ```azurecli
- az term accept \
- --publisher vmware-inc \
- --product azure-spring-cloud-vmware-tanzu-2 \
- --plan asa-ent-hr-mtr
- ```
+The pricing for Azure Spring Apps Enterprise tier is composed of the following two parts:
-## View Azure Spring Apps Enterprise tier offering from Azure Marketplace
+- Infrastructure pricing, set by Microsoft, based on vCPU and memory usage of apps and managed Tanzu components.
+- Tanzu component licensing pricing, set by VMware, based on vCPU usage of apps.
-To view the Azure Spring Apps Enterprise tier offering and read a detailed description, see [Azure Spring Apps Enterprise tier](https://aka.ms/ascmpoffer).
+For more information about pricing, see [Azure Spring Apps pricing](https://azure.microsoft.com/pricing/details/spring-apps/).
-To view the supported plans in your market, select **Plans + Pricing**.
+To provide the best customer experience to manage the Tanzu component license purchasing and metering, VMware creates an [Azure Spring Apps Enterprise](https://aka.ms/ascmpoffer) offer in Azure Marketplace. This offer represents a Tanzu component license that is automatically purchased on behalf of customers during the creation of an Azure Spring Apps Enterprise tier instance.
+Under this implicit Azure Marketplace third-party offer purchase from VMware, your personal data and application vCPU usage data is shared with VMware. You agree to this data sharing when you agree to the marketplace terms upon creating the service instance.
-> [!NOTE]
-> If Azure displays the message *No plans are available for market '\<Location>'*, none of your Azure subscriptions can purchase the SaaS offering. For more information, see the [No plans are available for market '\<Location>'](./troubleshoot.md#no-plans-are-available-for-market-location) section in [Troubleshoot common Azure Spring Apps issues](./troubleshoot.md).
+To purchase the Tanzu component license successfully, the billing account of your subscription must be included in one of the locations listed in the [Supported geographic locations of billing account](#supported-geographic-locations-of-billing-account) section. Because of tax management restrictions from VMware in some countries, not all countries are supported.
+
+The extra license fees apply only to the Enterprise tier. In the Azure Spring Apps Standard tier, there are no extra license fees because the managed Spring components use the OSS config server and Eureka server. No other third-party license fees are required.
+
+On the [Azure Spring Apps Enterprise](https://aka.ms/ascmpoffer) offer page in Azure Marketplace, you can review the Tanzu component license pricing as shown in the following image.
++
+You can use the Azure portal or the Azure CLI to provision an Azure Spring Apps Enterprise tier service instance. You can also select **Subscribe** on the Azure Marketplace offer page to create the service instance. Azure Marketplace redirects you to the Azure Spring Apps creation page.
+
+## Requirements
+
+You must understand and fulfill the following requirements to successfully create an instance of Azure Spring Apps Enterprise tier when purchasing the Azure Marketplace offer.
+
+- Your Azure subscription must be registered to the `Microsoft.SaaS` resource provider. For more information, see the [Register resource provider](../azure-resource-manager/management/resource-providers-and-types.md#register-resource-provider) section of [Azure resource providers and types](../azure-resource-manager/management/resource-providers-and-types.md).
+
+- Your Azure subscription must have an associated payment method. Azure credits or free MSDN subscriptions aren't supported. For more information, see the [Purchasing requirements](/marketplace/azure-marketplace-overview#purchasing-requirements) section of [What is Azure Marketplace?](/marketplace/azure-marketplace-overview)
+
+- Your Azure subscription must belong to a billing account in a supported geographic location defined in the [Azure Spring Apps Enterprise](https://aka.ms/ascmpoffer) offer in Azure Marketplace. For more information, see the [Supported geographic locations of billing account](#supported-geographic-locations-of-billing-account) section.
+
+- Your region must be available. Choose an Azure region currently available. For more information, see [In which regions is Azure Spring Apps Enterprise tier available?](./faq.md#in-which-regions-is-azure-spring-apps-enterprise-tier-available) in the [Azure Spring Apps FAQ](faq.md).
+
+- Your organization must allow Azure Marketplace purchases. For more information, see the [Enabling Azure Marketplace purchases](../cost-management-billing/manage/ea-azure-marketplace.md#enabling-azure-marketplace-purchases) section of [Azure Marketplace](../cost-management-billing/manage/ea-azure-marketplace.md).
+
+- Your organization must allow acquisition of any Azure Marketplace software application as described in the [Purchase policy management](/marketplace/azure-purchasing-invoicing#purchase-policy-management) section of [Azure Marketplace purchasing](/marketplace/azure-purchasing-invoicing).
-To see the Enterprise tier creation page, select **Subscribe**
+- You must accept the marketplace legal terms and privacy statements while provisioning the tier on the Azure portal, or you can use the following commands to do so in advance.
+ ```azurecli
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan asa-ent-hr-mtr
+ ```
-## Supported geographic locations
+## Supported geographic locations of billing account
-You can purchase the Azure Spring Apps Enterprise tier offering in the following geographic locations based on your billing address. For more information, see the [Azure Spring Apps Enterprise](https://aka.ms/ascmpoffer) page.
+To successfully purchase the [Azure Spring Apps Enterprise](https://aka.ms/ascmpoffer) offer on Azure Marketplace, your Azure subscription must belong to a billing account in a supported geographic location defined in the offer.
-The following table lists each supported geographic location and its [ISO 3166 two-digit alpha code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
+The following table lists each supported geographic location and its [ISO 3166 two-digit alpha code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
| Country/Region Name |ISO-2| |-|--|
The following table lists each supported geographic location and its [ISO 3166 t
## Next steps -- [Azure Spring Apps](index.yml)
+- [Launch your first app](./quickstart.md)
spring-apps How To Use Accelerator https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-accelerator.md
Application Accelerator for VMware Tanzu helps you bootstrap developing your app
## Prerequisites - An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.-- To provision an Azure Marketplace offer purchase, see the [Prerequisites](how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering from Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the requirements listed in the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [Azure CLI](/cli/azure/install-azure-cli) with the Azure Spring Apps extension. Use the following command to remove previous versions and install the latest extension. If you previously installed the `spring-cloud` extension, uninstall it to avoid configuration and version mismatches. ```azurecli
spring-apps How To Use Application Live View https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-application-live-view.md
Application Live View only supports Spring Boot applications.
## Prerequisites - An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.-- To provision an Azure Marketplace offer purchase, see the [Prerequisites](how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering from Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [Azure CLI](/cli/azure/install-azure-cli) with the Azure Spring Apps extension. Use the following command to remove previous versions and install the latest extension. If you previously installed the `spring-cloud` extension, uninstall it to avoid configuration and version mismatches. ```azurecli
spring-apps How To Use Dev Tool Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-dev-tool-portal.md
This article describes how to configure VMware Tanzu Dev Tools. Dev Tools includ
## Prerequisites - An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.-- To provision an Azure Marketplace offer purchase, see the [Prerequisites](how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering from Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [Azure CLI](/cli/azure/install-azure-cli) with the Azure Spring Apps extension. Use the following command to remove previous versions and install the latest extension. If you previously installed the `spring-cloud` extension, uninstall it to avoid configuration and version mismatches. ```azurecli
spring-apps Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/overview.md
The following quickstarts and articles will help you get started using the Stand
The following quickstarts will help you get started using the Enterprise tier:
-* [View Enterprise Tier offering](how-to-enterprise-marketplace-offer.md)
+* [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md)
* [Introduction to Fitness Store sample](quickstart-sample-app-acme-fitness-store-introduction.md) * [Build and deploy apps](quickstart-deploy-apps-enterprise.md) * [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
spring-apps Quickstart Automate Deployments Github Actions Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-automate-deployments-github-actions-enterprise.md
This quickstart shows you how to automate deployments to Azure Spring Apps Enter
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart Configure Single Sign On Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-configure-single-sign-on-enterprise.md
This quickstart shows you how to configure single sign-on for applications runni
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart Deploy Apps Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-apps-enterprise.md
This quickstart shows you how to build and deploy applications to Azure Spring A
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- To provision an Azure Marketplace offer purchase, see the [Prerequisites](how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering from Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart Deploy Infrastructure Vnet Azure Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet-azure-cli.md
The Enterprise tier deployment plan includes the following Tanzu components:
* Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements). * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md). * [Azure CLI](/cli/azure/install-azure-cli)
-* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Review the Azure CLI deployment script
spring-apps Quickstart Deploy Infrastructure Vnet Bicep https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet-bicep.md
The Enterprise tier deployment plan includes the following Tanzu components:
* Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements). * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md). * [Azure CLI](/cli/azure/install-azure-cli)
-* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Deploy using Bicep
spring-apps Quickstart Deploy Infrastructure Vnet Terraform https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet-terraform.md
For more customization including custom domain support, see the [Azure Spring Ap
* If you're using Azure Firewall or a Network Virtual Appliance (NVA), you'll also need to satisfy the following prerequisites: * Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements). * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
-* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Review the Terraform plan
spring-apps Quickstart Deploy Infrastructure Vnet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet.md
The Enterprise tier deployment plan includes the following Tanzu components:
* Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements). * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
-* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Review the template
spring-apps Quickstart Integrate Azure Database And Redis Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-integrate-azure-database-and-redis-enterprise.md
This article uses these services for demonstration purposes. You can connect you
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart Key Vault Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-key-vault-enterprise.md
Every application has properties that connect it to its environment and supporti
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart Monitor End To End Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-monitor-end-to-end-enterprise.md
This quickstart shows you how monitor apps running Azure Spring Apps Enterprise
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart Set Request Rate Limits Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-set-request-rate-limits-enterprise.md
Rate limiting enables you to avoid problems that arise with spikes in traffic. W
## Prerequisites - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).-- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- Understand and fulfill the [Requirements](how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). - [Git](https://git-scm.com/). - [jq](https://stedolan.github.io/jq/download/)
spring-apps Quickstart https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart.md
At the end of this quickstart, you have a working Spring app running on Azure Sp
- An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/) before you begin. - [Apache Maven](https://maven.apache.org/download.cgi) - [Azure CLI](/cli/azure/install-azure-cli). Install the Azure Spring Apps extension with the following command: `az extension add --name spring`-- If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+- If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [Enterprise Tier in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Provision an instance of Azure Spring Apps
Deploying the application can take a few minutes.
- An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/) before you begin. - [IntelliJ IDEA](https://www.jetbrains.com/idea/). - [Azure Toolkit for IntelliJ](/azure/developer/java/toolkit-for-intellij/install-toolkit).-- If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+- If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Generate a Spring project
Use the following steps to build and deploy your app.
## Prerequisites -- If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Prerequisites](./how-to-enterprise-marketplace-offer.md#prerequisites) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
+- If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, see the [Requirements](./how-to-enterprise-marketplace-offer.md#requirements) section of [View Azure Spring Apps Enterprise tier offering in Azure Marketplace](./how-to-enterprise-marketplace-offer.md).
## Deploy a Spring Boot web app to Azure Spring Apps with Visual Studio Code
update-center Support Matrix https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/update-center/support-matrix.md
Update management center (preview) is supported in the following regions current
**Geography** | **Supported Regions** |
-Asia | South East Asia
+Asia | East Asia </br> South East Asia
Australia | Australia East
+Brazil | Brazil South
Canada | Canada Central Europe | North Europe </br> West Europe France | France Central Japan | Japan East Korea | Korea Central United Kingdom | UK South </br> UK West
-United States | East US </br> East US 2</br> North Central US </br> South Central US </br> West Central US </br> West US </br> West US 2 </br> West US 3
+United States | Central US </br> East US </br> East US 2</br> North Central US </br> South Central US </br> West Central US </br> West US </br> West US 2 </br> West US 3
virtual-machines Tutorial Manage Vm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/linux/tutorial-manage-vm.md
Previously updated : 03/23/2018 Last updated : 03/23/2023
Azure virtual machines provide a fully configurable and flexible computing envir
> * Resize a VM > * View and understand VM state
-This tutorial uses the CLI within the [Azure Cloud Shell](../../cloud-shell/overview.md), which is constantly updated to the latest version. To open the Cloud Shell, select **Try it** from the top of any code block.
+This tutorial uses the CLI within the [Azure Cloud Shell](../../cloud-shell/overview.md), which is constantly updated to the latest version.
If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI]( /cli/azure/install-azure-cli).
If you choose to install and use the CLI locally, this tutorial requires that yo
Create a resource group with the [az group create](/cli/azure/group) command.
-An Azure resource group is a logical container into which Azure resources are deployed and managed. A resource group must be created before a virtual machine. In this example, a resource group named *myResourceGroupVM* is created in the *eastus* region.
+An Azure resource group is a logical container into which Azure resources are deployed and managed. A resource group must be created before a virtual machine. In this example, a resource group named *myResourceGroupVM* is created in the *eastus2* region.
+ ```azurecli-interactive
-az group create --name myResourceGroupVM --location eastus
+az group create --name myResourceGroupVM --location eastus2
``` The resource group is specified when creating or modifying a VM, which can be seen throughout this tutorial.
The resource group is specified when creating or modifying a VM, which can be se
Create a virtual machine with the [az vm create](/cli/azure/vm) command.
-When you create a virtual machine, several options are available such as operating system image, disk sizing, and administrative credentials. The following example creates a VM named *myVM* that runs Ubuntu Server. A user account named *azureuser* is created on the VM, and SSH keys are generated if they do not exist in the default key location (*~/.ssh*):
+When you create a virtual machine, several options are available such as operating system image, disk sizing, and administrative credentials. The following example creates a VM named *myVM* that runs SUSE Linux Enterprise Server (SLES). A user account named *azureuser* is created on the VM, and SSH keys are generated if they do not exist in the default key location (*~/.ssh*):
```azurecli-interactive az vm create \ --resource-group myResourceGroupVM \ --name myVM \
- --image UbuntuLTS \
+ --image SLES \
+ --public-ip-sku Standard \
--admin-username azureuser \ --generate-ssh-keys ```
-It may take a few minutes to create the VM. Once the VM has been created, the Azure CLI outputs information about the VM. Take note of the `publicIpAddress`, this address can be used to access the virtual machine..
+It may take a few minutes to create the VM. Once the VM has been created, the Azure CLI outputs information about the VM. Take note of the `publicIpAddress`, this address can be used to access the virtual machine.
```output { "fqdns": "", "id": "/subscriptions/d5b9d4b7-6fc1-0000-0000-000000000000/resourceGroups/myResourceGroupVM/providers/Microsoft.Compute/virtualMachines/myVM",
- "location": "eastus",
+ "location": "eastus2",
"macAddress": "00-0D-3A-23-9A-49", "powerState": "VM running", "privateIpAddress": "10.0.0.4",
x64 WindowsServer MicrosoftWindowsServer 2012-Datac
x64 WindowsServer MicrosoftWindowsServer 2008-R2-SP1 MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:latest Win2008R2SP1 latest ```
-A full list can be seen by adding the `--all` parameter. The image list can also be filtered by `--publisher` or `ΓÇô-offer`. In this example, the list is filtered for all images with an offer that matches *CentOS*.
+A full list can be seen by adding the `--all` parameter. The image list can also be filtered by `--publisher` or `ΓÇô-offer`. In this example, the list is filtered for all images, published by OpenLogic, with an offer that matches *CentOS*.
```azurecli-interactive
-az vm image list --offer CentOS --all --output table
+az vm image list --offer CentOS --publisher OpenLogic --all --output table
```
-Partial output:
+Example partial output:
```output
-Offer Publisher Sku Urn Version
-- - - -- --
-CentOS OpenLogic 6.5 OpenLogic:CentOS:6.5:6.5.201501 6.5.201501
-CentOS OpenLogic 6.5 OpenLogic:CentOS:6.5:6.5.201503 6.5.201503
-CentOS OpenLogic 6.5 OpenLogic:CentOS:6.5:6.5.201506 6.5.201506
-CentOS OpenLogic 6.5 OpenLogic:CentOS:6.5:6.5.20150904 6.5.20150904
-CentOS OpenLogic 6.5 OpenLogic:CentOS:6.5:6.5.20160309 6.5.20160309
-CentOS OpenLogic 6.5 OpenLogic:CentOS:6.5:6.5.20170207 6.5.20170207
+Architecture Offer Publisher Sku Urn Version
+-- - -- --
+x64 CentOS OpenLogic 8_2 OpenLogic:CentOS:8_2:8.2.2020111800 8.2.2020111800
+x64 CentOS OpenLogic 8_2-gen2 OpenLogic:CentOS:8_2-gen2:8.2.2020062401 8.2.2020062401
+x64 CentOS OpenLogic 8_2-gen2 OpenLogic:CentOS:8_2-gen2:8.2.2020100601 8.2.2020100601
+x64 CentOS OpenLogic 8_2-gen2 OpenLogic:CentOS:8_2-gen2:8.2.2020111801 8.2.2020111801
+x64 CentOS OpenLogic 8_3 OpenLogic:CentOS:8_3:8.3.2020120900 8.3.2020120900
+x64 CentOS OpenLogic 8_3 OpenLogic:CentOS:8_3:8.3.2021020400 8.3.2021020400
+x64 CentOS OpenLogic 8_3-gen2 OpenLogic:CentOS:8_3-gen2:8.3.2020120901 8.3.2020120901
+x64 CentOS OpenLogic 8_3-gen2 OpenLogic:CentOS:8_3-gen2:8.3.2021020401 8.3.2021020401
+x64 CentOS OpenLogic 8_4 OpenLogic:CentOS:8_4:8.4.2021071900 8.4.2021071900
+x64 CentOS OpenLogic 8_4-gen2 OpenLogic:CentOS:8_4-gen2:8.4.2021071901 8.4.2021071901
+x64 CentOS OpenLogic 8_5 OpenLogic:CentOS:8_5:8.5.2022012100 8.5.2022012100
+x64 CentOS OpenLogic 8_5 OpenLogic:CentOS:8_5:8.5.2022101800 8.5.2022101800
+x64 CentOS OpenLogic 8_5-gen2 OpenLogic:CentOS:8_5-gen2:8.5.2022012101 8.5.2022012101
``` + > [!NOTE] > Canonical has changed the **Offer** names they use for the most recent versions. Before Ubuntu 20.04, the **Offer** name is UbuntuServer. For Ubuntu 20.04 the **Offer** name is `0001-com-ubuntu-server-focal` and for Ubuntu 22.04 it's `0001-com-ubuntu-server-jammy`.
-To deploy a VM using a specific image, take note of the value in the *Urn* column, which consists of the publisher, offer, SKU, and optionally a version number to [identify](cli-ps-findimage.md#terminology) the image. When specifying the image, the image version number can be replaced with `latest`, which selects the latest version of the distribution. In this example, the `--image` parameter is used to specify the latest version of a CentOS 6.5 image.
+To deploy a VM using a specific image, take note of the value in the *Urn* column, which consists of the publisher, offer, SKU, and optionally a version number to [identify](cli-ps-findimage.md#terminology) the image. When specifying the image, the image version number can be replaced with `latest`, which selects the latest version of the distribution. In this example, the `--image` parameter is used to specify the latest version of a CentOS 8.5.
```azurecli-interactive
-az vm create --resource-group myResourceGroupVM --name myVM2 --image OpenLogic:CentOS:6.5:latest --generate-ssh-keys
+az vm create --resource-group myResourceGroupVM --name myVM2 --image OpenLogic:CentOS:8_5:latest --generate-ssh-keys
``` ## Understand VM sizes
A virtual machine size determines the amount of compute resources such as CPU, G
The following table categorizes sizes into use cases.
-| Type | Common sizes | Description |
-|--|-||
-| [General purpose](../sizes-general.md) |B, Dsv3, Dv3, DSv2, Dv2, Av2, DC| Balanced CPU-to-memory. Ideal for dev / test and small to medium applications and data solutions. |
-| [Compute optimized](../sizes-compute.md) | Fsv2 | High CPU-to-memory. Good for medium traffic applications, network appliances, and batch processes. |
-| [Memory optimized](../sizes-memory.md) | Esv3, Ev3, M, DSv2, Dv2 | High memory-to-core. Great for relational databases, medium to large caches, and in-memory analytics. |
-| [Storage optimized](../sizes-storage.md) | Lsv2, Ls | High disk throughput and IO. Ideal for Big Data, SQL, and NoSQL databases. |
-| [GPU](../sizes-gpu.md) | NV, NVv2, NC, NCv2, NCv3, ND | Specialized VMs targeted for heavy graphic rendering and video editing. |
-| [High performance](../sizes-hpc.md) | H | Our most powerful CPU VMs with optional high-throughput network interfaces (RDMA). |
+| Type | Description |
+|--||
+| [General purpose](../sizes-general.md) | Balanced CPU-to-memory. Ideal for dev / test and small to medium applications and data solutions. |
+| [Compute optimized](../sizes-compute.md) | High CPU-to-memory. Good for medium traffic applications, network appliances, and batch processes. |
+| [Memory optimized](../sizes-memory.md) | High memory-to-core. Great for relational databases, medium to large caches, and in-memory analytics. |
+| [Storage optimized](../sizes-storage.md) | High disk throughput and IO. Ideal for Big Data, SQL, and NoSQL databases. |
+| [GPU](../sizes-gpu.md) | Specialized VMs targeted for heavy graphic rendering and video editing. |
+| [High performance](../sizes-hpc.md) | Our most powerful CPU VMs with optional high-throughput network interfaces (RDMA). |
+ ### Find available VM sizes
The following table categorizes sizes into use cases.
To see a list of VM sizes available in a particular region, use the [az vm list-sizes](/cli/azure/vm) command. ```azurecli-interactive
-az vm list-sizes --location eastus --output table
+az vm list-sizes --location eastus2 --output table
```
-Partial output:
+Example partial output:
```output MaxDataDiskCount MemoryInMb Name NumberOfCores OsDiskSizeInMb ResourceDiskSizeInMb - - -
- 2 3584 Standard_DS1 1 1047552 7168
- 4 7168 Standard_DS2 2 1047552 14336
- 8 14336 Standard_DS3 4 1047552 28672
- 16 28672 Standard_DS4 8 1047552 57344
- 4 14336 Standard_DS11 2 1047552 28672
- 8 28672 Standard_DS12 4 1047552 57344
- 16 57344 Standard_DS13 8 1047552 114688
- 32 114688 Standard_DS14 16 1047552 229376
- 1 768 Standard_A0 1 1047552 20480
- 2 1792 Standard_A1 1 1047552 71680
- 4 3584 Standard_A2 2 1047552 138240
- 8 7168 Standard_A3 4 1047552 291840
- 4 14336 Standard_A5 2 1047552 138240
- 16 14336 Standard_A4 8 1047552 619520
- 8 28672 Standard_A6 4 1047552 291840
- 16 57344 Standard_A7 8 1047552 619520
+4 8192 Standard_D2ds_v4 2 1047552 76800
+8 16384 Standard_D4ds_v4 4 1047552 153600
+16 32768 Standard_D8ds_v4 8 1047552 307200
+32 65536 Standard_D16ds_v4 16 1047552 614400
+32 131072 Standard_D32ds_v4 32 1047552 1228800
+32 196608 Standard_D48ds_v4 48 1047552 1843200
+32 262144 Standard_D64ds_v4 64 1047552 2457600
+4 8192 Standard_D2ds_v5 2 1047552 76800
+8 16384 Standard_D4ds_v5 4 1047552 153600
+16 32768 Standard_D8ds_v5 8 1047552 307200
+32 65536 Standard_D16ds_v5 16 1047552 614400
+32 131072 Standard_D32ds_v5 32 1047552 1228800
+32 196608 Standard_D48ds_v5 48 1047552 1843200
+32 262144 Standard_D64ds_v5 64 1047552 2457600
+32 393216 Standard_D96ds_v5 96 1047552 3686400
``` ### Create VM with specific size
In the previous VM creation example, a size was not provided, which results in a
az vm create \ --resource-group myResourceGroupVM \ --name myVM3 \
- --image UbuntuLTS \
- --size Standard_F4s \
+ --image SLES \
+ --size Standard_D2ds_v4 \
--generate-ssh-keys ```
az vm list-vm-resize-options --resource-group myResourceGroupVM --name myVM --qu
If the desired size is available, the VM can be resized from a powered-on state, however it is rebooted during the operation. Use the [az vm resize]( /cli/azure/vm) command to perform the resize. ```azurecli-interactive
-az vm resize --resource-group myResourceGroupVM --name myVM --size Standard_DS4_v2
+az vm resize --resource-group myResourceGroupVM --name myVM --size Standard_D4s_v3
``` If the desired size is not on the current cluster, the VM needs to be deallocated before the resize operation can occur. Use the [az vm deallocate]( /cli/azure/vm) command to stop and deallocate the VM. Note, when the VM is powered back on, any data on the temp disk may be removed. The public IP address also changes unless a static IP address is being used.
az vm get-instance-view \
Output: ```output
-ode DisplayStatus Level
- -
-PowerState/running VM running Info
+Code Level DisplayStatus
+ -
+PowerState/running Info VM running
``` To retrieve the power state of all the VMs in your subscription, use the [Virtual Machines - List All API](/rest/api/compute/virtualmachines/listall) with parameter **statusOnly** set to *true*.
az vm start --resource-group myResourceGroupVM --name myVM
### Deleting VM resources
-You can delete a VM, but by default this only deletes the VM resource, not the disks and networking resources the VM uses. You can change the default behavior to delete other resources when you delete the VM. For more information, see [Delete a VM and attached resources](../delete.md).
+Depending on how you delete a VM, it may only delete the VM resource, not the networking and disk resources. You can change the default behavior to delete other resources when you delete the VM. For more information, see [Delete a VM and attached resources](../delete.md).
-Deleting a resource group also deletes all resources contained within, such as the VM, virtual network, and disk. The `--no-wait` parameter returns control to the prompt without waiting for the operation to complete. The `--yes` parameter confirms that you wish to delete the resources without an additional prompt to do so.
+Deleting a resource group also deletes all resources in the resource group, like the VM, virtual network, and disk. The `--no-wait` parameter returns control to the prompt without waiting for the operation to complete. The `--yes` parameter confirms that you wish to delete the resources without an additional prompt to do so.
```azurecli-interactive az group delete --name myResourceGroupVM --no-wait --yes
Advance to the next tutorial to learn about VM disks.
> [!div class="nextstepaction"] > [Create and Manage VM disks](./tutorial-manage-disks.md)+
virtual-machines Maintenance Configurations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/maintenance-configurations.md
Using this scope with maintenance configurations lets you decide when to apply u
### Guest
-This scope is integrated with [update management center](../update-center/overview.md) which allows you to save recurring deployment schedules to install updates for your Windows Server and Linux machines in Azure, in on-premises environments, and in other cloud environments connected using Azure Arc-enabled servers. Some features and limitations unique to this scope include:
+This scope is integrated with [update management center](../update-center/overview.md), which allows you to save recurring deployment schedules to install updates for your Windows Server and Linux machines in Azure, in on-premises environments, and in other cloud environments connected using Azure Arc-enabled servers. Some features and limitations unique to this scope include:
- [Patch orchestration](automatic-vm-guest-patching.md#patch-orchestration-modes) for virtual machines need to be set to AutomaticByPlatform - A minimum of 1 hour and 10 minutes is required for the maintenance window.
This scope is integrated with [update management center](../update-center/overvi
To learn more about this topic, checkout [update management center and scheduled patching](../update-center/scheduled-patching.md)
+## Shut Down Machines
+
+We are unable to apply maintenance updates to any shut down machines. You need to ensure that your machine is turned on at least 15 minutes before a scheduled update or your update may not be applied. If your machine is in a shutdown state at the time of your scheduled update, it may appear that the maintenance configuration has been disassociated on the Azure portal, and this is only a display issue that the team is currently working to fix it. The maintenance configuration has not been completely disassociated and you can check it via CLI using [check configuration](maintenance-configurations-cli.md#check-configuration).
+ ## Management options You can create and manage maintenance configurations using any of the following options:
virtual-network Virtual Network Powershell Sample Filter Network Traffic https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/scripts/virtual-network-powershell-sample-filter-network-traffic.md
Title: Filter VM network traffic - Azure PowerShell script sample description: Filter inbound and outbound VM network traffic - Azure PowerShell script sample.- - - Previously updated : 03/20/2018 Last updated : 03/23/2023 # Filter inbound and outbound VM network traffic script sample
-This script sample creates a virtual network with front-end and back-end subnets. Inbound network traffic to the front-end subnet is limited to HTTP, and HTTPS, while outbound traffic to the internet from the back-end subnet is not permitted. After running the script, you have one virtual machine with two NICs. Each NIC is connected to a different subnet.
+This script sample creates a virtual network with front-end and back-end subnets. Inbound network traffic to the front-end subnet is limited to HTTP, and HTTPS, while outbound traffic to the internet from the back-end subnet isn't permitted. After running the script, you have one virtual machine with two NICs. Each NIC is connected to a different subnet.
-You can execute the script from the Azure [Cloud Shell](https://shell.azure.com/powershell), or from a local PowerShell installation. If you use PowerShell locally, this script requires the Azure PowerShell module version 1.0.0 or later. To find the installed version, run `Get-InstalledModule -Name Az`. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-az-ps). If you are running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
+You can execute the script from the Azure [Cloud Shell](https://shell.azure.com/powershell), or from a local PowerShell installation. If you use PowerShell locally, this script requires the Azure PowerShell module version 1.0.0 or later. To find the installed version, run `Get-InstalledModule -Name Az`. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-az-ps). If you're running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
[!INCLUDE [quickstarts-free-trial-note](../../../includes/quickstarts-free-trial-note.md)]
This script uses the following commands to create a resource group, virtual netw
For more information on the Azure PowerShell, see [Azure PowerShell documentation](/powershell/azure/).
-Additional virtual network PowerShell script samples can be found in [Virtual network PowerShell samples](../powershell-samples.md).
+More virtual network PowerShell script samples can be found in [Virtual network PowerShell samples](../powershell-samples.md).
virtual-network Virtual Network Powershell Sample Peer Two Virtual Networks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/scripts/virtual-network-powershell-sample-peer-two-virtual-networks.md
Title: Peer two virtual networks - Azure PowerShell script sample description: Create and connect two virtual networks in the same region. Use the Azure script for two peer virtual networks to connect the networks through the Azure network.- - - Previously updated : 03/20/2018 Last updated : 03/23/2023 # Peer two virtual networks script sample
-This script sample creates and connects two virtual networks in the same region through the Azure network. After running the script, you will create a peering between two virtual networks.
+This script sample creates and connects two virtual networks in the same region through the Azure network. After running the script, you'll create a peering between two virtual networks.
-You can execute the script from the Azure [Cloud Shell](https://shell.azure.com/powershell), or from a local PowerShell installation. If you use PowerShell locally, this script requires the Az PowerShell module version 5.4.1 or later. To find the installed version, run `Get-Module -ListAvailable Az`. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-Az-ps). If you are running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
+You can execute the script from the Azure [Cloud Shell](https://shell.azure.com/powershell), or from a local PowerShell installation. If you use PowerShell locally, this script requires the Az PowerShell module version 5.4.1 or later. To find the installed version, run `Get-Module -ListAvailable Az`. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-Az-ps). If you're running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
[!INCLUDE [quickstarts-free-trial-note](../../../includes/quickstarts-free-trial-note.md)]
This script uses the following commands to create a resource group, virtual mach
For more information on the Azure PowerShell, see [Azure PowerShell documentation](/powershell/azure/).
-Additional virtual network PowerShell script samples can be found in [Virtual network PowerShell samples](../powershell-samples.md).
+More virtual network PowerShell script samples can be found in [Virtual network PowerShell samples](../powershell-samples.md).
virtual-network Virtual Network Powershell Sample Route Traffic Through Nva https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/scripts/virtual-network-powershell-sample-route-traffic-through-nva.md
Title: Route traffic via NVA - Azure PowerShell script sample description: Azure PowerShell script sample - Route traffic through a firewall NVA.- - - Previously updated : 03/20/2018 Last updated : 03/23/2023
This script sample creates a virtual network with front-end and back-end subnets. It also creates a VM with IP forwarding enabled to route traffic between the two subnets. After running the script you can deploy network software, such as a firewall application, to the VM.
-You can execute the script from the Azure [Cloud Shell](https://shell.azure.com/powershell), or from a local PowerShell installation. If you use PowerShell locally, this script requires the Az PowerShell module version 5.4.1 or later. To find the installed version, run `Get-Module -ListAvailable Az`. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-Az-ps). If you are running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
+You can execute the script from the Azure [Cloud Shell](https://shell.azure.com/powershell), or from a local PowerShell installation. If you use PowerShell locally, this script requires the Az PowerShell module version 5.4.1 or later. To find the installed version, run `Get-Module -ListAvailable Az`. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-Az-ps). If you're running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
[!INCLUDE [quickstarts-free-trial-note](../../../includes/quickstarts-free-trial-note.md)]
This script uses the following commands to create a resource group, virtual netw
For more information on the Azure PowerShell, see [Azure PowerShell documentation](/powershell/azure/).
-Additional virtual network PowerShell script samples can be found in [Virtual network PowerShell samples](../powershell-samples.md).
+More virtual network PowerShell script samples can be found in [Virtual network PowerShell samples](../powershell-samples.md).