透過使用 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 應用程式運行在支援且 up-to-日期的 JDK 版本上。 先升級你的 JDK 和框架,確保後續遷移步驟能針對現代化程式碼庫。

有兩種方法可以升級您的 JDK 版本。 兩種方式都可使用 GitHub Copilot 應用程式現代化面板,你可以從 Visual Studio Code 側邊欄進入。

  1. 快速入門區選「升級執行時與框架」。
  2. 或者,可以在 TASKS - 升級任務區執行升級版 Java 執行時任務。

Visual Studio Code 的螢幕擷取畫面,顯示 GitHub Copilot 應用程式現代化窗格,並醒目提示 [升級選項]。

若要升級 Spring 框架或非 Microsoft 相依性,請在 TASKS - 升級任務區執行 Upgrade Java Framework 任務。

Visual Studio Code 的螢幕擷取畫面,顯示 GitHub Copilot 應用程式現代化窗格,並醒目提示升級 Java 架構工作。

評估 Azure Container Apps 的雲端準備程度

評估會識別你程式碼庫中的雲端準備挑戰,並評估其影響。 它提供了針對 Azure 容器應用程式的具體建議。

設定評估

在執行評估前,請在 GitHub Copilot 應用程式現代化評估面板中選擇「設定評估」。

Visual Studio Code 的截圖顯示 GitHub Copilot 應用程式現代化評估面板,並標示了「配置評估」按鈕。

對於 Azure 容器應用,請使用以下設定:

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

執行評定

請使用以下步驟進行評估:

  1. 在側邊欄,選擇 GitHub Copilot 應用程式現代化窗格,然後在 ASSESSMENT 區塊選擇「遷移到 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. 在活動欄中選擇聊天圖示,開啟副駕駛聊天視窗。
  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 to Azure Service Bus 將 Spring AMQP/JMS 與 RabbitMQ 轉換為 Azure 服務匯流排,保留訊息模式並啟用安全認證。
資料庫遷移的管理身份 為 Azure SQL Server、適用於 MySQL 的 Azure 資料庫、適用於 PostgreSQL 的 Azure 資料庫、Azure Cosmos DB for Cassandra API 和 Azure Cosmos DB for MongoDB 準備您的受控識別驗證的程式碼基底。
適用於認證移轉的受控識別 將你的 Java 應用程式轉換成使用 Azure 管理身份認證(Managed Identity Authentication)來執行像 Azure Event Hubs 和 Azure Service Bus 這類訊息服務,消除連線字串。
AWS S3 to Azure Storage Blob 將與 AWS S3 互動的程式碼轉換成可與 Azure Storage Blob 運作的程式碼,並維持相同的語意。
本機檔案記錄 將檔案式日誌轉換為主控台式日誌,使其能與 Azure Monitor 整合。
本機檔案 I/O 轉換至 Azure 儲存體檔案共用掛接 將本地檔案讀寫轉換為統一的掛載路徑存取,從而能將 Azure Storage 檔案共享掛載到 Azure 容器應用程式。 更多資訊請參見在 Azure 容器應用中使用儲存裝載
Java Mail to Azure Communication Service 將透過 SMTP 發送郵件的應用程式轉換為使用 Azure Communication Services,該服務與 Azure 容器應用程式主機完全相容。
Azure Key Vault 的祕密及憑證管理 將硬編碼的秘密和本地的 TLS/mTLS 憑證遷移到 Azure Key Vault。 如需詳細資訊,請參閱 管理 Azure Container Apps 中的秘密
Microsoft Entra ID 的使用者驗證 將本地使用者驗證機制(如基於 LDAP)轉換為 Microsoft Entra ID 進行認證。 如需詳細資訊,請參閱 Azure 容器應用程式中的驗證和授權 (部分機器翻譯)。
SQL 方言:Oracle 到 PostgreSQL 將 Oracle 專屬的 SQL 查詢、資料型態及專有函式轉換為 PostgreSQL 等效函式,供 Azure Database for PostgreSQL 使用。
AWS Secret Manager to Azure Key Vault 將秘密管理的所有面向從 AWS Secret Manager 轉型為 Azure Key Vault。
ActiveMQ to Azure Service Bus 將 ActiveMQ 的訊息產生者、消費者、連線工廠及佇列/主題互動轉換為 Azure Service Bus 的等效功能。
AWS SQS to Azure Service Bus 將 SQS 專屬的程式碼結構轉換成 Azure 服務匯流排對應結構,保留訊息語意。

應用評估中預先定義的任務

  1. 在評估報告中,選擇偵測到的問題下的目標解決方案,並選擇 執行任務
  2. 副駕駛聊天視窗以特工模式開啟。 代理人會產生 plan.mdprogress.md,你可以在繼續前檢視方案。
  3. 手動輸入 continue 確認並開始遷移流程。
  4. 在你修改程式碼之前,代理會檢查版本控制系統的狀態,並檢查一個新的分支。
  5. 反覆選擇或輸入 「繼續 」以確認工具使用情況,並等待程式碼變更完成。

[Visual Studio Code 問題] 窗格的螢幕擷取畫面,其中顯示 [移轉至 Azure SQL 資料庫] 選項,並醒目提示 [執行工作] 按鈕。

審查驗證結果

完成程式碼變更後,代理會執行自動驗證迴圈,包含以下檢查:

  1. Validate-CVEs:偵測現有相依中的常見漏洞與暴露並加以修正。
  2. 建置專案:嘗試解決任何建置錯誤。
  3. 一致性驗證:分析程式碼的功能一致性。
  4. Run-Test:執行單元測試並自動產生修復失敗的計畫。
  5. 完整性驗證:捕捉初始程式碼遷移中遺漏的遷移項目並加以修正。

所有檢查完成後, continue 輸入以產生遷移摘要。 檢視程式碼變更並選擇 保留來確認。

建立自訂任務

除了預先定義的任務外,你還可以根據組織特定的遷移模式建立自訂任務。 自訂任務會利用 Git 提交、外部連結或文字檔的參考來引導遷移代理程式。

從 Git commits 建立自訂任務

  1. 在活動側邊欄,打開 GitHub Copilot 應用程式現代化擴充面板,將滑鼠移到 任務 區塊,然後選擇 建立自訂任務

    Visual Studio Code 截圖,顯示 GitHub Copilot 應用程式現代化任務窗格,並標示「建立自訂任務」按鈕。

  2. 在已開啟 task.md 的檔案中,輸入任務名稱和任務提示。

    Visual Studio Code 的截圖顯示 migrate 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. 選擇 新增參考,選擇 外部連結,然後貼上網址參考。 再次選擇 新增參考資料 ,選擇 文字檔案,然後新增帶有額外指示的檔案。

  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 的情境提供專屬遷移任務,內容包括:

  • AI 驅動的資料庫遷移工具:欲了解更多資訊,請參閱「Visual Studio Code 預覽版的 PostgreSQL 擴充是什麼?」。
  • 應用程式程式碼中的智慧 SQL 轉換:GitHub Copilot 應用程式現代化內建的 SQL 轉換功能,無縫整合為統一任務工作流程的一部分。

使用 Oracle 至 PostgreSQL 的遷移任務

  1. 請依照 Azure 容器應用的雲端準備度評估中描述執行應用程式評估。

  2. 評估結束後,請檢視報告。 如果您的應用程式使用 Oracle,報告會揭露與 Oracle 相關的資料庫 遷移(Oracle)問題, 預設解決方案 為從 Oracle DB 遷移至 PostgreSQL

    Visual Studio Code 的截圖,顯示 Oracle 的 GitHub Copilot 應用程式現代化評估報告。

  3. 可選擇性地檢查 .github/postgre-migrations/*/results/application_guidance/ 資料夾中是否存在 coding_notes.md 。 若有,應用程式現代化會參考這些備註以進行更高品質的 SQL 轉換。 如果沒有,請聯絡你的資料庫團隊,請他們使用 PostgreSQL Visual Studio Code 擴充功能來產生這些檔案。

  4. 選擇 執行任務 來執行遷移。

    Visual Studio Code 的螢幕擷取畫面,其中顯示 Oracle 至 PostgreSQL 的 GitHub Copilot 應用程式現代化工作執行。

容器化你的應用程式

完成程式碼遷移後,將你的 Java 應用程式容器化,準備部署到 Azure 容器應用程式。

  1. 請確定您已安裝並執行 Docker。

  2. 在 Visual Studio Code 中,開啟已移轉的專案。

  3. 在活動側邊欄,打開 GitHub Copilot 應用程式現代化擴充視窗。

  4. 任務 區塊,打開 Java,然後打開 容器化任務 ,選擇 容器化應用程式

    Visual Studio Code 的螢幕擷取畫面,顯示 [容器化應用程式] 工作,並醒目提示 [執行工作] 按鈕。

  5. 當提示時選擇 繼續 ,確認每個工具動作。

  6. 副駕駛會經過以下步驟:

    • 檢查 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. 副駕駛會經過以下步驟:

    • 產生一個部署計畫的 markdown 檔案,包含部署目標、專案資訊、Azure 資源架構、Azure 資源及執行步驟。
    • 遵循計畫中的執行步驟。
    • 修正任何部署錯誤。
    • 產生一個摘要檔案,說明部署結果。

備註

為了獲得最佳效果,請使用擴充套件代理設定中顯示的最新推薦型號。 Copilot 可能需要幾次反覆運算才能修正部署錯誤。

移轉後的最佳做法

在將 Java 應用程式遷移到 Azure 容器應用後,請考慮以下最佳實務:

  • 設定健康探針:設定 健康探針 ,讓 Azure 容器應用程式能監控應用程式的健康狀況。
  • 設定日誌:配置基於控制台的日誌,與 Azure Monitor 整合,以便集中彙總和分析日誌。
  • 設定擴展規則:根據 HTTP 流量、CPU、記憶體或自訂指標設定擴展 規則 ,以處理不同的工作負載。
  • 管理機密:使用 Azure Container Apps 秘密管理 或 Azure Key Vault 來安全儲存與存取敏感設定值。
  • 建立 CI/CD 流程:使用 GitHub ActionsAzure Pipelines 自動化部署流程,進行持續整合與交付。
  • 啟用藍綠部署:利用 修訂 與流量分割來實現零停機部署。
  • 設定自訂網域:為生產流量設定 自訂網域與憑證
  • 以指標與警示監控:利用 指標警示 主動監控應用程式健康與效能。
  • 啟用區域冗餘:設定 區域冗餘 以實現跨可用區域的高可用性。