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.
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.
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 věnovaném 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 Použití služby Java Message Service 1.1 se standardem služby Azure Service Bus a 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. Další konfiguraci prostředků JBoss je možné dosáhnout pomocí rozhraní příkazového řádku JBoss během spuštění aplikace.
Transakce: Rozhraní API transakcí je podporováno a podporuje automatické obnovení transakcí. 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 28. září 2023 je clusterové nasazení JBoss EAP obecně dostupné. 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 v části Clustering v čá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.
Získejte ovladač JDBC databáze.
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>
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.
Poznámka:
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto postupu, například pro databáze, mezipaměti, zasílání zpráv nebo služby AI, vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok používejte pouze v případě, že nejsou možné zabezpečit možnosti, jako jsou spravované identity pro připojení bez hesla nebo bez klíčů. V případě místních operací počítačů upřednostňujete identity uživatelů pro připojení bez hesla nebo bez klíčů.
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
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
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/.
Nakonfigurujte web tak, aby se při spuštění kontejneru spustil startup_script.sh . Na webu Azure Portal přejděte do spouštěcího příkazu Obecné nastavení > konfigurace>. Nastavte pole spouštěcího příkazu na /home/site/deployments/tools/startup_script.sh a pak vyberte Uložit.
Restartujte webovou aplikaci, což způsobí spuštění konfiguračního skriptu.
Aktualizujte konfiguraci zdroje dat JTA pro vaši aplikaci. Otevřete soubor src/main/resources/META-INF/persistence.xml vaší aplikace 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í
Pokud jste se rozhodli použít adresář /home pro úložiště souborů, zvažte jeho nahrazení službou Azure Storage. Další informace najdete v tématu Přístup ke službě Azure Storage jako sdílené síťové složky z kontejneru ve službě App Service.
Pokud máte konfiguraci v adresáři /home, který obsahuje připojovací řetězec, klíče SSL a další tajné informace, zvažte použití služby Azure Key Vault a/nebo injektáž parametrů s nastavením aplikace, pokud je to možné. Další informace najdete v tématu Použití odkazů služby Key Vault pro App Service a Azure Functions a konfiguraci aplikace App Service na webu Azure Portal.
Zvažte použití slotů nasazení pro spolehlivá nasazení s nulovým výpadkem. Další informace najdete v článku Nastavení přípravných prostředí ve službě Azure App Service.
Navrhněte a implementujte strategii DevOps. Pokud chcete zachovat spolehlivost a zároveň zvýšit rychlost vývoje, uvažujte o automatizaci nasazení a testování pomocí Azure Pipelines. Další informace najdete v tématu Sestavení a nasazení do webové aplikace v Javě. Při použití slotů nasazení můžete automatizovat nasazení do slotu následovaného prohozením slotů. Další informace najdete v části Nasazení do slotu nasazení webové aplikace Azure (Linux).
Navrhněte a implementujte strategii provozní kontinuity a zotavení po havárii. U nepostradatelných aplikací zvažte architekturu nasazení ve více oblastech. Další informace naleznete v tématu Vysoce dostupná webová aplikace pro více oblastí.