將 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.propertiesapplication.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 Spring Apps 企業版方案中的應用程式。 如需詳細資訊,請參閱 部署Web靜態檔案

動態發佈的靜態內容

如果您的應用程式允許靜態內容由您的應用程式上傳/產生,但在建立後是不可變的,您可以使用如上所述 Azure Blob 儲存體 和 Azure CDN,搭配 Azure 函式來處理上傳和 CDN 重新整理。 我們在使用 Azure Functions 上傳和 CDN 預先載入靜態內容時,提供了範例實作。 您也可以直接將靜態內容部署到 Azure Spring Apps 企業版方案中的應用程式。 如需詳細資訊,請參閱 部署Web靜態檔案

動態或內部內容

對於應用程式經常寫入和讀取的檔案(例如暫存數據檔),或只有應用程式可見的靜態檔案,您可以將 Azure 儲存體 掛接到 App Service 檔案系統。 如需詳細資訊,請參閱在 Linux 上的 App Service 中提供來自 Azure 儲存體 的內容。

判斷您的應用程式是否依賴排程的作業

排程的作業,例如[矽排程器工作] 或 [Unix cron] 工作,不應與 Azure App 服務 搭配使用。 Azure App 服務 不會防止您在內部部署包含排程工作的應用程式。 不過,如果您的應用程式相應放大,則每個排程期間,相同的排程工作可能會執行多次。 這種情況可能會導致非預期的後果。

若要在 Azure 上執行排程的工作,請考慮搭配定時器觸發程式使用 Azure Functions。 如需詳細資訊,請參閱 Azure Functions 的定時器觸發程式。 您不需要將作業程式代碼本身移轉至函式。 函式可以直接叫用應用程式中的URL來觸發作業。

注意

若要防止惡意使用,您可能需要確保作業調用端點需要認證。 在此情況下,觸發程式函式必須提供認證。

判斷是否需要連線至內部部署

如果您的應用程式需要存取任何內部部署服務,您必須布建其中一個 Azure 的連線服務。 如需詳細資訊,請參閱 選擇將內部部署網路連線至 Azure 的解決方案。 或者,您必須重構應用程式,才能使用內部部署資源公開的公開可用 API。

判斷 Java 訊息服務 (JMS) 佇列或主題是否正在使用中

如果您的應用程式使用 JMS 佇列或主題,您必須將它們移轉至外部裝載的 JMS 伺服器。 Azure 服務匯流排 和進階消息佇列通訊協定 (AMQP) 對於使用 JMS 的使用者而言,可能是絕佳的移轉策略。 如需詳細資訊,請參閱搭配 Azure 服務匯流排 和AMQP 1.0使用 JMS。

如果已設定 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

判斷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.xmlibm-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 外掛程式,則必須透過其他機制布建 Web 應用程式,例如:

建立 Web 應用程式之後,請使用其中一個可用的部署機制來部署您的應用程式。 如需詳細資訊,請參閱將檔案部署至 App Service

移轉 JVM 執行時間選項

如果您的應用程式需要特定的運行時間選項,請使用最適當的機制來指定它們。 如需詳細資訊,請參閱設定適用於 Azure App 服務的 Java 應用程式設定 Java 執行時間選項一節。

填入秘密

使用應用程式 設定 來儲存應用程式特有的任何秘密。 如果您想要在多個應用程式之間使用相同的秘密或秘密,或需要精細的存取原則和稽核功能,請改用 Azure 金鑰保存庫 參考。 如需詳細資訊,請參閱設定適用於 Azure App 服務 的 Java 應用程式使用 KeyVault 參考一節。

設定自訂網域和 SSL

如果您的應用程式將在自定義網域上顯示,您必須將 Web 應用程式對應至它。 如需詳細資訊,請參閱教學課程:將現有的自定義 DNS 名稱對應至 Azure App 服務

接著,您必須將該網域的 TLS/SSL 憑證系結至 App Service Web 應用程式。 如需詳細資訊,請參閱在 Azure App 服務 中使用 TLS/SSL 系結保護自定義 DNS 名稱。

移轉數據源、連結庫和 JNDI 資源

若要移轉數據源,請遵循設定 Java 應用程式以進行 Azure App 服務 的設定數據源一節中的步驟。

遵循設定 Java 應用程式以進行 Azure App 服務 的 JBoss EAP 一節中的指示,移轉任何其他伺服器層級的 Classpath 相依性。

移轉任何其他共用伺服器層級 JDNI 資源。 如需詳細資訊,請參閱設定適用於 Azure App 服務的 Java 應用程式 JBoss EAP 一節。

注意

如果您遵循每個應用程式一個 WAR 的建議架構,請考慮將伺服器層級的 Classpath 連結庫和 JNDI 資源移轉至您的應用程式。 這麼做可大幅簡化元件控管和變更管理。 如果您想要為每個應用程式部署一個以上的 WAR,您應該檢閱本指南開頭所述的其中一個隨附指南。

移轉排程的工作

您至少應該將排程的作業移至 Azure VM,使其不再屬於您的應用程式。 或者,您可以選擇使用 Azure Functions、SQL 資料庫 和事件中樞等 Azure 服務,將其現代化為事件驅動 Java。

重新啟動和抽煙測試

最後,您必須重新啟動 Web 應用程式,以套用所有設定變更。 重新啟動完成後,請確認您的應用程式正在正確執行。

移轉後

既然您已將應用程式移轉至 Azure App 服務,您應該確認它如預期般運作。 完成之後,我們有一些建議可讓您的應用程式更原生雲端。

建議