Skip to content

Commit 2826dd0

Browse files
authored
Merge branch 'MicrosoftDocs:main' into Spelling-Wave-26
2 parents 3992c84 + 99042d3 commit 2826dd0

File tree

461 files changed

+3378
-4390
lines changed

Some content is hidden

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

461 files changed

+3378
-4390
lines changed

.openpublishing.redirection.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4020,6 +4020,11 @@
40204020
"redirect_url": "/azure/managed-grafana/overview",
40214021
"redirect_document_id": false
40224022
},
4023+
{
4024+
"source_path_from_root": "/articles/managed-grafana/concept-whats-new.md",
4025+
"redirect_url": "/azure/managed-grafana/overview",
4026+
"redirect_document_id": false
4027+
},
40234028
{
40244029
"source_path_from_root": "/articles/managed-grafana/how-to-transition-domain.md",
40254030
"redirect_url": "/azure/managed-grafana/overview",

articles/api-management/inject-vnet-v2.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,11 @@ The subnet needs to be delegated to the **Microsoft.Web/hostingEnvironments** se
6868
6969
For more information about configuring subnet delegation, see [Add or remove a subnet delegation](../virtual-network/manage-subnet-delegation.md).
7070

71+
[!INCLUDE [api-management-virtual-network-address-prefix](../../includes/api-management-virtual-network-address-prefix.md)]
72+
7173
### Permissions
7274

73-
You must have at least the following role-based access control permissions on the subnet or at a higher level to configure virtual network integration:
75+
You must have at least the following role-based access control permissions on the subnet or at a higher level to configure virtual network injection:
7476

7577
| Action | Description |
7678
|-|-|
@@ -86,13 +88,11 @@ When you [create](get-started-create-service-instance.md) a Premium v2 instance
8688

8789
1. In the **Create API Management service** wizard, select the **Networking** tab.
8890
1. In **Connectivity type**, select **Virtual network**.
89-
1. In **Type**, select **Internal**.
90-
1. In **Configure virtual networks**, select the virtual network and the delegated subnet that you want to integrate.
91-
92-
Optionally, provide a public IP address resource if you want to own and control an IP address that's used only for outbound connection to the internet.
91+
1. In **Type**, select **Injection**.
92+
1. In **Configure virtual networks**, select the virtual network and the delegated subnet that you want to inject.
9393
1. Complete the wizard to create the API Management instance.
9494

95-
## DNS settings for integration with private IP address
95+
## DNS settings for access to private IP address
9696

9797
When a Premium v2 API Management instance is injected in a virtual network, you have to manage your own DNS to enable inbound access to API Management.
9898

articles/app-service/environment/app-service-app-service-environment-network-configuration-expressroute.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ The combined effect of this configuration is that the subnet-level UDR takes pre
8181
> [!IMPORTANT]
8282
> The routes defined in a UDR must be specific enough to take precedence over any routes that are advertised by the ExpressRoute configuration. The example described in the next section uses the broad 0.0.0.0/0 address range. This range can accidentally be overridden by route advertisements that use more specific address ranges.
8383
>
84-
> App Service Environment isn't supported with ExpressRoute configurations that cross-advertise routes from the public peering path to the private peering path. ExpressRoute configurations that have public peering configured receive route advertisements from Microsoft for a large set of Microsoft Azure IP address ranges. If these address ranges are cross-advertised on the private peering path, all outbound network packets from the App Service Environment subnet are force tunneled to the customer's on-premises network infrastructure. This network flow isn't currently supported with App Service Environment. One solution is to stop cross-advertising routes from the public peering path to the private peering path.
84+
> App Service Environment isn't supported with ExpressRoute configurations that cross-advertise routes from the Microsoft peering path to the private peering path. ExpressRoute configurations that have Microsoft peering configured receive route advertisements from Microsoft for a large set of Microsoft Azure IP address ranges. If these address ranges are cross-advertised on the private peering path, all outbound network packets from the App Service Environment subnet are force tunneled to the customer's on-premises network infrastructure. This network flow isn't currently supported with App Service Environment. One solution is to stop cross-advertising routes from the Microsoft peering path to the private peering path.
8585
>
8686
>
8787

articles/app-service/environment/forced-tunnel-support.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ If the network is already routing traffic on premises, then you need to create t
5656
> [!IMPORTANT]
5757
> The routes defined in a UDR must be specific enough to take precedence over any routes advertised by the ExpressRoute configuration. The preceding example uses the broad 0.0.0.0/0 address range. It can potentially be accidentally overridden by route advertisements that use more specific address ranges.
5858
>
59-
> App Service Environments aren't supported with ExpressRoute configurations that cross-advertise routes from the public-peering path to the private-peering path. ExpressRoute configurations with public peering configured receive route advertisements from Microsoft. The advertisements contain a large set of Microsoft Azure address ranges. If the address ranges are cross-advertised on the private-peering path, all outbound network packets from the App Service Environment's subnet are routed to a customer's on-premises network infrastructure. This network flow is not supported by default with App Service Environments. One solution to this problem is to stop cross-advertising routes from the public-peering path to the private-peering path. Another solution is to enable your App Service Environment to work in a forced tunnel configuration.
59+
> App Service Environments aren't supported with ExpressRoute configurations that cross-advertise routes from the Microsoft peering path to the private-peering path. ExpressRoute configurations with Microsoft peering configured receive route advertisements from Microsoft. The advertisements contain a large set of Microsoft Azure address ranges. If the address ranges are cross-advertised on the private-peering path, all outbound network packets from the App Service Environment's subnet are routed to a customer's on-premises network infrastructure. This network flow is not supported by default with App Service Environments. One solution to this problem is to stop cross-advertising routes from the Microsoft peering path to the private-peering path. Another solution is to enable your App Service Environment to work in a forced tunnel configuration.
6060
6161
![Direct internet access][1]
6262

articles/app-service/tutorial-java-tomcat-mysql-app.md

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ms.collection: ce-skilling-ai-copilot
1313

1414
# Tutorial: Build a Tomcat web app with Azure App Service on Linux and MySQL
1515

16-
This tutorial shows how to build, configure, and deploy a secure Tomcat application in Azure App Service that connects to a MySQL database (using [Azure Database for MySQL](/azure/mysql/)). Azure App Service is a highly scalable, self-patching, web-hosting service that can easily deploy apps on Windows or Linux. When you're finished, you'll have a Tomcat app running on [Azure App Service on Linux](overview.md).
16+
This tutorial shows how to build, configure, and deploy a secure Tomcat application in Azure App Service that connects to a MySQL database (using [Azure Database for MySQL](/azure/mysql/)). Azure App Service is a highly scalable, self-patching, web-hosting service that can easily deploy apps on Windows or Linux. When you're finished, you have a Tomcat app running on [Azure App Service on Linux](overview.md).
1717

1818
:::image type="content" source="./media/tutorial-java-tomcat-mysql-app/azure-portal-browse-app-2.png" alt-text="Screenshot of Tomcat application storing data in MySQL.":::
1919

@@ -142,7 +142,7 @@ Sign in to the [Azure portal](https://portal.azure.com/) and follow these steps
142142
1. *Name*: **msdocs-tomcat-mysql-XYZ**, where *XYZ* is any three random characters.
143143
1. *Runtime stack*: **Java 17**.
144144
1. *Java web server stack*: **Apache Tomcat 10.1**.
145-
1. **MySQL - Flexible Server** is selected for you by default as the database engine. If not, select it. Azure Database for MySQL is a fully managed MySQL database as a service on Azure, compatible with the latest community editions.
145+
1. *Engine*: **MySQL - Flexible Server** is selected for you by default as the database engine. If not, select it. Azure Database for MySQL - Flexible Server is a fully managed MySQL database as a service on Azure, compatible with the latest community editions.
146146
1. *Hosting plan*: **Basic**. When you're ready, you can [scale up](manage-scale-up.md) to a production pricing tier.
147147
1. Select **Review + create**.
148148
1. After validation completes, select **Create**.
@@ -171,12 +171,12 @@ Having issues? Check the [Troubleshooting section](#troubleshooting).
171171

172172
## 3. Secure connection secrets
173173

174-
The creation wizard generated the connectivity string for you already as an [app setting](configure-common.md#configure-app-settings). However, the security best practice is to keep secrets out of App Service completely. You'll move your secrets to a key vault and change your app setting to a [Key Vault reference](app-service-key-vault-references.md) with the help of Service Connectors.
174+
The creation wizard generated the database connectivity string for you already as an [app setting](configure-common.md#configure-app-settings). However, the security best practice is to keep secrets out of App Service completely. You move your secrets to a key vault and change your app setting to a [Key Vault reference](app-service-key-vault-references.md) with the help of Service Connectors.
175175

176176
:::row:::
177177
:::column span="2":::
178-
**Step 1:** In the App Service page:
179-
1. In the left menu, select **Settings > Environment variables**.
178+
**Step 1: Retrieve the existing connection string**
179+
1. In the left menu of the App Service page, select **Settings > Environment variables**.
180180
1. Select **AZURE_MYSQL_CONNECTIONSTRING**. It contains a JDBC connection string. If you add an app setting that contains a valid Oracle, SQL Server, PostgreSQL, or MySQL connection string, App Service injects it as a Java Naming and Directory Interface (JNDI) data source in the Tomcat server's *context.xml* file.
181181
1. In **Add/Edit application setting**, in the **Value** field, find the *password=* part at the end of the string.
182182
1. Copy the password string after *Password=* for use later.
@@ -188,25 +188,25 @@ The creation wizard generated the connectivity string for you already as an [app
188188
:::row-end:::
189189
:::row:::
190190
:::column span="2":::
191-
**Step 2:** Create a key vault for secure management of secrets.
191+
**Step 2: Create a key vault for secure management of secrets**
192192
1. In the top search bar, type "*key vault*", then select **Marketplace** > **Key Vault**.
193193
1. In **Resource Group**, select **msdocs-tomcat-mysql-tutorial**.
194194
1. In **Key vault name**, type a name that consists of only letters and numbers.
195-
1. In **Region**, set it to the sample location as the resource group.
195+
1. In **Region**, set it to the same location as the resource group.
196196
:::column-end:::
197197
:::column:::
198198
:::image type="content" source="./media/tutorial-java-tomcat-mysql-app/azure-portal-secure-connection-secrets-2.png" alt-text="A screenshot showing how to create a key vault." lightbox="./media/tutorial-java-tomcat-mysql-app/azure-portal-secure-connection-secrets-2.png":::
199199
:::column-end:::
200200
:::row-end:::
201201
:::row:::
202202
:::column span="2":::
203-
**Step 3:**
203+
**Step 3: Secure the key vault with a Private Endpoint**
204204
1. Select the **Networking** tab.
205205
1. Unselect **Enable public access**.
206206
1. Select **Create a private endpoint**.
207207
1. In **Resource Group**, select **msdocs-tomcat-mysql-tutorial**.
208-
1. In **Key vault name**, type a name that consists of only letters and numbers.
209-
1. In **Region**, set it to the sample location as the resource group.
208+
1. In **Name**, type a name for the private endpoint that consists of only letters and numbers.
209+
1. In **Region**, set it to the same location as the resource group.
210210
1. In the dialog, in **Location**, select the same location as your App Service app.
211211
1. In **Resource Group**, select **msdocs-tomcat-mysql-tutorial**.
212212
1. In **Name**, type **msdocs-tomcat-mysql-XYZVaultEndpoint**.
@@ -221,7 +221,7 @@ The creation wizard generated the connectivity string for you already as an [app
221221
:::row-end:::
222222
:::row:::
223223
:::column span="2":::
224-
**Step 4:**
224+
**Step 4: Configure the Service Connector**
225225
1. In the top search bar, type *msdocs-tomcat-mysql*, then the App Service resource called **msdocs-tomcat-mysql-XYZ**.
226226
1. In the App Service page, in the left menu, select **Settings > Service Connector**. There's already a connector, which the app creation wizard created for you.
227227
1. Select checkbox next to the connector, then select **Edit**.
@@ -238,8 +238,8 @@ The creation wizard generated the connectivity string for you already as an [app
238238
:::row-end:::
239239
:::row:::
240240
:::column span="2":::
241-
**Step 5:** In the **Create connection** dialog for the Key Vault connection:
242-
1. In **Key Vault**, select the key vault you created earlier.
241+
**Step 5: Establish the Key Vault connection**
242+
1. In the **Create connection** dialog for the Key Vault connection, in **Key Vault**, select the key vault you created earlier.
243243
1. Select **Review + Create**. You should see that **System assigned managed identity** is set to **Selected**.
244244
1. When validation completes, select **Create**.
245245
:::column-end:::
@@ -249,8 +249,8 @@ The creation wizard generated the connectivity string for you already as an [app
249249
:::row-end:::
250250
:::row:::
251251
:::column span="2":::
252-
**Step 6:** You're back in the edit dialog for **defaultConnector**.
253-
1. In the **Authentication** tab, wait for the key vault connector to be created. When it's finished, the **Key Vault Connection** dropdown automatically selects it.
252+
**Step 6: Finalize the Service Connector configuration**
253+
1. You're back in the edit dialog for **defaultConnector**. In the **Authentication** tab, wait for the key vault connector to be created. When it's finished, the **Key Vault Connection** dropdown automatically selects it.
254254
1. Select **Next: Networking**.
255255
1. Select **Save**. Wait until the **Update succeeded** notification appears.
256256
:::column-end:::
@@ -260,15 +260,17 @@ The creation wizard generated the connectivity string for you already as an [app
260260
:::row-end:::
261261
:::row:::
262262
:::column span="2":::
263-
**Step 7:** To verify your changes:
264-
1. From the left menu, select **Environment variables > Connection strings** again.
263+
**Step 7: Verify the Key Vault integration**
264+
1. From the left menu, select **Settings > Environment variables** again.
265265
1. Next to **AZURE_MYSQL_CONNECTIONSTRING**, select **Show value**. The value should be `@Microsoft.KeyVault(...)`, which means that it's a [key vault reference](app-service-key-vault-references.md) because the secret is now managed in the key vault.
266266
:::column-end:::
267267
:::column:::
268268
:::image type="content" source="./media/tutorial-java-tomcat-mysql-app/azure-portal-secure-connection-secrets-7.png" alt-text="A screenshot showing how to see the value of the MySQL environment variable in Azure." lightbox="./media/tutorial-java-tomcat-mysql-app/azure-portal-secure-connection-secrets-7.png":::
269269
:::column-end:::
270270
:::row-end:::
271271

272+
To summarize, the process involved retrieving the MySQL connection string from the App Service's environment variables, creating an Azure Key Vault for secure secret management with private access, and updating the service connector to store the password in the key vault. A secure connection between the App Service app and key vault was established using a system-assigned managed identity, and the setup was verified by confirming the connection string uses a Key Vault reference.
273+
272274
Having issues? Check the [Troubleshooting section](#troubleshooting).
273275

274276
## 4. Confirm JNDI data source
@@ -287,7 +289,7 @@ If you add an app setting that contains a valid JDBC connection string for Oracl
287289
:::row-end:::
288290
:::row:::
289291
:::column span="2":::
290-
**Step 2:** In the SSH terminal, run `cat /usr/local/tomcat/conf/context.xml`. You should see that a JNDI resource called `jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS` was added. You'll use this data source later.
292+
**Step 2:** In the SSH terminal, run `cat /usr/local/tomcat/conf/context.xml`. You should see that a JNDI resource called `jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS` was added. You use this data source later.
291293
:::column-end:::
292294
:::column:::
293295
:::image type="content" source="./media/tutorial-java-tomcat-mysql-app/azure-portal-check-config-in-ssh-2.png" alt-text="A screenshot showing the commands to run in the SSH shell and their output." lightbox="./media/tutorial-java-tomcat-mysql-app/azure-portal-check-config-in-ssh-2.png":::
@@ -447,7 +449,7 @@ Azure App Service captures all messages output to the console to help you diagno
447449
:::column-end:::
448450
:::row-end:::
449451

450-
Learn more about logging in Java apps in the series on [Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python and Java applications](/azure/azure-monitor/app/opentelemetry-enable?tabs=java).
452+
Learn more about logging in Java apps in the series on [Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python, and Java applications](/azure/azure-monitor/app/opentelemetry-enable?tabs=java).
451453

452454
Having issues? Check the [Troubleshooting section](#troubleshooting).
453455

@@ -521,7 +523,7 @@ The dev container already has the [Azure Developer CLI](/azure/developer/azure-d
521523
azd up
522524
```
523525

524-
The `azd up` command takes about 15 minutes to complete (the Redis cache takes the most time). It also compiles and deploys your application code, but you'll modify your code later to work with App Service. While it's running, the command provides messages about the provisioning and deployment process, including a link to the deployment in Azure. When it finishes, the command also displays a link to the deploy application.
526+
The `azd up` command takes about 15 minutes to complete (the Redis cache takes the most time). It also compiles and deploys your application code, but you modify your code later to work with App Service. While it's running, the command provides messages about the provisioning and deployment process, including a link to the deployment in Azure. When it finishes, the command also displays a link to the deploy application.
525527
526528
This AZD template contains files (*azure.yaml* and the *infra* directory) that generate a secure-by-default architecture with the following Azure resources:
527529
@@ -572,7 +574,7 @@ In this step, you use the SSH connection to the app container to verify the JNDI
572574
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
573575
</pre>
574576

575-
1. In the SSH terminal, run `cat /usr/local/tomcat/conf/context.xml`. You should see that a JNDI resource called `jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS` was added. You'll use this data source later.
577+
1. In the SSH terminal, run `cat /usr/local/tomcat/conf/context.xml`. You should see that a JNDI resource called `jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS` was added. You use this data source later.
576578

577579
:::image type="content" source="./media/tutorial-java-tomcat-mysql-app/azure-portal-check-config-in-ssh-2.png" alt-text="A screenshot showing the commands to run in the SSH shell and their output.":::
578580

@@ -666,7 +668,7 @@ In the AZD output, find the link to stream App Service logs and navigate to it i
666668
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/&lt;subscription-guid>/resourceGroups/&lt;group-name>/providers/Microsoft.Web/sites/&lt;app-name>/logStream
667669
</pre>
668670

669-
Learn more about logging in Java apps in the series on [Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python and Java applications](/azure/azure-monitor/app/opentelemetry-enable?tabs=java).
671+
Learn more about logging in Java apps in the series on [Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python, and Java applications](/azure/azure-monitor/app/opentelemetry-enable?tabs=java).
670672

671673
Having issues? Check the [Troubleshooting section](#troubleshooting).
672674

0 commit comments

Comments
 (0)