共用方式為


將 JBoss EAP 應用程式遷移至 Azure App Service 上的 JBoss EAP

本指南說明當您想要移轉現有的 Red Hat JBoss Enterprise Application Platform (EAP) 應用程式,以在 Azure App Service 實例中的 JBoss EAP 上執行時,應該注意的事項。

準備移轉

為確保成功移轉,在開始之前,請先完成下列各節中所述的評量和清查步驟。

清查伺服器容量

記錄目前生產伺服器的硬體(記憶體、CPU、磁碟),以及平均和尖峰要求計數和資源使用率。 無論您選擇哪一種遷移路徑,您都需要這項資訊。 例如,它可以協助選擇在節點集區中的虛擬機器大小、容器要使用的記憶體數量,以及容器所需的 CPU 共用數量。

如果您有負載測試數據,請擷取目前測試結果的快照集,以便在移轉之後再次執行測試,以確保您符合預期的效能目標。

它可以調整 AKS 中的節點集區大小。 若要瞭解如何,請參閱 調整 Azure Kubernetes Service (AKS) 中的節點集區大小。

清查所有秘密

檢查生產伺服器上的所有屬性和組態檔是否有任何秘密和密碼。 請務必在 Web 應用程式封存 (WAR) 檔案中檢查 jboss-web.xml。 您也可以在應用程式內找到包含密碼或認證的組態檔。

請考慮將這些秘密儲存在 Azure KeyVault 中。 如需詳細資訊,請參閱 Azure 金鑰保存庫 基本概念

您可以在 App Service 實例中使用 金鑰保存庫 秘密搭配 金鑰保存庫 參考。 "Key Vault 參考可讓您在應用程式中使用機密,同時保護機密並加密於靜止狀態。" 如需詳細資訊,請參閱應用服務和 Azure 功能的 Key Vault 參考資料

清查所有憑證

記載所有用於公用 SSL 端點的憑證。 您可以執行下列命令來檢視實際執行伺服器上的所有憑證:

keytool -list -v -keystore <path to keystore>

驗證支援的 Java 版本是否正常運作

App Service 上的 JBoss EAP 需要支援的 Java 版本。 如需了解使用哪個 Java 開發工具套件 (JDK) 版本的指引,請參閱 Red Hat 文件中的 支援的配置

注意

如果您的目前伺服器是在不支援的 JDK 上執行,此驗證特別重要(例如 Oracle JDK 或 IBM OpenJ9)。

若要取得目前的 Java 版本,請登入您的生產伺服器,然後執行下列命令:

java -version

清查外部資源

外部資源,例如數據源、Java Message Service (JMS) 訊息代理程式,以及其他資源會透過 Java 命名和目錄介面 (JNDI) 插入。 某些這類資源可能需要移轉或重新設定。

在應用程式內

檢查 WEB-INF/jboss-web.xml 和/或 WEB-INF/web.xml 檔案。 尋找 <Resource> 元素內的 <Context> 元素。

資料來源

資料來源是 JNDI 資源, type 屬性設定為 javax.sql.DataSource。 針對每個數據源,記載下列資訊:

  • 數據源名稱為何?
  • 連線集區設定是什麼?
  • 哪裡可以找到 Java Database Connectivity (JDBC) 驅動程式 JAR 檔案?

如需詳細資訊,請參閱 JBoss EAP 檔中的 關於 JBoss Enterprise Application Platform (EAP) 數據源

所有其他外部資源

在本指南中記載每個可能的外部相依性並不可行。 您的小組有責任確認您可以在移轉後滿足應用程式的每個外部相依性。

判斷檔案系統是否被使用及如何使用

應用程式伺服器上的檔案系統使用方式都需要重新設定,或在某些情況下,架構變更。 JBoss EAP 模組或您的應用程式程式代碼可以使用檔案系統。 您可以識別下列各節所述的部分或所有案例。

只讀靜態內容

如果您的應用程式目前提供靜態內容,您需要替代位置。 您應該考慮將靜態內容移至 Azure Blob 記憶體,並新增 Azure Front Door 以全域快速下載。 如需詳細資訊,請參閱 Azure 儲存體中的靜態網站裝載將 Azure 儲存體帳戶與 Azure Front Door 整合

動態或內部內容

對於應用程式經常寫入和讀取的檔案(例如暫存數據檔),或只有應用程式可見的靜態檔案,您可以使用與 App Service 方案相關聯的本機檔案記憶體。 如需詳細資訊,請參閱 Azure App 服務瞭解 Azure App 服務 文件系統的操作系統功能。

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

排程作業,例如 Quartz 排程器任務或 Unix cron 工作,不應與 Azure App 服務一起使用。 Azure App 服務 不會防止您在內部部署包含排程工作的應用程式。 不過,如果您的應用程式擴充,則相同的排程工作在排程的時間段內可能會執行多次。 這種情況可能會導致非預期的後果。

清查在生產伺服器上執行的任何排程工作,無論是在應用程式程式碼內還是程式碼外。

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

如果您的應用程式需要存取您的任何內部部署服務,您必須佈建其中一個 Azure 連線能力服務。 如需詳細資訊,請參閱將內部部署網路連線至 Azure。 或者,您需要重構您的應用程式,以使用您的內部部署資源所公開的公共 API。

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

如果應用程式使用 JMS 佇列或主題,您就必須將這些佇列或主題遷移到裝載在外部的 JMS 伺服器。 對於使用 JMS 的人而言,Azure 服務匯流排和進階訊息佇列通訊協定 (AMQP) 可以是絕佳的移轉策略。 如需更多資訊,請參閱使用 Java Message Service 1.1 搭配 Azure 服務匯流排標準和 AMQP 1.0

如果您已設定 JMS 持續性存放區,就必須在移轉之後擷取存放區的設定並加以套用。

判斷 JCA 連接器是否正在使用中

如果您的應用程式使用 Java 連接器架構 (JCA) 連接器,請驗證您可以在 JBoss EAP 上使用 JCA 連接器。 如果您可以在 JBoss EAP 上使用 JCA 連接器,則必須將 Java Archive (JAR) 檔案新增至伺服器類別路徑,並將必要的組態檔放在 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 檔案並擷取組態。

注意

如果您想要能夠獨立調整每個 Web 應用程式,以便更妥善地使用 App Service 資源,您應該將 EAR 分成個別的 Web 應用程式。

識別在生產伺服器上執行的所有外部處理序和精靈

如果您有任何在應用程式伺服器外部執行的處理序 (例如監視精靈),則必須加以消除或將其遷移到其他位置。

執行就地測試

建立 Web Apps 之前,請先將應用程式移轉至您想要在 App Service 上使用的 JDK 和 JBoss EAP 版本。 徹底測試應用程式,以確保相容性和效能。

App Service 上 JBoss EAP 的功能注意事項

在 App Service 上使用 JBoss EAP 時,請務必考慮下列注意事項。

  • JBoss EAP 管理控制台:App Service 上不會公開 JBoss Web 控制台。 相反地,Azure 入口網站 會提供應用程式的管理 API,而您應該使用 Azure CLI、Azure Maven 外掛程式或其他 Azure 開發人員工具進行部署。 在應用程式啟動時,可以使用 JBoss CLI 進一步設定 JBoss 資源。

  • 交易:支援交易 API,且支援自動交易復原。 如需詳細資訊,請參閱 Red Hat 檔中管理 JBoss EAP 上的交易。

  • 受控網域模式:在多伺服器生產環境中,JBoss EAP 中的受控網域模式提供集中式受控功能。 不過,在 App Service 上使用 JBoss EAP 時,App Service 平臺會負責設定和管理伺服器實例。 App Service 不需要 JBoss EAP 的受控網域模式。 網域模式是虛擬機型多伺服器部署的絕佳選擇。 如需詳細資訊,請參閱 Red Hat 檔中關於受控網域

  • 伺服器對伺服器叢集:App Service 完全支援 JBoss EAP 叢集部署。 這表示您可以放心地使用:

    • 具狀態會話豆類。
    • 分散式交易。
    • 需要實例之間通訊或高可用性的類似功能。

    如需詳細資訊,請參閱 設定 Azure App ServiceJava 應用程式的 叢集 一節。

遷移

Red Hat 應用程式遷移工具包

Red Hat Migration Toolkit for Applications 是 Visual Studio Code 的免費擴充功能。 此延伸模組會分析您的應用程式程式代碼和組態,以提供從內部部署移轉至雲端的建議。 如需詳細資訊,請參閱 移轉工具組 for Applications 概觀

本指南的內容可協助您解決移轉旅程的其他元件,例如選擇正確的 App Service 方案類型、將會話狀態外部化,以及使用 Azure 來管理 EAP 實例,而不是 JBoss 管理介面。

為 JBoss EAP 執行環境布建 Azure App 服務

使用下列命令來建立資源群組和 Azure App 服務 方案。 建立 App Service 方案之後,會使用 JBoss Enterprise Application Platform (EAP) 運行時間建立 Linux Web 應用程式方案。

請確定指定的環境變數具有適當的值。

az group create --resource-group $resourceGroup --location eastus
az acr create --resource-group $resourceGroup --name $acrName --sku Standard
az appservice plan create \
    --resource-group $resourceGroup \
    --name $jbossAppService \
    --is-linux \
    --sku P0v3
az webapp create \
    --resource-group $resourceGroup \
    --name $jbossWebApp \
    --plan $jbossAppServicePlan \
    --runtime "JBOSSEAP|8-java17"
    #  Or use "JBOSSEAP|8-java11" if you're using Java 11

建置應用程式

使用下列 Maven 命令建置應用程式。

mvn clean install -DskipTests

部署應用程式

如果您的應用程式是從 Maven POM 檔案建置的,請使用適用於 Maven 的 Webapp 外掛程式來建立 Web 應用程式並部署您的應用程式。 如需詳細資訊,請參閱快速入門:在 Azure App 服務 上建立Java應用程式。

若要將 JBoss EAP 應用程式的部署自動化,您可以使用 適用於 Web 應用程式的 Azure Pipelines 工作或 GitHub Action 來部署至 Azure WebApp

設定數據源

向 JBoss Enterprise Application Platform 註冊數據源時,有三個核心步驟:上傳 Java 資料庫連線能力 (JDBC) 驅動程式、將 JDBC 驅動程式新增為模組,以及註冊模組。 如需詳細資訊,請參閱 JBoss EAP 檔中的數據源管理 。 App Service 是無狀態裝載服務,因此用於新增和註冊資料來源模組的設定命令,必須編寫到指令碼並於容器啟動時套用。

若要設定數據源,請使用下列步驟。

  1. 取得資料庫的 JDBC 驅動程式。

  2. 建立 JDBC 驅動程式的 XML 模組定義檔案。 顯示的範例是 PostgreSQL 的模組定義。 請務必將 resource-root path 值替換為您所使用的 JDBC 驅動程序路徑。

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT: REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. 將您的 JBoss CLI 命令放入名為 jboss-cli-commands.cli 的檔案中。 JBoss 命令必須新增模組,並將其註冊為資料來源。 此範例顯示 PostgreSQL 的 JBoss CLI 命令。

    注意

    Microsoft 建議您使用最安全的可用驗證流程。 此程式中所述的驗證流程,例如資料庫、快取、傳訊或 AI 服務,在應用程式中需要高度的信任,而且不會在其他流程中帶來風險。 當像是無密碼或無密鑰連線的受控識別等更安全的選項不可行時,才使用此流程。 針對本機計算機作業,偏好使用無密碼或無密鑰連線的使用者身分識別。

    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. 建立名為 startup_script.sh 的啟動腳本,以呼叫 JBoss CLI 命令。 此範例示範如何呼叫您的 jboss-cli-commands.cli 檔案。 稍後您會將App Service 設定為在實例啟動時執行此腳本。

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. 使用您選擇的 FTP 用戶端,將 JDBC 驅動程式、jboss-cli-commands.cli、startup_script.sh和模組定義上傳至 /site/deployments/tools/。

  6. 配置您的網站以在容器啟動時執行 startup_script.sh 。 在 Azure 入口網站 中,流覽至 [組態>一般設定>啟動命令]。 將啟動命令欄位設定為 /home/site/deployments/tools/startup_script.sh,然後選取 [ 儲存]。

  7. 重新啟動 Web 應用程式,導致它執行設定腳本。

  8. 更新應用程式的 Java 交易 API (JTA) 資料源組態。 開啟應用程式的 src/main/resources/META-INF/persistence.xml 檔案,並尋找 <jta-data-source> 元素。 取代其內容,如下所示:

    <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
    

建置應用程式

使用下列 Maven 命令建置應用程式。

mvn clean install -DskipTests

部署應用程式

如果您的應用程式是從 Maven POM 檔案建置的,請使用適用於 Maven 的 Webapp 外掛程式來建立 Web 應用程式並部署您的應用程式。 如需詳細資訊,請參閱快速入門:在 Azure App 服務 上建立Java應用程式。

若要將 JBoss EAP 應用程式的部署自動化,您可以使用 適用於 Web 應用程式的 Azure Pipelines 工作或 GitHub Action 來部署至 Azure WebApp

移轉後

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

建議