将 Java Spring Boot 应用部署到 Azure 容器应用
本文将介绍如何通过 Microsoft Entra 帐户登录将 Java Spring Boot 应用程序部署到 Azure 容器应用。
本文假定只使用“本地运行”选项卡完成了以下文章之一,并且现在想要部署到 Azure。 这些说明与以下文章中的“部署到 Azure”选项卡中的说明相同:
- 使用 Microsoft Entra ID 保护 Java Spring Boot 应用
- 使用 Azure Active Directory B2C 保护 Java Spring Boot 应用
- 启用 Java Spring Boot 应用以登录用户并访问 Microsoft Graph
- 使用角色和角色声明保护 Java Spring Boot 应用
- 使用组和组声明保护 Java Spring Boot 应用
先决条件
- 一个 Azure 帐户。 如果没有帐户,请创建一个免费帐户。 要继续操作,您需要拥有 Azure 订阅的
Contributor
或Owner
权限。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色。 - Azure CLI。
- Azure 容器应用 CLI 扩展,版本
0.3.47
或更高。 要安装最新版本,请使用az extension add --name containerapp --upgrade --allow-preview
命令。 - Java 开发工具包,版本 17 或更高。
- Maven。
准备 Spring 项目
使用以下步骤来准备项目:
使用以下 Maven 命令生成项目:
mvn clean verify
使用以下命令在本地运行示例项目:
mvn spring-boot:run
安装
要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
az login
为了确保运行最新版本的 CLI,请运行升级命令。
az upgrade
接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。
如果在 Azure CLI 中运行 az containerapp
命令时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。
az extension add --name containerapp --upgrade
注意
从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true
安装容器应用扩展。
az extension add --name containerapp --upgrade --allow-preview true
现在已安装当前扩展或模块,接下来请注册 Microsoft.App
和 Microsoft.OperationalInsights
命名空间。
注意
Azure 容器应用资源已从 Microsoft.Web
命名空间迁移到 Microsoft.App
命名空间。 有关详细信息,请参阅 2022 年 3 月从 Microsoft.Web 到 Microsoft.App 的命名空间迁移。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
创建 Azure 容器应用环境
完成 Azure CLI 安装后,接下来可以定义要在本文中使用的环境变量。
在 bash shell 中定义以下变量。
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
创建资源组。
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
使用自动生成的日志分析工作区创建环境。
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
显示容器应用环境的默认域。 记下此域,以便在后面的部分中使用。
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
准备部署应用程序
将应用程序部署到 Azure 容器应用时,重定向 URL 会更改为 Azure 容器应用中已部署应用程序实例的重定向 URL。 使用以下步骤更改 application.yml 文件中的这些设置:
导航到应用程序的 src\main\resources\application.yml 文件,并将
post-logout-redirect-uri
的值更改为已部署应用的域名,如下例所示。 请务必用实际值替换<API_NAME>
和<default-domain-of-container-app-environment>
。 例如,使用上一步中 Azure 容器应用环境的默认域和应用名称ms-identity-api
,将使用https://ms-identity-api.<default-domain>
作为post-logout-redirect-uri
的值。post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
保存此文件后,使用以下命令重新生成应用:
mvn clean package
重要
应用程序的 application.yml 文件当前在 client-secret
参数中保存了客户机密的值。 在此文件中保留此值并非良好做法。 如果将文件提交到 Git 存储库,则也可能面临风险。 有关建议的方法,请参阅管理 Azure 容器应用中的机密。
更新 Microsoft Entra ID 应用注册
由于重定向 URI 会更改为在 Azure 容器应用上部署的应用,因此还需要更改 Microsoft Entra ID 应用注册中的重定向 URI。 要进行此更改,请使用以下步骤:
导航到面向开发人员的 Microsoft 标识平台应用注册页。
使用搜索框搜索应用注册,例如
java-servlet-webapp-authentication
。选择应用名称,打开应用注册。
从菜单中选择“身份验证”。
在 Web - 重定向 URI 部分中,选择“添加 URI”。
填写应用程序的 URI,附加
/login/oauth2/code/
- 例如https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
。选择“保存”。
部署应用
将 JAR 包部署到 Azure 容器应用。
注意
如有必要,可以在 Java 生成环境变量中指定 JDK 版本。 有关详细信息,请参阅 在 Azure 容器应用中为 Java 生成环境变量。
现在,可以使用 CLI 命令 az containerapp up
部署 WAR 文件。
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
注意
默认的 JDK 版本为 17。 如果需要更改 JDK 版本以与应用程序兼容,可以使用 --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
参数来调整版本号。
有关生成环境变量的详细信息,请参阅 在 Azure 容器应用中为 Java 生成环境变量。
验证应用
在此示例中,containerapp up
命令包含 --query properties.configuration.ingress.fqdn
参数,该参数会返回完全限定的域名 (FQDN),也称为应用的 URL。 按以下步骤检查应用程序的日志,以调查任何部署问题:
从“部署”部分的“输出”页面访问输出应用程序 URL。
在 Azure 容器应用实例“概述”页面的导航窗格中,选择“日志”以检查应用的日志。
详细信息
- Microsoft 标识平台(针对开发人员的 Microsoft Entra ID)
- Microsoft 身份验证库 (MSAL) 的概述
- 快速入门:将应用程序注册到 Microsoft 标识平台
- 快速入门:配置客户端应用程序以访问 Web API
- 了解 Microsoft Entra ID 应用程序同意体验
- 了解用户同意和管理员同意
- Microsoft Entra ID 中的应用程序和服务主体对象
- 国家云
- MSAL 代码示例
- 适用于 Java 的 Microsoft Entra ID Spring Boot Starter 客户端库
- 适用于 Java 的 Microsoft 身份验证库 (MSAL4J)
- MSAL4J Wiki
- ID 令牌
- Microsoft 标识平台中的访问令牌
后续步骤
有关详细信息和其他部署选项,请参阅以下文章: