Migrace aplikací JBoss EAP do JBoss EAP ve službě Azure App Service

Tato příručka popisuje, o čem byste měli vědět, když chcete migrovat existující aplikaci JBoss EAP, která se má spouštět v JBoss EAP v instanci služby Aplikace Azure.

Před migrací

Pokud chcete zajistit úspěšnou migraci, dokončete kroky posouzení a inventáře popsané v následujících částech.

Inventarizace kapacity serverů

Zdokumentujte hardware (paměť, procesor, disk) aktuálních produkčních serverů a průměrný počet požadavků a využití prostředků ve špičce. Tyto informace budete potřebovat bez ohledu na zvolenou cestu migrace. Užitečné je například pomoct při výběru velikosti virtuálních počítačů ve fondu uzlů, množství paměti, které kontejner používá, a počet sdílených procesorů, které kontejner potřebuje.

Ve službě AKS je možné změnit velikost fondů uzlů. Postup najdete v tématu Změna velikosti fondů uzlů ve službě Azure Kubernetes Service (AKS).

Inventarizace všech tajných kódů

Ve všech vlastnostech a konfiguračních souborech na produkčních serverech vyhledejte tajné kódy a hesla. Nezapomeňte zkontrolovat soubor jboss-web.xml v souborech WAR. Konfigurační soubory obsahující hesla nebo přihlašovací údaje se mohou nacházet také ve vaší aplikaci.

Zvažte uložení těchto tajných kódů do služby Azure Key Vault. Další informace najdete v článku Základní koncepty služby Azure Key Vault.

Tajné kódy služby Key Vault můžete použít v instanci služby App Service s odkazy na key Vault. Odkazy služby Key Vault umožňují používat tajné kódy ve vaší aplikaci a přitom je udržovat zabezpečené a zašifrované v klidovém stavu. Další informace najdete v tématu Použití odkazů služby Key Vault pro App Service a Azure Functions.

Inventarizace všech certifikátů

Zdokumentujte všechny certifikáty používané pro veřejné koncové body SSL. Všechny certifikáty na produkčních serverech zobrazíte spuštěním následujícího příkazu:

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

Ověření správné funkce podporované verze jazyka Java

JBoss EAP na virtuálních počítačích Azure vyžaduje podporovanou verzi Javy. Pokyny k tomu, jakou verzi sady JDK použít, najdete v dokumentaci k Red Hatu v části Podporované konfigurace .

Poznámka:

Toto ověření je obzvláště důležité, pokud se váš aktuální server provozuje na nepodporované sadě JDK (například Oracle JDK nebo IBM OpenJ9).

Aktuální verzi jazyka Java získáte tak, že se přihlásíte k produkčnímu serveru a spustíte následující příkaz:

java -version

Inventář externích prostředků

Externí prostředky, jako jsou zdroje dat, zprostředkovatelé zpráv JMS a další, se vkládají přes rozhraní JNDI (Java Naming and Directory Interface). Některé z těchto prostředků mohou vyžadovat migraci nebo změnu konfigurace.

Ve vaší aplikaci

Zkontrolujte soubory WEB-INF/jboss-web.xml a/nebo WEB-INF/web.xml. Hledejte elementy <Resource> uvnitř elementu <Context>.

Zdroje dat

Zdroje dat jsou prostředky JNDI s atributem type nastaveným na javax.sql.DataSource. U každého zdroje dat zdokumentujte následující informace:

  • Jaký je název zdroje dat?
  • Jaká je konfigurace fondu připojení?
  • Kde najdu soubor JAR ovladače JDBC?

Další informace najdete v tématu o zdrojích dat EAP v JBoss v dokumentaci k JBoss EAP.

Všechny ostatní externí prostředky

V této příručce není možné zdokumentovat všechny možné externí závislosti. Je zodpovědností vašeho týmu, aby ověřil, že po migraci budou fungovat všechny externí závislosti vaší aplikace.

Určení, zda se používá replikace relace

Pokud vaše aplikace spoléhá na replikaci relací, budete ji muset změnit tak, aby se tato závislost odebrala. App Service neumožňuje komunikaci instancí přímo s ostatními.

Určení, jestli a jak se používá systém souborů

Jakékoli používání systému souborů na aplikačním serveru bude vyžadovat změnu konfigurace nebo ve vzácných případech změnu architektury. Systém souborů může být používán moduly JBoss EAP nebo kódem aplikace. Můžete zjistit některé nebo všechny z následujících situací popsaných v následujících oddílech.

Statický obsah jen pro čtení

Pokud vaše aplikace aktuálně poskytuje statický obsah, budete pro ni potřebovat alternativní umístění. Možná budete chtít statický obsah přesunout do Azure Blob Storage a přidat Azure CDN, abyste umožnili bleskově rychlé globální stahování. Další informace najdete v tématu Hostování statického webu ve službě Azure Storage a rychlém startu: Integrace účtu úložiště Azure s Azure CDN. Statický obsah můžete také přímo nasadit do aplikace v plánu Azure Spring Apps Enterprise. Další informace naleznete v tématu Nasazení webových statických souborů.

Dynamicky publikovaný statický obsah

Pokud vaše aplikace umožňuje nahrávání nebo vytváření statického obsahu, který je ale po vytvoření neměnný, můžete použít Azure Blob Storage a Azure CDN, jak je popsáno výše, s funkcí Azure Functions, která zpracovává nahrávání a aktualizace CDN. Pro vaše použití jsme poskytli ukázkovou implementaci na GitHubu – Uploading and CDN-preloading static content with Azure Functions. Statický obsah můžete také přímo nasadit do aplikace v plánu Azure Spring Apps Enterprise. Další informace naleznete v tématu Nasazení webových statických souborů.

Dynamický nebo interní obsah

Pro soubory, které vaše aplikace často zapisuje a čte (například dočasné datové soubory) nebo statické soubory, které jsou viditelné jenom pro vaši aplikaci, můžete použít místní úložiště souborů přidružené k vašemu plánu služby App Service. Další informace najdete v tématu Funkce operačního systému ve službě Aplikace Azure Service a Vysvětlení systému souborů Aplikace Azure Service.

Určení, jestli aplikace využívá naplánované úlohy

Naplánované úlohy, jako jsou úlohy plánovače Quartz nebo úlohy unixového cron, by se neměly používat se službou Aplikace Azure Service. Aplikace Azure Služba vám nezabrání v interním nasazení aplikace obsahující naplánované úlohy. Pokud ale u aplikace dojde k horizontálnímu rozšíření kapacity, může se stejná naplánovaná úloha spustit v průběhu naplánovaného období více než jednou. Tato situace může vést k nezamýšleným důsledkům.

Inventarizace všech naplánovaných úloh spuštěných na produkčních serverech nebo mimo kód aplikace

Určení, jestli je potřeba připojení k místnímu prostředí

Pokud vaše aplikace potřebuje přístup k některým místním službám, budete muset zřídit jednu ze služeb připojení Azure. Další informace najdete v článku Volba řešení pro připojení místní sítě k Azure. Alternativně budete muset aplikaci refaktorovat tak, aby používala veřejně přístupná rozhraní API, která nabízejí vaše místní prostředky.

Určení, jestli se používají fronty nebo témata JMS (Java Message Service)

Pokud vaše aplikace používá fronty nebo témata JMS, budete je muset migrovat na externě hostovaný server JMS. Pro aplikace používající JMS může skvělou migrační strategii představovat Azure Service Bus a rozšířený protokol řízení front zpráv (AMQP). Další informace najdete v tématu, které se věnuje použití JMS se službou Azure Service Bus a protokolem AMQP 1.0.

Pokud jste nakonfigurovali trvalá úložiště JMS, musíte zachytit jejich konfiguraci a po migraci ji použít.

Určení, jestli se používají konektory JCA

Pokud vaše aplikace používá konektory JCA, ověřte, že můžete použít konektor JCA v JBoss EAP. Pokud můžete použít konektor JCA v JBoss EAP, pak aby byl dostupný, musíte přidat jars do cesty ke třídě serveru a umístit potřebné konfigurační soubory do správného umístění v adresářích serveru JBoss EAP.

Určení, jestli se používá JAAS

Pokud vaše aplikace používá JAAS, budete muset zjistit konfiguraci JAAS. Pokud používáte databázi, můžete ji převést na doménu JAAS v JBoss EAP. Pokud se jedná o vlastní implementaci, budete muset ověřit, že se dá použít v JBoss EAP.

Určení, jestli aplikace využívá adaptér prostředků

Pokud vaše aplikace potřebuje adaptér prostředků (RA), musí být kompatibilní s protokolem JBoss EAP. Zjistěte, jestli RA funguje správně na samostatné instanci protokolu EAP JBoss, a to tak, že ji nasadíte na server a správně ji nakonfigurujete. Pokud RA funguje správně, budete muset přidat jar do cesty ke třídě serveru služby App Service a umístit potřebné konfigurační soubory do správného umístění v adresářích serveru JBoss EAP, aby byl dostupný.

Určení, jestli se aplikace skládá z několika souborů WAR

Pokud se vaše aplikace skládá z několika souborů WAR, měli byste s těmito soubory WAR zacházet jako se samostatnými aplikacemi a projít tuto příručku pro každý z nich.

Určení, jestli je aplikace zabalená jako soubor EAR

Pokud je vaše aplikace zabalená jako soubor EAR, prověřte soubor application.xml a poznačte si jeho konfiguraci.

Poznámka:

Pokud chcete mít možnost škálovat každou webovou aplikaci nezávisle na sobě, abyste mohli lépe používat prostředky služby App Service, měli byste rozdělit ear do samostatných webových aplikací.

Zjištění všech vnějších procesů a démonů běžících na produkčních serverech

Pokud používáte nějaké procesy, které běží mimo aplikační server, například monitorovací démony, budete je muset eliminovat nebo migrovat jinam.

Místní testování

Před vytvořením imagí kontejnerů migrujte aplikaci do verzí JDK a JBoss EAP, které chcete použít ve službě App Service. Pečlivě otestujte kompatibilitu a výkon aplikace.

Poznámky k funkcím JBoss EAP ve službě App Service

Při používání JBoss EAP ve službě App Service nezapomeňte vzít v úvahu následující poznámky.

  • Konzola pro správu EAP JBoss: Webová konzola JBoss není ve službě App Service zpřístupněná. Místo toho azure Portal poskytuje rozhraní API pro správu pro vaši aplikaci a měli byste ji nasadit pomocí Azure CLI, modulu plug-in Azure Maven nebo jiných vývojářských nástrojů Azure.

  • Transakce: Instance aplikace se spouštějí bezstavovým způsobem, takže rozhraní API transakcí se v současné době nepodporuje. Další informace naleznete v tématu Správa transakcí v JBoss EAP v dokumentaci k Red Hat.

  • Režim spravované domény: V produkčním prostředí s více servery nabízí režim spravované domény v JBoss EAP centralizované spravované funkce. S protokolem JBoss EAP ve službě App Service ale platforma App Service přebírá odpovědnost za konfiguraci a správu instancí serveru. App Service eliminuje potřebu režimu spravované domény JBoss EAP. Režim domény je dobrou volbou pro nasazení na více serverech založených na virtuálních počítačích. Další informace najdete v tématu o spravovaných doménách v dokumentaci ke službě Red Hat.

  • Clustering mezi servery: Od 15. března 2022 se clusterové nasazení JBoss EAP podporuje ve verzi Public Preview. Tato podpora znamená, že už před nasazením do služby App Service nemusíte ze svých aplikací odebírat následující funkce:

    • Stavové relace fazolí.
    • Distribuované transakce.
    • Podobné funkce, které vyžadují komunikaci mezi instancemi nebo vysokou dostupnost

    Další informace najdete v oznámení vydané verze a clusteringu v JBoss EAP části Konfigurace aplikace Java pro službu Aplikace Azure Service.

Migrace

Red Hat Migration Toolkit for Apps

Sada nástrojů Red Hat Migration Toolkit for Applications je bezplatné rozšíření pro Visual Studio Code. Toto rozšíření analyzuje kód a konfiguraci aplikace a poskytuje doporučení pro migraci do cloudu z místního prostředí. Další informace najdete v tématu Přehled sady nástrojů migration toolkit for Applications.

Obsah této příručky vám pomůže vyřešit ostatní komponenty cesty migrace, jako je volba správného typu plánu služby App Service, externalizace stavu relace a použití Azure ke správě instancí protokolu EAP místo rozhraní pro správu JBoss.

Zřízení služby Aplikace Azure pro modul runtime JBoss EAP

Pomocí následujících příkazů vytvořte skupinu prostředků a plán služby Aplikace Azure. Po vytvoření plánu služby App Service se pomocí modulu runtime JBoss EAP vytvoří plán webové aplikace pro Linux. Weby EAP JBoss můžete vytvářet pouze na úrovních plánu služby App Service PremiumV3 a IsolatedV2.

Ujistěte se, že zadané proměnné prostředí mají odpovídající hodnoty.

Poznámka:

PremiumV3 i IsolatedV2 mají nárok na ceny rezervovaných instancí, což může snížit náklady. Další informace o úrovních plánu služby App Service a cenách rezervovaných instancí najdete v tématu Ceny služby App Service.

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 P1V2
az webapp create \
    --resource-group $resourceGroup \
    --name $jbossWebApp \
    --plan $jbossAppServicePlan \
    --runtime "JBOSSEAP|7-java8"
    #  Or use "JBOSSEAP|7-java11" if you're using Java 11

Sestavení aplikace

Sestavte aplikaci pomocí následujícího příkazu Mavenu.

mvn clean install -DskipTests

Nasazení aplikace

Pokud je vaše aplikace vytvořena ze souboru Maven POM, použijte k vytvoření webové aplikace a jejímu nasazení modul plug-in WebApp pro Maven. Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Javě ve službě Aplikace Azure Service.

K automatizaci nasazení aplikací JBoss EAP můžete použít úlohu Azure Pipelines pro webovou aplikaci nebo akci GitHubu pro nasazení do webové aplikace Azure.

Nastavení zdrojů dat

Při registraci zdroje dat v JBoss EAP existují tři základní kroky: nahrání ovladače JDBC, přidání ovladače JDBC jako modulu a registrace modulu. Další informace naleznete v tématu Správa zdrojů dat v dokumentaci KOSS EAP. App Service je bezstavová hostitelská služba, takže konfigurační příkazy pro přidání a registraci modulu zdroje dat musí být skriptovány a použity při spuštění kontejneru.

K nastavení zdrojů dat použijte následující postup.

  1. Získejte ovladač JDBC databáze.

  2. Vytvořte definiční soubor modulu XML pro ovladač JDBC. Následující příklad je definice modulu pro PostgreSQL. Nezapomeňte hodnotu nahradit resource-root path cestou k ovladači JDBC, který používáte.

    <?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. Příkazy rozhraní příkazového řádku JBoss umístěte do souboru s názvem jboss-cli-commands.cli. Příkazy JBoss musí přidat modul a zaregistrovat ho jako zdroj dat. Následující příklad ukazuje příkazy rozhraní příkazového řádku JBoss pro PostgreSQL.

    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. Vytvořte spouštěcí skript s názvem startup_script.sh , který volá příkazy rozhraní příkazového řádku JBoss. Následující příklad ukazuje, jak volat soubor jboss-cli-commands.cli . Později nakonfigurujete službu App Service tak, aby po spuštění instance spustila tento skript.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Pomocí libovolného klienta FTP nahrajte ovladač JDBC, jboss-cli-commands.cli, startup_script.sh a definici modulu do umístění /site/deployments/tools/.

  6. Nakonfigurujte web tak, aby se při spuštění kontejneru spustil startup_script.sh . Na webu Azure Portal přejděte do části Obecné konfigurace > Nastavení > Spouštěcí příkaz. Nastavte pole spouštěcího příkazu na /home/site/deployments/tools/startup_script.sh a pak vyberte Uložit.

  7. Restartujte webovou aplikaci, což způsobí spuštění konfiguračního skriptu.

  8. Aktualizujte konfiguraci zdroje dat JTA pro vaši aplikaci. Otevřete soubor src/main/resources/META-INF/persistence.xml pro vaši aplikaci a najděte <jta-data-source> prvek. Následujícím způsobem nahraďte jeho obsah:

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

Sestavení aplikace

Sestavte aplikaci pomocí následujícího příkazu Mavenu.

mvn clean install -DskipTests

Nasazení aplikace

Pokud je vaše aplikace vytvořena ze souboru Maven POM, použijte k vytvoření webové aplikace a jejímu nasazení modul plug-in WebApp pro Maven. Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Javě ve službě Aplikace Azure Service.

K automatizaci nasazení aplikací JBoss EAP můžete použít úlohu Azure Pipelines pro webovou aplikaci nebo akci GitHubu pro nasazení do webové aplikace Azure.

Po migraci

Teď, když jste migrovali aplikaci do služby Aplikace Azure Service, byste měli ověřit, že funguje podle očekávání. Až to uděláte, máme pro vás několik doporučení, která vaší aplikaci dodají výraznější nativně cloudový charakter.

Doporučení