在本文中,您將學習如何利用 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 應用程式運行在支援且 up-to-日期的 JDK 版本上。 先升級你的 JDK 和框架,確保後續遷移步驟能針對現代化程式碼庫。
有兩種方法可以升級您的 JDK 版本。 兩種方式都可使用 GitHub Copilot 應用程式現代化面板,你可以從 Visual Studio Code 側邊欄進入。
- 在快速入門區選「升級執行時與框架」。
- 或者,可以在 TASKS - 升級任務區執行升級版 Java 執行時任務。
若要升級 Spring 框架或非 Microsoft 相依性,請在 TASKS - 升級任務區執行 Upgrade Java Framework 任務。
評估 Azure Container Apps 的雲端準備程度
評估會識別你程式碼庫中的雲端準備挑戰,並評估其影響。 它提供了針對 Azure 容器應用程式的具體建議。
設定評估
在執行評估前,請在 GitHub Copilot 應用程式現代化評估面板中選擇「設定評估」。
對於 Azure 容器應用,請使用以下設定:
appcat:
- target:
- azure-container-apps
os:
- linux
mode: source-only
執行評定
請使用以下步驟進行評估:
在側邊欄,選擇 GitHub Copilot 應用程式現代化窗格,然後在 ASSESSMENT 區塊選擇「遷移到 Azure」或「執行評估」。
GitHub Copilot 聊天視窗以客服模式開啟,呼叫現代化評估器。 選取 [繼續] 以確認。
現代化評估員會先驗證您的本機環境。 如果 AppCAT 及其相依套件尚未安裝,代理程式會協助你安裝。 安裝完成後,客服會打電話給 AppCAT 評估你的專案。 此步驟需要數分鐘的時間才能完成。
評估結束後,現代化評估員會在評估報告中產生雲端準備問題的分類視圖。
解讀評估報告
評估報告提供全面的分析結果。 報告包含幾個關鍵部分:
- 應用程式資訊:基本資訊包括 Java 版本、框架、建置工具、專案結構及目標 Azure 服務。
- 議題摘要:依領域分類的遷移問題概述及關鍵性百分比。
-
詳細分析 分為四個分頁:
- 問題:一份分類的雲端準備與 Java 升級問題清單,供你處理。
- 相依性:所有在應用程式內找到的 Java 打包相依性。
- 技術:依功能分類的技術,出現在分析的應用中。
- 洞察:檔案細節與資訊,幫助您了解偵測到的技術。
報告依據以下關鍵性層級對議題進行分類:
| 關鍵性 | 說明 |
|---|---|
| 必要 | 遷移到 Azure 容器應用程式時必須修正的問題。 |
| 潛力 | 可能影響遷移且需要檢討的問題。 |
| 選擇性 | 影響低的問題。 建議修正它們,但為選擇性。 |
您可以展開每個回報的問題,以查看受影響檔案清單及詳細說明,包括問題、已知解決方案及相關文件。
管理評估報告
這個擴充功能支援匯入、匯出和刪除評估報告,讓你能與團隊分享發現或保持工作區整齊。
- 匯入:在評估區段選擇 匯入 ,匯入 AppCAT CLI 結果、匯出報告或應用程式上下文檔案的報告。
- 匯出:右鍵點 選「評估報告 」並選擇 匯出 ,與他人分享報告。
- 刪除:右鍵點擊 評估報告 ,選擇 刪除 即可移除報告。
解決遷移問題
完成評估後,利用預先定義或自訂任務來解決已識別的問題。 GitHub Copilot 應用程式現代化提供兩種方式:預先定義的任務,針對常見遷移模式,以及你為組織特定需求定義的自訂任務。
選擇 AppModernization 代理程式
AppModernization 代理程式為 Java 應用程式遷移與現代化任務提供最佳體驗。 請選擇:
- 在活動欄中選擇聊天圖示,開啟副駕駛聊天視窗。
- 在聊天視窗中,找到聊天輸入框頂端的客服人員選擇器下拉選單,從列表中選擇「 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 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 服務匯流排對應結構,保留訊息語意。 |
應用評估中預先定義的任務
- 在評估報告中,選擇偵測到的問題下的目標解決方案,並選擇 執行任務。
- 副駕駛聊天視窗以特工模式開啟。 代理人會產生
plan.md和progress.md,你可以在繼續前檢視方案。 - 手動輸入
continue確認並開始遷移流程。 - 在你修改程式碼之前,代理會檢查版本控制系統的狀態,並檢查一個新的分支。
- 反覆選擇或輸入 「繼續 」以確認工具使用情況,並等待程式碼變更完成。
審查驗證結果
完成程式碼變更後,代理會執行自動驗證迴圈,包含以下檢查:
- Validate-CVEs:偵測現有相依中的常見漏洞與暴露並加以修正。
- 建置專案:嘗試解決任何建置錯誤。
- 一致性驗證:分析程式碼的功能一致性。
- Run-Test:執行單元測試並自動產生修復失敗的計畫。
- 完整性驗證:捕捉初始程式碼遷移中遺漏的遷移項目並加以修正。
所有檢查完成後, continue 輸入以產生遷移摘要。 檢視程式碼變更並選擇 保留來確認。
建立自訂任務
除了預先定義的任務外,你還可以根據組織特定的遷移模式建立自訂任務。 自訂任務會利用 Git 提交、外部連結或文字檔的參考來引導遷移代理程式。
從 Git commits 建立自訂任務
在活動側邊欄,打開 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.
-
任務名稱:
選擇 新增參考,選擇 外部連結,然後貼上網址參考。 再次選擇 新增參考資料 ,選擇 文字檔案,然後新增帶有額外指示的檔案。
選擇 儲存 以建立任務。
分享自訂任務
你可以透過共享任務資料夾,與其他團隊成員分享自訂任務。
要分享自訂任務,請複製下方 .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。
可選擇性地檢查
.github/postgre-migrations/*/results/application_guidance/資料夾中是否存在coding_notes.md。 若有,應用程式現代化會參考這些備註以進行更高品質的 SQL 轉換。 如果沒有,請聯絡你的資料庫團隊,請他們使用 PostgreSQL Visual Studio Code 擴充功能來產生這些檔案。選擇 執行任務 來執行遷移。
容器化你的應用程式
完成程式碼遷移後,將你的 Java 應用程式容器化,準備部署到 Azure 容器應用程式。
請確定您已安裝並執行 Docker。
在 Visual Studio Code 中,開啟已移轉的專案。
在活動側邊欄,打開 GitHub Copilot 應用程式現代化擴充視窗。
在 任務 區塊,打開 Java,然後打開 容器化任務 ,選擇 容器化應用程式。
當提示時選擇 繼續 ,確認每個工具動作。
副駕駛會經過以下步驟:
- 檢查 Docker 是否已安裝並執行。
- 檢查應用程式程式碼是否已準備好在容器中執行。
- 為每個專案建立 Dockerfile。
- 為每個專案建置 Docker 映像檔。
- 建立容器化結果的摘要。
備註
為了獲得最佳效果,請使用擴充套件代理設定中顯示的最新推薦型號。 Copilot 可能需要幾次迭代才能修正容器化錯誤。
欲了解更多容器化工具的資訊,請參閱 GitHub 上的 容器化協助 倉庫。
發佈至 Azure 容器應用程式
當你將應用程式容器化後,再部署到 Azure 容器應用程式。
在 Visual Studio Code 中,開啟已移轉的專案。
在活動側邊欄,打開 GitHub Copilot 應用程式現代化擴充視窗。
在 任務 區塊,打開 Java,然後開啟 部署任務 ,並選擇以下部署選項之一:
- 部署到現有的 Azure 基礎架構:Copilot 會要求你現有的資源群組,並部署到相應的資源。
- 配置基礎架構並部署到 Azure:Copilot 建立新的 Azure 資源並部署你的專案。
當提示時選擇 繼續 ,確認每個工具動作,並提供所需資訊,如訂閱與資源群組。
副駕駛會經過以下步驟:
- 產生一個部署計畫的 markdown 檔案,包含部署目標、專案資訊、Azure 資源架構、Azure 資源及執行步驟。
- 遵循計畫中的執行步驟。
- 修正任何部署錯誤。
- 產生一個摘要檔案,說明部署結果。
備註
為了獲得最佳效果,請使用擴充套件代理設定中顯示的最新推薦型號。 Copilot 可能需要幾次反覆運算才能修正部署錯誤。
移轉後的最佳做法
在將 Java 應用程式遷移到 Azure 容器應用後,請考慮以下最佳實務:
- 設定健康探針:設定 健康探針 ,讓 Azure 容器應用程式能監控應用程式的健康狀況。
- 設定日誌:配置基於控制台的日誌,與 Azure Monitor 整合,以便集中彙總和分析日誌。
- 設定擴展規則:根據 HTTP 流量、CPU、記憶體或自訂指標設定擴展 規則 ,以處理不同的工作負載。
- 管理機密:使用 Azure Container Apps 秘密管理 或 Azure Key Vault 來安全儲存與存取敏感設定值。
- 建立 CI/CD 流程:使用 GitHub Actions 或 Azure Pipelines 自動化部署流程,進行持續整合與交付。
- 啟用藍綠部署:利用 修訂 與流量分割來實現零停機部署。
- 設定自訂網域:為生產流量設定 自訂網域與憑證 。
- 以指標與警示監控:利用 指標 與 警示 主動監控應用程式健康與效能。
- 啟用區域冗餘:設定 區域冗餘 以實現跨可用區域的高可用性。