將 WebSphere 應用程式遷移至 Azure App 服務 上的 JBoss EAP
本指南說明當您想要移轉現有的 WebSphere 應用程式以使用 JBoss EAP 在 Azure App 服務 上執行時,應該注意的事項。
移轉前
為確保成功移轉,在開始之前,請先完成下列各節中所述的評量和清查步驟。
清查伺服器容量
記錄目前生產伺服器的硬體(記憶體、CPU、磁碟),以及平均和尖峰要求計數和資源使用率。 無論您選擇哪一種遷移路徑,您都需要這項資訊。 例如,協助引導選取 App Service 方案很有用。
可用的 App Service 方案層 清單會顯示記憶體、CPU 核心、記憶體和定價資訊。 請注意,App Service 上的 JBoss EAP 僅適用於 進階 V3 和 隔離的 V2 App Service 方案層。
清查所有秘密
檢查生產伺服器或伺服器上的所有屬性和組態檔是否有任何秘密和密碼。 請務必檢查 您 WAR 中的ibm-web-bnd.xml 。 您也可以在應用程式內找到包含密碼或認證的組態檔。 這些檔案可能包含 Spring Boot 應用程式的 application.properties 或 application.yml 檔案。
清查所有憑證
記載所有用於公用 SSL 端點的憑證。 您可以執行下列命令來檢視實際執行伺服器上的所有憑證:
keytool -list -v -keystore <path to keystore>
驗證支援的 Java 版本是否正常運作
Azure App 服務 上的 JBoss EAP 支援 Java 8 和 11。 因此,您必須驗證應用程式是否能夠使用該支援的版本正確執行。 如果您的目前伺服器使用支援的 JDK(例如 Oracle JDK 或 IBM OpenJ9),這項驗證特別重要。
若要取得目前的 Java 版本,請登入您的生產伺服器,然後執行下列命令:
java -version
清查 JNDI 資源
清查所有 JNDI 資源。 某些資源,例如 JMS 訊息代理程式,可能需要移轉或重新設定。
在應用程式內
檢查 WEB-INF/ibm-web-bnd.xml 檔案和/或 WEB-INF/web.xml 檔案。
判斷是否使用資料庫
如果應用程式使用任何資料庫,則必須擷取下列資訊:
- 數據源名稱。
- 連接集區組態。
- JDBC 驅動程式 JAR 檔案的位置。
判斷是否要使用檔案系統及如何使用
每當使用應用程式伺服器上的檔案系統時,都必須重新設定,或在罕見的情況下,還需要進行架構變更。 檔案系統可由 WebSphere 共用模組或您的應用程式程式代碼使用。 您可以識別下列部分或所有案例。
唯讀靜態內容
如果應用程式目前提供靜態內容,則必須為其提供替代位置。 您可能想要考慮將靜態內容移至 Azure Blob 儲存體,並新增 Azure CDN 以進行全球閃電快速下載。 如需詳細資訊,請參閱 Azure 儲存體中的靜態網站裝載和快速入門:整合 Azure 儲存體帳戶與 Azure CDN。
動態發佈的靜態內容
如果您的應用程式允許您應用程式上傳/產生的靜態內容,但在建立後不可變,則您可以使用上述的 Azure Blob 儲存體和 CDN,搭配 Azure 函式來處理上傳和 CDN 重新整理。 我們已在使用 Azure Functions 上傳和透過 CDN 預先載入靜態內容中提供範例實作供您使用。
動態或內部內容
對於應用程式經常寫入和讀取的檔案(例如暫存數據檔),或只有應用程式可見的靜態檔案,您可以將 Azure 儲存體 掛接至 App Service 檔案系統。 如需詳細資訊,請參閱在 App Service 中掛接 Azure 儲存體 為本機共用。
判斷您的應用程式是否依賴排程的作業
排程的作業,例如[矽排程器工作] 或 [Unix cron] 工作,不應該與 Azure App 服務 搭配使用。 Azure App 服務 不會防止您在內部部署包含排程工作的應用程式。 不過,如果您的應用程式相應放大,則每個排程期間,相同的排程工作可能會執行多次。 這種情況可能會導致非預期的後果。
若要在 Azure 上執行排程的工作,請考慮搭配定時器觸發程式使用 Azure Functions。 如需詳細資訊,請參閱 Azure Functions 的定時器觸發程式。 您不需要將作業程式代碼本身移轉至函式。 函式可以直接叫用應用程式中的URL來觸發作業。
注意
若要防止惡意使用,您可能需要確保作業調用端點需要認證。 在此情況下,觸發程式函式必須提供認證。
判斷是否需要連線至內部部署環境
如果您的應用程式需要存取您的任何內部部署服務,您必須佈建其中一個 Azure 連線能力服務。 如需詳細資訊,請參閱將內部部署網路連線至 Azure。 或者,您必須重構應用程式,以使用內部部署資源所顯示的公開可用 API。
判斷 Java 訊息服務 (JMS) 佇列或主題是否正在使用中
如果應用程式使用 JMS 佇列或主題,您就必須將這些佇列或主題遷移到裝載在外部的 JMS 伺服器。 對於這些使用 JMS 的佇列或主題來說,Azure 服務匯流排和進階訊息佇列通訊協定 (AMQP) 會是絕佳的移轉策略。 如需詳細資訊,請參閱搭配 Azure 服務匯流排 標準和AMQP 1.0使用Java Message Service 1.1。
如果您已設定 JMS 持續性存放區,就必須在移轉之後擷取存放區的設定並加以套用。
判斷您的應用程式是否使用 WebSphere 特定 API
如果您的應用程式使用 WebSphere 特定的 API,您必須重構應用程式,使其無法使用。 Red Hat Migration Toolkit for Apps 可協助移除和重構這些相依性。
判斷您的應用程式是否使用 Entity Beans 或 EJB 2.x 樣式 CMP Beans
如果您的應用程式使用 Entity Beans 或 EJB 2.x 樣式 CMP 豆類,您必須重構應用程式以移除這些相依性。
判斷是否使用 JavaEE 應用程式用戶端應用程式功能
如果您有使用 JavaEE 應用程式用戶端應用程式用戶端功能連線到您的 (server) 應用程式,您必須重構用戶端應用程式和 (伺服器) 應用程式,才能使用 HTTP API。
判斷您的應用程式是否包含 OS 特定程式代碼
如果您的應用程式包含主機 OS 上具有相依性的任何程式代碼,則必須重構它以移除這些相依性。 例如,您可能需要使用 或 \
取代檔案系統路徑File.Separator
中的任何用法/
,或Paths.get
如果您的應用程式在 Windows 上執行。
判斷EJB定時器是否正在使用中
如果您的應用程式使用 EJB 定時器,您必須驗證每個 JBoss EAP 實例都可以獨立觸發 EJB 定時器程式代碼。 此驗證是必要的,因為當您的 App Service 水平調整時,每個 EJB 定時器都會在其自己的 JBoss EAP 實例上觸發。
判斷 JCA 連接器是否正在使用中
如果您的應用程式使用 JCA 連接器,您必須驗證 JCA 連接器是否可以在 JBoss EAP 上使用。 如果 JCA 實作系結至 WebSphere,您必須重構應用程式以移除 JCA 連接器的相依性。 如果可以使用 JCA 連接器,則必須將 JAR 新增至伺服器 classpath。 您也必須將必要的組態檔放在 JBoss EAP 伺服器目錄中的正確位置,以供使用。
判斷 JAAS 是否正在使用中
如果您的應用程式使用 JAAS,您必須擷取 JAAS 的設定方式。 如果使用資料庫,您可以將它轉換成 JBoss EAP 上的 JAAS 網域。 如果是自定義實作,您必須驗證它是否可以在 JBoss EAP 上使用。
判斷您的應用程式是否使用資源配接器
如果您的應用程式需要資源配接器 (RA),它必須與 JBoss EAP 相容。 藉由將RA部署到伺服器並正確設定,判斷RA是否可在 JBoss EAP 的獨立實例上正常運作。 如果 RA 正常運作,您必須將 JAR 新增至 App Service 實例的伺服器類別路徑,並將必要的組態檔放在 JBoss EAP 伺服器目錄中的正確位置,以供使用。
判斷應用程式是否由多個 WAR 組成
如果應用程式由多個 WAR 組成,則應該將這些 WAR 視為個別應用程式,並瀏覽本指南以了解這些 WAR。
判斷應用程式是否封裝為 EAR
如果您的應用程式封裝為 EAR 檔案,請務必檢查 application.xml 和 ibm-application-bnd.xml 檔案並擷取其組態。
識別在生產伺服器上執行的所有外部處理序和精靈
如果您有任何在應用程式伺服器外部執行的處理序 (例如監視精靈),則必須加以消除或將其遷移到其他位置。
遷移
Red Hat Migration Toolkit for Apps
Red Hat Migration Toolkit for Applications 是 Visual Studio Code 的免費擴充功能。 此延伸模組會分析您的應用程式程式代碼和設定,以提供從其他應用程式伺服器將 Jakarta EE 應用程式移轉至 JBoss EAP 的建議,例如移除專屬 API 的相依性。 如果您要從內部部署移轉至雲端,擴充功能也會提供建議。 如需詳細資訊,請參閱 移轉工具組 for Applications 概觀。
本指南的內容將協助您解決移轉旅程的其他元件,例如選擇正確的 App Service 方案類型、將會話狀態外部化,以及使用 Azure 來管理 EAP 實例,而不是 JBoss 管理介面。
佈建 App Service 方案
從可用的服務方案清單中,選取其規格符合或超過目前生產硬體規格的計劃。
注意
如果您打算執行預備/Canary 部署或使用 部署位置,App Service 方案必須包含該額外的容量。 我們建議針對 Java 應用程式使用進階或更高方案。
建立及部署 Web 應用程式
您必須針對部署至 JBoss EAP 伺服器的每個 WAR 檔案,在您的 App Service 方案上建立 Web 應用程式。
注意
雖然可以將多個 WAR 檔案部署到單一 Web 應用程式,但這是極不想要的。 將多個 WAR 檔案部署到單一 Web 應用程式,可防止每個應用程式根據自己的使用量需求進行調整。 它也會增加後續部署管線的複雜性。 如果需要在單一 URL 上使用多個應用程式,請考慮使用路由解決方案,例如 Azure 應用程式閘道。
Maven 應用程式
如果您的應用程式是從 Maven POM 檔案建置的,請使用適用於 Maven 的 Webapp 外掛程式來建立 Web 應用程式並部署您的應用程式。 如需詳細資訊,請參閱快速入門:在 Azure App 服務 上建立 Java 應用程式一節的設定 Maven 外掛程式一節。
非 Maven 應用程式
如果您無法使用 Maven 外掛程式,則必須透過其他機制布建 Web 應用程式,例如:
建立 Web 應用程式之後,請使用其中一個可用的部署機制來部署您的應用程式。 如需詳細資訊,請參閱 將檔案部署至 App Service。
移轉 JVM 執行時間選項
如果您的應用程式需要特定的運行時間選項,請使用最適當的機制來指定它們。 如需詳細資訊,請參閱在 Azure App 服務 中部署和設定 Tomcat、JBoss 或 Java SE 應用程式的設定 Java 執行時間選項一節。
填入秘密
使用應用程式設定來儲存應用程式專屬的任何秘密。 如果您想要在多個應用程式之間使用相同的秘密或秘密,或需要精細的存取原則和稽核功能,請改用 Azure 金鑰保存庫 參考。 如需詳細資訊,請參閱在 Azure App 服務 和 Azure Functions 中使用 金鑰保存庫 參考作為應用程式設定。
設定自訂網域和 SSL
如果您的應用程式將在自定義網域上顯示,您必須將 Web 應用程式對應至它。 如需詳細資訊,請參閱教學課程:將現有的自定義 DNS 名稱對應至 Azure App 服務。
接著,您必須將該網域的 TLS/SSL 憑證系結至 App Service Web 應用程式。 如需詳細資訊,請參閱在 Azure App Service 中使用 TLS/SSL 繫結保護自訂 DNS 名稱。
移轉數據源、連結庫和 JNDI 資源
若要移轉數據源,請遵循在 Azure App 服務 中設定 Tomcat、JBoss 或 Java SE 應用程式的數據源中的步驟。
移轉任何其他伺服器層級的 Classpath 相依性。 如需詳細資訊,請參閱在 Azure App 服務 中設定 Tomcat、JBoss 或 Java SE 應用程式的數據源。
移轉任何其他共用伺服器層級 JDNI 資源。 如需詳細資訊,請參閱在 Azure App 服務 中設定 Tomcat、JBoss 或 Java SE 應用程式的數據源。
注意
如果您遵循每個應用程式一個 WAR 的建議架構,請考慮將伺服器層級的 Classpath 連結庫和 JNDI 資源移轉至您的應用程式。 這麼做可大幅簡化元件控管和變更管理。 如果您想要為每個應用程式部署一個以上的 WAR,您應該檢閱本指南開頭所述的其中一個隨附指南。
移轉排程的工作
您至少應該將排程的作業移至 Azure VM,使其不再屬於您的應用程式。 或者,您可以選擇使用 Azure Functions、SQL 資料庫 和事件中樞等 Azure 服務,將其現代化為事件驅動 Java。
重新啟動和抽煙測試
最後,您必須重新啟動 Web 應用程式,以套用所有設定變更。 重新啟動完成後,請確認您的應用程式正在正確執行。
移轉後
既然您已將應用程式移轉至 Azure App 服務,您應該確認它如預期般運作。 完成之後,我們有一些建議可讓您的應用程式更原生雲端。
建議
如果您選擇使用 /home 目錄進行檔案儲存,請考慮將它取代為 Azure 儲存體。 如需詳細資訊,請參閱將 Azure 儲存體 掛接為App Service中自定義容器中的本機共用。
如果您在包含 連接字串、SSL 金鑰和其他秘密資訊的 /home 目錄中設定,請考慮盡可能使用 Azure 金鑰保存庫 和參數插入與應用程式設定的組合。 如需詳細資訊,請參閱使用App Service和 Azure Functions 和設定 App Service 應用程式的 金鑰保存庫 參考。
請考慮使用部署位置進行零停機的可靠部署。 如需詳細資訊,請參閱在 Azure App 服務 中設定預備環境。
設計和實作DevOps策略。 若要在提高開發速度的同時維持可靠性,請考慮使用 Azure Pipelines 將部署和測試自動化。 如需詳細資訊,請參閱 建置及部署至 Java Web 應用程式。 如果您使用部署位置,您可以將部署自動化至位置和後續位置交換。 如需詳細資訊,請參閱使用 Azure Pipelines 部署至 App Service 的範例:部署至位置一節。
設計和實作商務持續性和災害復原策略。 針對任務關鍵性應用程式,請考慮多區域部署架構。 如需詳細資訊,請參閱 高可用性多區域 Web 應用程式。