通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 GitHub Copilot 应用现代化将 Java 应用程序迁移到 Azure 容器应用

本文介绍如何使用 GitHub Copilot 应用现代化来评估、修正、容器化和将 Java 应用程序部署到 Azure 容器应用。 GitHub Copilot 应用现代化是一个 AI 支持的助手,它将 GitHub Copilot 与开源工具相结合,例如 OpenRewrite 自动执行复杂的升级和迁移步骤。

该工具同时支持 Maven 和 Gradle 项目,旨在实现 Java 版本 8、11、17 和 21 之间的升级,并重点介绍如何现代化 Spring Boot 应用程序。 它为常见迁移方案提供预定义的任务,并整合了在 Azure 容器应用中运行应用程序的最佳做法。

先决条件

注释

如果使用 Gradle,则仅支持 Gradle 包装器版本 5 或更高版本。 不支持 Kotlin 域特定语言(DSL)。 IntelliJ IDEA 尚不支持该函数 My Tasks

升级 JDK 和框架版本

在迁移到 Azure 容器应用之前,请确保您的 Java 应用程序在受支持且最新的 JDK 版本上运行。 升级 JDK 和框架首先可确保后续迁移步骤面向新式代码库。

有两种方法可以升级 JDK 版本。 这两种方法都使用 GitHub Copilot 应用现代化窗格,可以从 Visual Studio Code 中的边栏访问该窗格。

  1. “快速入门”部分选择“升级运行时和框架”。
  2. 或者,在“任务 - 升级任务”部分中运行升级的 Java 运行时任务。

Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化窗格,其中突出显示了“升级”选项。

若要升级 Spring 框架或非Microsoft依赖项,请在“任务 - 升级任务”部分中运行升级 Java 框架任务。

Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化窗格,其中突出显示了“升级 Java 框架”任务。

评估 Azure 容器应用的云就绪情况

评估可识别代码库中的云就绪性挑战,并对其影响进行评分。 它为 Azure 容器应用提供特定建议。

配置评估

在运行评估之前,请在 GitHub Copilot 应用现代化评估窗格中选择“ 配置评估 ”对其进行配置。

Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化评估窗格,其中突出显示了“配置评估”按钮。

对于 Azure 容器应用,请使用以下配置:

appcat:
- target:
    - azure-container-apps
  os:
    - linux
  mode: source-only

执行评估

使用以下步骤运行评估:

  1. 在边栏中,选择“GitHub Copilot 应用现代化”窗格,然后在“评估”部分选择“迁移到 Azure”或“运行评估”。

    Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化窗格,其中突出显示了“迁移到 Azure 并运行评估”按钮。

  2. GitHub Copilot 对话助手窗口以智能体模式打开,调用现代化评估器。 选择“继续”以确认。

  3. 现代化评估员首先验证您的本地环境。 如果未安装 AppCAT 及其依赖项,代理将帮助你安装它们。 安装后,代理会调用 AppCAT 来评估项目。 此步骤可能需要几分钟才能完成。

  4. 评估完成后,现代化评估器会在评估报告中生成云就绪问题的分类视图。

    显示评估报表的 Visual Studio Code 窗格的屏幕截图。

解释评估报告

评估报告提供全面的分析结果。 该报告由几个关键部分组成:

  • 应用程序信息:基本信息,包括 Java 版本、框架、生成工具、项目结构和目标 Azure 服务。
  • 问题摘要:按具有关键百分比的域分类的迁移问题的概述。
  • 详细分析分为四个选项卡:
    • 问题:需要解决的云就绪情况和 Java 升级问题的分类列表。
    • 依赖项:在应用程序中找到的所有 Java 打包依赖项。
    • 技术:按分析应用程序中发现的函数分组的技术。
    • 见解:文件详细信息和帮助你了解检测到的技术的信息。

Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化评估报表仪表板。

报告按以下关键级别对问题进行分类:

重要性 说明
必需 必须修复的问题才能迁移到 Azure 容器应用。
潜在 可能影响迁移和需要评审的问题。
可选 影响较低的问题。 建议修复它们,但可选。

Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化评估报告问题列表。

可以展开每个报告的问题,查看受影响的文件列表和详细说明,包括问题、已知解决方案和支持文档。

Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化评估报告问题详细信息。

管理评估报告

该扩展支持导入、导出和删除评估报告,以便你可以与团队共享结果或使工作区保持井然有序。

  • 导入:选择“评估”部分中的 “导入 ”,以从 AppCAT CLI 结果、导出的报表或应用上下文文件导入报表。
  • 导出:右键单击 “评估报告 ”,然后选择“ 导出 ”以与他人共享报表。
  • 删除:右键单击 “评估报告 ”,然后选择“ 删除” 以删除报表。

修正迁移问题

完成评估后,使用预定义或自定义任务修正已识别的问题。 GitHub Copilot 应用现代化提供了两种方法:解决常见迁移模式的预定义任务,以及为组织的特定需求定义的自定义任务。

选择 AppModernization 代理

AppModernization 代理为 Java 应用程序迁移和现代化任务提供最佳体验。 选择它:

  1. 通过选择活动栏中的聊天图标打开 Copilot 聊天窗口。
  2. 在聊天窗口中,找到聊天输入框顶部的代理选择器下拉菜单,然后从列表中选择 AppModernization

Visual Studio Code 的屏幕截图,其中显示了聊天窗口中的代理选择器下拉列表。

注释

在 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 服务总线对应项,从而保留消息传送语义。

应用评估中的预设任务

  1. 在评估报告中,选择检测到的问题下所需的解决方案,然后选择“ 运行任务”。
  2. 此时会打开 Copilot 聊天窗口,其中包含代理模式。 代理生成plan.mdprogress.md,可以在继续之前查看计划。
  3. 手动输入 continue 以确认并启动迁移过程。
  4. 进行代码更改前,智能体检查版本控制系统状态并签出新分支。
  5. 重复选择或输入 “继续” 以确认工具使用情况,并等待代码更改完成。

Visual Studio Code 问题窗格的屏幕截图,其中显示了“迁移到 Azure SQL 数据库”选项,其中突出显示了“运行任务”按钮。

查看验证结果

完成代码更改后,代理将运行自动验证循环,其中包含以下检查:

  1. Validate-CVE:检测当前依赖项中的常见漏洞和暴露,并修复它们。
  2. 生成项目:尝试解决任何生成错误。
  3. 一致性验证:分析代码中的功能一致性。
  4. 运行测试:运行单元测试并自动生成修复故障的计划。
  5. 完整性验证:捕获初始代码迁移中错过的迁移项并修复它们。

完成所有检查后,输入 continue 以生成迁移摘要。 通过选择 “保留”查看代码更改并确认。

创建自定义任务

除了预定义的任务,还可以根据组织的特定迁移模式创建自定义任务。 自定义任务使用 Git 提交、外部链接或文本文件中的引用来指导迁移代理。

从 Git 提交创建自定义任务

  1. 在“活动”边栏中,打开 GitHub Copilot 应用现代化扩展窗格,将鼠标悬停在 “任务 ”部分上,然后选择“ 创建自定义任务”。

    Visual Studio Code 的屏幕截图,其中显示了 GitHub Copilot 应用现代化任务窗格,其中突出显示了“创建自定义任务”按钮。

  2. 在打开 task.md 的文件中,输入任务名称和任务提示。

    Visual Studio Code 的屏幕截图,显示了迁移 rabbitmq 任务,并突出显示了任务名称和任务提示字段。

  3. 选择 “添加引用 ”,然后在弹出对话框中选择 “Git 提交 ”。

    Visual Studio Code 的屏幕截图,其中显示了“选择源类型”下拉列表,其中突出显示了“Git 提交”选项。

  4. 搜索并选择相关提交,然后选择“ 确定”。

    Visual Studio Code 对话框的屏幕截图,标题为“选择提交记录作为源”。

  5. 选择“保存”。 自定义任务现在显示在 “任务 - 我的任务 ”部分中。

    Visual Studio Code 的屏幕截图,其中显示了 task.md 文件,其中突出显示了“保存”按钮。

  1. 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.

    Visual Studio Code 屏幕截图,显示公开的运行状况终结点任务,任务名称和任务提示字段突出显示。

  2. 选择 “添加引用”,选择 “外部链接”,然后粘贴 URL 引用。 再次选择 “添加引用 ”,选择 “文本文件”,然后添加包含额外说明的文件。

  3. 选择 “保存 ”以创建任务。

    Visual Studio Code 的屏幕截图,其中显示了添加引用的 task.md 文件。

共享自定义任务

可以通过共享任务文件夹与其他团队成员共享自定义任务。

若要共享自定义任务,请复制文件夹 .github/appmod/custom-tasks 并将其与预期收件人共享。 收件人将任务文件夹粘贴到 .github/appmod/custom-tasks 目录中,并在扩展窗格中选择 “刷新任务 ”。

运行自定义任务

选择任务文件底部的 “运行 ”,或在 “任务 - 我的任务 ”部分找到任务,然后选择“ 运行任务”。 Copilot 聊天窗口在代理模式下打开,并自动运行迁移工作流。

Visual Studio Code 的屏幕截图,其中显示了“任务”部分,其中突出显示了“运行任务”和“运行”按钮。

如果应用程序使用 Oracle 数据库,请继续下一部分。 否则,请跳到 容器化应用程序

从 Oracle 迁移到 PostgreSQL

注释

仅当应用程序使用 Oracle 数据库时,本部分才适用。 如果应用程序不使用 Oracle,请跳到 容器化应用程序

GitHub Copilot 应用现代化为 Oracle 到 Azure Database for PostgreSQL 方案提供专用的迁移任务,其中包括:

使用 Oracle 到 PostgreSQL 迁移任务

  1. 运行应用程序评估,如 评估 Azure 容器应用的云就绪情况中所述。

  2. 评估完成后,请查看报告。 如果应用程序使用 Oracle,则报告会显示一个与 Oracle 相关的 问题数据库迁移(Oracle), 其中包含从 Oracle DB 迁移到 PostgreSQL 的默认解决方案。

    Visual Studio Code 的屏幕截图,其中显示了 Oracle 的 GitHub Copilot 应用现代化评估报告。

  3. (可选)检查文件夹中是否存在coding_notes.md.github/postgre-migrations/*/results/application_guidance/。 如果存在,应用现代化会引用这些说明,以提高 SQL 转换质量。 否则,请联系数据库团队,使用 PostgreSQL Visual Studio Code 扩展生成它们。

  4. 选择 “运行任务 ”以执行迁移。

    Visual Studio Code 屏幕截图,显示 GitHub Copilot 应用现代化任务执行 Oracle 到 PostgreSQL 迁移。

容器化应用程序

完成代码迁移后,容器化 Java 应用程序,以准备部署到 Azure 容器应用。

  1. 请确保已安装并运行 Docker。

  2. 在 Visual Studio Code 中,打开已迁移的项目。

  3. 在“活动”边栏中,打开 GitHub Copilot 应用现代化扩展窗格。

  4. “任务” 部分中,打开 Java,然后打开 容器化任务 并选择 “容器化应用程序”。

    Visual Studio Code 的屏幕截图,其中显示了“容器化应用程序”任务,其中突出显示了“运行任务”按钮。

  5. 通过出现提示时选择“ 继续 ”来确认每个工具操作。

  6. Copilot 将执行以下步骤:

    • 检查是否已安装并运行 Docker。
    • 检查应用程序代码是否已准备好在容器中运行。
    • 为每个项目创建 Dockerfile。
    • 为每个项目生成 Docker 映像。
    • 创建容器化结果的摘要。

注释

为获得最佳结果,请使用扩展的代理设置中显示的最新推荐模型。 Copilot 可能需要执行一些迭代来更正容器化错误。

有关容器化工具的详细信息,请参阅 GitHub 上的 容器化辅助 存储库。

部署到 Azure 容器应用

容器化应用程序后,将其部署到 Azure 容器应用。

  1. 在 Visual Studio Code 中,打开已迁移的项目。

  2. 在“活动”边栏中,打开 GitHub Copilot 应用现代化扩展窗格。

  3. “任务” 部分中,打开 Java,然后打开 部署任务 ,然后选择以下部署选项之一:

    • 部署到现有 Azure 基础结构:Copilot 会请求您提供现有的资源组信息,然后将其部署到相应的资源。
    • 预配基础结构并部署到 Azure:Copilot 创建新的 Azure 资源并部署项目。

    Visual Studio Code 的屏幕截图,其中显示了“预配基础结构并部署到 Azure 任务”,其中突出显示了“运行任务”按钮。

  4. 通过出现提示时选择 “继续 ”来确认每个工具操作,并提供所需的信息,例如订阅和资源组。

  5. Copilot 将执行以下步骤:

    • 使用部署目标、项目信息、Azure 资源体系结构、Azure 资源和执行步骤生成部署计划 markdown 文件。
    • 按照计划中的执行步骤操作。
    • 修复了任何部署错误。
    • 生成说明部署结果的摘要文件。

注释

为获得最佳结果,请使用扩展的代理设置中显示的最新推荐模型。 Copilot可能需要通过几次迭代来更正部署错误。

迁移后的最佳做法

将 Java 应用程序迁移到 Azure 容器应用后,请考虑以下最佳做法:

  • 配置运行状况探测:设置 运行状况探测 ,使 Azure 容器应用能够监视应用程序的运行状况。
  • 设置日志记录:配置基于控制台的日志记录以与 Azure Monitor 集成,以便进行集中日志聚合和分析。
  • 配置缩放规则:根据 HTTP 流量、CPU、内存或自定义指标设置 缩放规则 ,以处理不同的工作负荷。
  • 管理机密:使用 Azure 容器应用机密管理 或 Azure Key Vault 安全地存储和访问敏感配置值。
  • 设置 CI/CD 管道:使用 GitHub ActionsAzure Pipelines 自动执行部署管道,以实现持续集成和交付。
  • 启用蓝绿部署:使用 修订 和流量拆分来实现零停机部署。
  • 配置自定义域:为生产流量设置 自定义域和证书
  • 使用指标和警报进行监视:使用 指标警报 主动监视应用程序运行状况和性能。
  • 启用区域冗余:跨可用性区域配置 区域冗余 以实现高可用性。