你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用 GitHub Copilot 应用现代化来评估、修正、容器化和将 Java 应用程序部署到 Azure 容器应用。 GitHub Copilot 应用现代化是一个 AI 支持的助手,它将 GitHub Copilot 与开源工具相结合,例如 OpenRewrite 自动执行复杂的升级和迁移步骤。
该工具同时支持 Maven 和 Gradle 项目,旨在实现 Java 版本 8、11、17 和 21 之间的升级,并重点介绍如何现代化 Spring Boot 应用程序。 它为常见迁移方案提供预定义的任务,并整合了在 Azure 容器应用中运行应用程序的最佳做法。
先决条件
- 拥有有效订阅的 Azure 帐户。 免费创建一个。
- 具有任何套餐下有效 GitHub Copilot 订阅的 GitHub 帐户。
- 以下编辑器之一:
- 最新版本的 Visual Studio Code。 必须是版本 1.106 或更高版本。
- Visual Studio Code 中的 GitHub Copilot。 有关设置说明,请参阅 在 Visual Studio Code 中设置 GitHub Copilot。 请务必在 Visual Studio Code 中登录到 GitHub 帐户。
- GitHub Copilot 应用现代化。 安装后重启 Visual Studio Code。
-
IntelliJ IDEA 的最新版本。 必须是 2023.3 或更高版本。
- GitHub Copilot。 必须是版本 1.5.59 或更高版本。 有关更多说明,请参阅 在 IntelliJ IDEA 中设置 GitHub Copilot。 请务必在 IntelliJ IDEA 中登录到 GitHub 帐户。
- GitHub Copilot 应用现代化。 安装后重启 IntelliJ IDEA。
- 最新版本的 Visual Studio Code。 必须是版本 1.106 或更高版本。
- Java 21 或更高版本。
- Maven 或 Gradle 用于生成 Java 项目。
- Docker 已安装并运行(用于容器化)。
- 已安装并配置 Azure CLI。
注释
如果使用 Gradle,则仅支持 Gradle 包装器版本 5 或更高版本。 不支持 Kotlin 域特定语言(DSL)。 IntelliJ IDEA 尚不支持该函数 My Tasks 。
升级 JDK 和框架版本
在迁移到 Azure 容器应用之前,请确保您的 Java 应用程序在受支持且最新的 JDK 版本上运行。 升级 JDK 和框架首先可确保后续迁移步骤面向新式代码库。
有两种方法可以升级 JDK 版本。 这两种方法都使用 GitHub Copilot 应用现代化窗格,可以从 Visual Studio Code 中的边栏访问该窗格。
- 在“快速入门”部分选择“升级运行时和框架”。
- 或者,在“任务 - 升级任务”部分中运行升级的 Java 运行时任务。
若要升级 Spring 框架或非Microsoft依赖项,请在“任务 - 升级任务”部分中运行升级 Java 框架任务。
评估 Azure 容器应用的云就绪情况
评估可识别代码库中的云就绪性挑战,并对其影响进行评分。 它为 Azure 容器应用提供特定建议。
配置评估
在运行评估之前,请在 GitHub Copilot 应用现代化评估窗格中选择“ 配置评估 ”对其进行配置。
对于 Azure 容器应用,请使用以下配置:
appcat:
- target:
- azure-container-apps
os:
- linux
mode: source-only
执行评估
使用以下步骤运行评估:
在边栏中,选择“GitHub Copilot 应用现代化”窗格,然后在“评估”部分选择“迁移到 Azure”或“运行评估”。
GitHub Copilot 对话助手窗口以智能体模式打开,调用现代化评估器。 选择“继续”以确认。
现代化评估员首先验证您的本地环境。 如果未安装 AppCAT 及其依赖项,代理将帮助你安装它们。 安装后,代理会调用 AppCAT 来评估项目。 此步骤可能需要几分钟才能完成。
评估完成后,现代化评估器会在评估报告中生成云就绪问题的分类视图。
解释评估报告
评估报告提供全面的分析结果。 该报告由几个关键部分组成:
- 应用程序信息:基本信息,包括 Java 版本、框架、生成工具、项目结构和目标 Azure 服务。
- 问题摘要:按具有关键百分比的域分类的迁移问题的概述。
-
详细分析分为四个选项卡:
- 问题:需要解决的云就绪情况和 Java 升级问题的分类列表。
- 依赖项:在应用程序中找到的所有 Java 打包依赖项。
- 技术:按分析应用程序中发现的函数分组的技术。
- 见解:文件详细信息和帮助你了解检测到的技术的信息。
报告按以下关键级别对问题进行分类:
| 重要性 | 说明 |
|---|---|
| 必需 | 必须修复的问题才能迁移到 Azure 容器应用。 |
| 潜在 | 可能影响迁移和需要评审的问题。 |
| 可选 | 影响较低的问题。 建议修复它们,但可选。 |
可以展开每个报告的问题,查看受影响的文件列表和详细说明,包括问题、已知解决方案和支持文档。
管理评估报告
该扩展支持导入、导出和删除评估报告,以便你可以与团队共享结果或使工作区保持井然有序。
- 导入:选择“评估”部分中的 “导入 ”,以从 AppCAT CLI 结果、导出的报表或应用上下文文件导入报表。
- 导出:右键单击 “评估报告 ”,然后选择“ 导出 ”以与他人共享报表。
- 删除:右键单击 “评估报告 ”,然后选择“ 删除” 以删除报表。
修正迁移问题
完成评估后,使用预定义或自定义任务修正已识别的问题。 GitHub Copilot 应用现代化提供了两种方法:解决常见迁移模式的预定义任务,以及为组织的特定需求定义的自定义任务。
选择 AppModernization 代理
AppModernization 代理为 Java 应用程序迁移和现代化任务提供最佳体验。 选择它:
- 通过选择活动栏中的聊天图标打开 Copilot 聊天窗口。
- 在聊天窗口中,找到聊天输入框顶部的代理选择器下拉菜单,然后从列表中选择 AppModernization 。
注释
在 Visual Studio Code 中,应用现代化使用 AppModernization 自定义代理,默认选择推荐的模型以获得最佳结果。 可以通过从“代理”菜单中选择“ 配置自定义代理 ”来更改模型。
选择 AppModernization 代理后,使用简单的自然语言提示来执行迁移任务:
-
数据库迁移:
migrate to Managed Identity for Azure SQL Database -
存储迁移:
migrate from AWS S3 to Azure Storage Blob -
消息传递迁移:
migrate from RabbitMQ to Azure Service Bus -
机密管理:
migrate secrets to Azure Key Vault -
身份验证迁移:
migrate to Microsoft Entra ID authentication
运行预定义的迁移任务
GitHub Copilot 应用现代化功能支持 Azure 容器应用迁移的以下预定义任务:
| 任务 | 说明 |
|---|---|
| Spring RabbitMQ 迁移到 Azure 服务总线 | 将 Spring AMQP/JMS 与 RabbitMQ 转换为 Azure 服务总线,保留消息传送模式并启用安全身份验证。 |
| 用于数据库迁移的托管标识 | 为代码库准备托管标识身份验证,连接 Azure SQL Server、Azure Database for MySQL、Azure Database for PostgreSQL、Azure Cosmos DB for Cassandra API 和 Azure Cosmos DB for MongoDB。 |
| 用于凭据迁移的托管标识 | 将 Java 应用程序转换为使用 Azure 托管标识身份验证连接消息服务,如 Azure 事件中心和 Azure 服务总线,消除连接字符串。 |
| AWS S3 迁移到 Azure 存储 Blob | 将与 AWS S3 交互的代码转换为使用 Azure 存储 Blob 运行的代码,同时维护相同的语义。 |
| 登录到本地文件 | 将基于文件的日志记录转换为基于控制台的日志记录,使其可以与 Azure Monitor 集成。 |
| 本地文件 I/O 迁移到 Azure 存储文件共享装载 | 将本地文件读取和写入转换为统一的装载路径访问,从而在 Azure 容器应用上启用 Azure 存储文件共享装载。 有关详细信息,请参阅 在 Azure 容器应用中使用存储挂载。 |
| Java Mail 迁移到 Azure 通信服务 | 转换通过 SMTP 发送邮件的应用程序以使用与 Azure 容器应用托管完全兼容的 Azure 通信服务。 |
| Azure Key Vault 的机密和证书管理 | 将硬编码的机密和本地 TLS/mTLS 证书迁移到 Azure Key Vault。 有关详细信息,请参阅管理 Azure 容器应用中的机密。 |
| Microsoft Entra ID 的用户身份验证 | 将本地用户身份验证机制(如基于 LDAP 的机制)迁移到 Microsoft Entra ID 进行身份验证。 有关详细信息,请参阅 Azure 容器应用中的身份验证和授权。 |
| SQL 方言:Oracle 到 PostgreSQL | 将 Oracle 特定的 SQL 查询、数据类型和专有函数转换为 PostgreSQL 等效项,以便与 Azure Database for PostgreSQL 一起使用。 |
| AWS Secrets Manager 到 Azure 密钥保管库 | 将机密管理的各个方面从 AWS 机密管理器转换为 Azure Key Vault。 |
| 从ActiveMQ转向Azure 服务总线 | 将 ActiveMQ 消息生成者、使用者、连接工厂和队列/主题交互转换为 Azure 服务总线等效项。 |
| AWS SQS 到 Azure 服务总线 | 将特定于 SQS 的代码构造转换为 Azure 服务总线对应项,从而保留消息传送语义。 |
应用评估中的预设任务
- 在评估报告中,选择检测到的问题下所需的解决方案,然后选择“ 运行任务”。
- 此时会打开 Copilot 聊天窗口,其中包含代理模式。 代理生成
plan.md和progress.md,可以在继续之前查看计划。 - 手动输入
continue以确认并启动迁移过程。 - 进行代码更改前,智能体检查版本控制系统状态并签出新分支。
- 重复选择或输入 “继续” 以确认工具使用情况,并等待代码更改完成。
查看验证结果
完成代码更改后,代理将运行自动验证循环,其中包含以下检查:
- Validate-CVE:检测当前依赖项中的常见漏洞和暴露,并修复它们。
- 生成项目:尝试解决任何生成错误。
- 一致性验证:分析代码中的功能一致性。
- 运行测试:运行单元测试并自动生成修复故障的计划。
- 完整性验证:捕获初始代码迁移中错过的迁移项并修复它们。
完成所有检查后,输入 continue 以生成迁移摘要。 通过选择 “保留”查看代码更改并确认。
创建自定义任务
除了预定义的任务,还可以根据组织的特定迁移模式创建自定义任务。 自定义任务使用 Git 提交、外部链接或文本文件中的引用来指导迁移代理。
从 Git 提交创建自定义任务
在“活动”边栏中,打开 GitHub Copilot 应用现代化扩展窗格,将鼠标悬停在 “任务 ”部分上,然后选择“ 创建自定义任务”。
在打开
task.md的文件中,输入任务名称和任务提示。选择 “添加引用 ”,然后在弹出对话框中选择 “Git 提交 ”。
搜索并选择相关提交,然后选择“ 确定”。
选择“保存”。 自定义任务现在显示在 “任务 - 我的任务 ”部分中。
从外部链接和文本文件创建自定义任务
task.md打开该文件并输入任务名称和提示。 例如:-
任务名称:
Expose health endpoint via Spring Boot Actuator -
任务提示:
You are a Spring Boot developer assistant, follow the Spring Boot Actuator documentation to add basic health endpoints for Azure Container Apps deployment.
-
任务名称:
选择 “添加引用”,选择 “外部链接”,然后粘贴 URL 引用。 再次选择 “添加引用 ”,选择 “文本文件”,然后添加包含额外说明的文件。
选择 “保存 ”以创建任务。
共享自定义任务
可以通过共享任务文件夹与其他团队成员共享自定义任务。
若要共享自定义任务,请复制文件夹 .github/appmod/custom-tasks 并将其与预期收件人共享。 收件人将任务文件夹粘贴到 .github/appmod/custom-tasks 目录中,并在扩展窗格中选择 “刷新任务 ”。
运行自定义任务
选择任务文件底部的 “运行 ”,或在 “任务 - 我的任务 ”部分找到任务,然后选择“ 运行任务”。 Copilot 聊天窗口在代理模式下打开,并自动运行迁移工作流。
如果应用程序使用 Oracle 数据库,请继续下一部分。 否则,请跳到 容器化应用程序。
从 Oracle 迁移到 PostgreSQL
注释
仅当应用程序使用 Oracle 数据库时,本部分才适用。 如果应用程序不使用 Oracle,请跳到 容器化应用程序。
GitHub Copilot 应用现代化为 Oracle 到 Azure Database for PostgreSQL 方案提供专用的迁移任务,其中包括:
- AI 提供支持的数据库迁移工具:有关详细信息,请参阅什么是适用于 Visual Studio Code 的 PostgreSQL 扩展预览版?
- 应用代码中的智能 SQL 转换:GitHub Copilot 应用现代化中的内置 SQL 转换功能,作为统一任务工作流的一部分无缝集成。
使用 Oracle 到 PostgreSQL 迁移任务
运行应用程序评估,如 评估 Azure 容器应用的云就绪情况中所述。
评估完成后,请查看报告。 如果应用程序使用 Oracle,则报告会显示一个与 Oracle 相关的 问题数据库迁移(Oracle), 其中包含从 Oracle DB 迁移到 PostgreSQL 的默认解决方案。
(可选)检查文件夹中是否存在
coding_notes.md.github/postgre-migrations/*/results/application_guidance/。 如果存在,应用现代化会引用这些说明,以提高 SQL 转换质量。 否则,请联系数据库团队,使用 PostgreSQL Visual Studio Code 扩展生成它们。选择 “运行任务 ”以执行迁移。
容器化应用程序
完成代码迁移后,容器化 Java 应用程序,以准备部署到 Azure 容器应用。
请确保已安装并运行 Docker。
在 Visual Studio Code 中,打开已迁移的项目。
在“活动”边栏中,打开 GitHub Copilot 应用现代化扩展窗格。
在 “任务” 部分中,打开 Java,然后打开 容器化任务 并选择 “容器化应用程序”。
通过出现提示时选择“ 继续 ”来确认每个工具操作。
Copilot 将执行以下步骤:
- 检查是否已安装并运行 Docker。
- 检查应用程序代码是否已准备好在容器中运行。
- 为每个项目创建 Dockerfile。
- 为每个项目生成 Docker 映像。
- 创建容器化结果的摘要。
注释
为获得最佳结果,请使用扩展的代理设置中显示的最新推荐模型。 Copilot 可能需要执行一些迭代来更正容器化错误。
有关容器化工具的详细信息,请参阅 GitHub 上的 容器化辅助 存储库。
部署到 Azure 容器应用
容器化应用程序后,将其部署到 Azure 容器应用。
在 Visual Studio Code 中,打开已迁移的项目。
在“活动”边栏中,打开 GitHub Copilot 应用现代化扩展窗格。
在 “任务” 部分中,打开 Java,然后打开 部署任务 ,然后选择以下部署选项之一:
- 部署到现有 Azure 基础结构:Copilot 会请求您提供现有的资源组信息,然后将其部署到相应的资源。
- 预配基础结构并部署到 Azure:Copilot 创建新的 Azure 资源并部署项目。
通过出现提示时选择 “继续 ”来确认每个工具操作,并提供所需的信息,例如订阅和资源组。
Copilot 将执行以下步骤:
- 使用部署目标、项目信息、Azure 资源体系结构、Azure 资源和执行步骤生成部署计划 markdown 文件。
- 按照计划中的执行步骤操作。
- 修复了任何部署错误。
- 生成说明部署结果的摘要文件。
注释
为获得最佳结果,请使用扩展的代理设置中显示的最新推荐模型。 Copilot可能需要通过几次迭代来更正部署错误。
迁移后的最佳做法
将 Java 应用程序迁移到 Azure 容器应用后,请考虑以下最佳做法:
- 配置运行状况探测:设置 运行状况探测 ,使 Azure 容器应用能够监视应用程序的运行状况。
- 设置日志记录:配置基于控制台的日志记录以与 Azure Monitor 集成,以便进行集中日志聚合和分析。
- 配置缩放规则:根据 HTTP 流量、CPU、内存或自定义指标设置 缩放规则 ,以处理不同的工作负荷。
- 管理机密:使用 Azure 容器应用机密管理 或 Azure Key Vault 安全地存储和访问敏感配置值。
- 设置 CI/CD 管道:使用 GitHub Actions 或 Azure Pipelines 自动执行部署管道,以实现持续集成和交付。
- 启用蓝绿部署:使用 修订 和流量拆分来实现零停机部署。
- 配置自定义域:为生产流量设置 自定义域和证书 。
- 使用指标和警报进行监视:使用 指标 和 警报 主动监视应用程序运行状况和性能。
- 启用区域冗余:跨可用性区域配置 区域冗余 以实现高可用性。