Migrera JBoss EAP-program till JBoss EAP på Azure App Service
Den här guiden beskriver vad du bör känna till när du vill migrera ett befintligt Red Hat JBoss Enterprise Application Platform (EAP) som ska köras på JBoss EAP i en Azure App Service-instans.
Förberedelser inför migrering
För att säkerställa en lyckad migrering slutför du de utvärderings- och inventeringssteg som beskrivs i följande avsnitt innan du börjar.
Lagerserverkapacitet
Dokumentera maskinvaran (minne, CPU, disk) för de aktuella produktionsservrarna och det genomsnittliga och högsta antalet begäranden och resursanvändningen. Du behöver denna information oavsett vilken migrerings väg du väljer. Det är till exempel användbart att hjälpa dig att välja storlek på de virtuella datorerna i nodpoolen, mängden minne som ska användas av containern och hur många CPU-resurser containern behöver.
Det går att ändra storlek på nodpooler i AKS. Mer information finns i Ändra storlek på nodpooler i Azure Kubernetes Service (AKS).
Inventera alla hemligheter
Kontrollera alla egenskaper och konfigurationsfiler på produktionsservrarna efter hemligheter och lösenord. Se till att kontrollera jboss-web.xml i WAR-filerna (Web Application Archive). Konfigurationsfiler som innehåller lösenord eller autentiseringsuppgifter finns också i ditt program.
Överväg att lagra dessa hemligheter i Azure KeyVault. Mer information finns i Grundläggande koncept för Azure Key Vault.
Du kan använda Key Vault-hemligheter i din App Service-instans med Key Vault-referenser. Med Key Vault-referenser kan du använda hemligheterna i ditt program samtidigt som de skyddas och krypteras i vila. Mer information finns i Använda Key Vault-referenser för App Service och Azure Functions.
Inventera alla certifikat
Dokumentera alla certifikat som används för offentliga SSL-slutpunkter. Du kan visa alla certifikat på produktionsservrarna genom att köra följande kommando:
keytool -list -v -keystore <path to keystore>
Validera att Java-versionen som stöds fungerar som den ska
JBoss EAP på App Service kräver en version av Java som stöds. Vägledning om vilken version av Java Development Kit (JDK) som ska användas finns i Konfigurationer som stöds i Red Hat-dokumentationen.
Kommentar
Den här verifieringen är särskilt viktig om den aktuella servern körs på en JDK som inte stöds (till exempel Oracle JDK eller IBM OpenJ9).
Du får den aktuella Java-versionen genom att logga in på din produktionsserver och köra följande kommando:
java -version
Inventera externa resurser
Externa resurser, till exempel datakällor, JMS-meddelandeköer (Java Message Service) och andra matas in via Java Naming and Directory Interface (JNDI). Vissa sådana resurser kan kräva migrering eller omkonfiguration.
I ditt program
Kontrollera filerna WEB-INF/jboss-web.xml och/eller WEB-INF/web.xml. Leta efter <Resource>
-element i <Context>
-elementet.
Datakällor
Datakällor är JNDI-resurser med attributet type
inställt på javax.sql.DataSource
. För varje datakälla, dokumenterar du följande information:
- Vad heter datakällan?
- Vad är konfigurationen för anslutningspoolen?
- Var hittar jag JAR-filen för Java Database Connectivity(JDBC)-drivrutinen?
Mer information finns i Om JBoss Enterprise Application Platform (EAP) datakällor i JBoss EAP-dokumentationen.
Alla andra externa resurser
Det är inte möjligt att dokumentera alla möjliga externa beroenden i den här guiden. Det är ditt lags ansvar att kontrollera att ni kan uppfylla varje externt beroende för ert program efter migreringen.
Kontrollera om och hur filsystemet används
All användning av filsystemet på programservern kräver omkonfiguration eller i sällsynta fall arkitektoniska ändringar. JBoss EAP-moduler eller programkoden kan använda filsystemet. Du kan identifiera vissa eller alla scenarier som beskrivs i följande avsnitt.
Skrivskyddat statiskt innehåll
Om ditt program för närvarande hanterar statiskt innehåll behöver du en alternativ plats för det. Du bör överväga att flytta statiskt innehåll till Azure Blob Storage och lägga till Azure Front Door för snabba nedladdningar globalt. Mer information finns i värd för statisk webbplats i Azure Storage och integrera ett Azure Storage-konto med Azure Front Door.
Dynamiskt eller internt innehåll
För filer som ofta skrivs och läses av ditt program (till exempel temporära datafiler) eller statiska filer som endast är synliga för ditt program kan du använda lokal fillagring som är associerad med apptjänstplanen. Mer information finns i Operativsystemfunktioner i Azure App Service och Förstå Azure App Service-filsystemet.
Avgör om din applikation är beroende av schemalagda uppgifter
Schemalagda jobb, till exempel Quartz Scheduler-uppgifter eller Unix cron-jobb, ska INTE användas med Azure App Service. Azure App Service hindrar dig inte från att distribuera ett program som innehåller schemalagda uppgifter internt. Om ditt program skalas ut kan dock samma schemalagda jobb köras mer än en gång per schemalagd period. Den här situationen kan leda till oönskade konsekvenser.
Inventera schemalagda aktiviteter som körs på produktionsservrarna, i eller utanför programkoden.
Avgör om en anslutning till på plats behövs
Om ditt program behöver har åtkomst till någon av dina lokala tjänster måste du etablera en av Azures anslutningstjänster. Mer information finns i Ansluta ett lokalt nätverk till Azure. Alternativt måste du omstrukturera programmet för att använda allmänt tillgängliga API:er som dina lokala resurser exponerar.
Ta reda på om JMS-köer eller -ämnen (Java Message Service) används
Om ditt program använder JMS-köer eller -ämnen måste du migrera dem till en extern JMS-server. Azure Service Bus och AMQP (Advanced Message Queueing Protocol) kan vara en bra migreringsstrategi för de som använder JMS. Mer information finns i Använda Java Message Service 1.1 med Azure Service Bus Standard och AMQP 1.0.
Om JMS beständiga lagringar har konfigurerats, måste du säkerställa deras konfiguration och tillämpa den efter migrationen.
Kontrollera om JCA-kopplingar används
Om ditt program använder JCA-anslutningsappar (Java Connector Architecture) kontrollerar du att du kan använda JCA-anslutningsappen på JBoss EAP. Om du kan använda JCA-anslutningsappen på JBoss EAP måste du lägga till JAVA-arkivfilerna (JAR) i serverklasssökvägen och placera de nödvändiga konfigurationsfilerna på rätt plats i JBoss EAP-serverkatalogerna.
Ta reda på om JAAS används
Om ditt program använder JAAS måste du avbilda hur JAAS har konfigurerats. Om den använder en databas kan du konvertera den till en JAAS-domän på JBoss EAP. Om det är en anpassad implementering måste du verifiera att den kan användas på JBoss EAP.
Ta reda på om din applikation använder en resursadapter
Om ditt program behöver en resursadapter (RA) måste det vara kompatibelt med JBoss EAP. Kontrollera om RA fungerar bra på en fristående instans av JBoss EAP genom att distribuera den till servern och konfigurera den korrekt. Om RA fungerar korrekt måste du lägga till JAR:erna i apptjänstens serverklasssökväg och placera de nödvändiga konfigurationsfilerna på rätt plats i JBoss EAP-serverkatalogerna för att den ska vara tillgänglig.
Ta reda på om ditt program består av flera WAR
Om ditt program består av flera WAS så ska du behandla vart och ett av dem som separarata program och gå igenom den här guiden för varje.
Ta reda på om ditt program är paketerat som EAR
Om ditt program är paketerat som en EAR-fil kontrollerar du filen application.xml och avbildar konfigurationen.
Kommentar
Om du vill kunna skala var och en av dina webbprogram oberoende av varandra för bättre användning av dina App Service-resurser bör du dela upp EAR i separata webbprogram.
Identifiera alla externa processer och daemons som körs på produktionsservrarna
Om du har processer som körs utanför programservern, som övervaknings-daemons så behöver du eliminera dem eller migrera dem någon annanstans.
Utför testning på plats
Innan du skapar dina webbappar migrerar du programmet till de JDK- och JBoss EAP-versioner som du tänker använda i App Service. Testa programmet noggrant för att säkerställa kompatibilitet och prestanda.
JBoss EAP på App Service-funktionsanteckningar
När du använder JBoss EAP i App Service bör du tänka på följande.
JBoss EAP-hanteringskonsol: JBoss-webbkonsolen exponeras inte i App Service. I stället tillhandahåller Azure Portal hanterings-API:er för ditt program och du bör distribuera med hjälp av Azure CLI, Azure Maven-plugin-programmet eller andra Azure-utvecklarverktyg. Ytterligare konfiguration av JBoss-resurser kan uppnås med hjälp av JBoss CLI under programstarten.
Transaktioner: Transaktions-API:et stöds och det finns stöd för automatisk transaktionsåterställning. Mer information finns i Hantera transaktioner på JBoss EAP i Red Hat-dokumentationen.
Hanterat domänläge: I en produktionsmiljö med flera servrar erbjuder läget Hanterad domän i JBoss EAP centraliserade hanterade funktioner. Men med JBoss EAP på App Service tar App Service-plattformen på sig ansvaret för konfiguration och hantering av dina serverinstanser. App Service eliminerar behovet av JBoss EAP:s hanterade domänläge. Domänläge är ett bra val för virtuella datorbaserade distributioner med flera servrar. Mer information finns i Om hanterade domäner i Red Hat-dokumentationen.
Klustring mellan servrar: App Service stöder fullt ut JBoss EAP-klustrade distributioner. Det innebär att du kan använda:
- Tillståndskänsliga sessionsbönor.
- Distribuerade transaktioner.
- Liknande funktioner som kräver instans-till-instans-kommunikation eller hög tillgänglighet.
Mer information finns i avsnittet Clustering i Configure a Java app for Azure App Service.
Migrering
Red Hat Migration Toolkit för appar
Red Hat Migration Toolkit for Applications är ett kostnadsfritt tillägg för Visual Studio Code. Det här tillägget analyserar programkoden och konfigurationen för att ge rekommendationer för migrering till molnet från en lokal plats. Mer information finns i Översikt över Migreringsverktyg för program.
Innehållet i den här guiden hjälper dig att hantera de andra komponenterna i migreringsresan, till exempel att välja rätt Typ av App Service-plan, externalisera sessionstillståndet och använda Azure för att hantera dina EAP-instanser i stället för JBoss-hanteringsgränssnittet.
Etablera Azure App Service för JBoss EAP-körning
Använd följande kommandon för att skapa en resursgrupp och en Azure App Service-plan. När App Service-planen har skapats skapas en Linux-webbappplan med JBoss Enterprise Application Platform (EAP)-körningen.
Kontrollera att de angivna miljövariablerna har lämpliga värden.
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
Skapa programmet
Skapa programmet med hjälp av följande Maven-kommando.
mvn clean install -DskipTests
Distribuera programmet
Om programmet har skapats från en Maven POM-fil, så skapa webbappen och distribuera ditt program genom att använda webbapps-plugin-programmet för Maven. Mer information finns i Snabbstart: Skapa en Java-app i Azure App Service.
Om du vill automatisera distributionen av JBoss EAP-program kan du använda Azure Pipelines-uppgiften för Web App eller GitHub Action för att distribuera till Azure WebApp.
Konfigurera datakällor
Det finns tre grundläggande steg när du registrerar en datakälla med JBoss Enterprise Application Platform (EAP): ladda upp JDBC-drivrutinen (Java Database Connectivity), lägga till JDBC-drivrutinen som en modul och registrera modulen. Mer information finns i Datasource Management i JBoss EAP-dokumentationen. App Service är en tillståndslös värdtjänst, så konfigurationskommandona för att lägga till och registrera datakällmodulen måste skriptas och tillämpas när containern startar.
Använd följande steg för att konfigurera datakällor.
Hämta databasens JDBC-drivrutin.
Skapa en XML-moduldefinitionsfil för JDBC-drivrutinen. Exemplet som visas är en moduldefinition för PostgreSQL. Ersätt
resource-root path
värdet med sökvägen till den JDBC-drivrutin som du använder.<?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>
Placera dina JBoss CLI-kommandon i en fil med namnet jboss-cli-commands.cli. JBoss-kommandona måste lägga till modulen och registrera den som en datakälla. Exemplet visar JBoss CLI-kommandona för PostgreSQL.
Kommentar
Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Det autentiseringsflöde som beskrivs i den här proceduren, till exempel för databaser, cacheminnen, meddelanden eller AI-tjänster, kräver en mycket hög grad av förtroende för programmet och medför risker som inte finns i andra flöden. Använd endast det här flödet när säkrare alternativ, till exempel hanterade identiteter för lösenordslösa eller nyckellösa anslutningar, inte är genomförbara. För lokala datoråtgärder föredrar du användaridentiteter för lösenordslösa eller nyckellösa anslutningar.
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
Skapa ett startskript med namnet startup_script.sh som anropar JBoss CLI-kommandona. Exemplet visar hur du anropar filen jboss-cli-commands.cli. Senare konfigurerar du App Service för att köra det här skriptet när instansen startar.
$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
Med valfri FTP-klient laddar du upp JDBC-drivrutinen, jboss-cli-commands.cli, startup_script.sh och moduldefinitionen till /site/deployments/tools/.
Konfigurera webbplatsen så att den körs startup_script.sh när containern startar. I Azure-portalen navigerar du till Konfiguration > Allmänna inställningar > Startkommando. Ange startkommandofältet till /home/site/deployments/tools/startup_script.sh och välj sedan Spara.
Starta om webbappen, vilket gör att den kör konfigurationsskriptet.
Uppdatera JTA-datakällans konfiguration (Java Transaction API) för ditt program. Öppna filen src/main/resources/META-INF/persistence.xml för din app och leta reda på elementet
<jta-data-source>
. Ersätt innehållet enligt följande:<jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
Skapa programmet
Skapa programmet med hjälp av följande Maven-kommando.
mvn clean install -DskipTests
Distribuera programmet
Om programmet har skapats från en Maven POM-fil, så skapa webbappen och distribuera ditt program genom att använda webbapps-plugin-programmet för Maven. Mer information finns i Snabbstart: Skapa en Java-app i Azure App Service.
Om du vill automatisera distributionen av JBoss EAP-program kan du använda Azure Pipelines-uppgiften för Web App eller GitHub Action för att distribuera till Azure WebApp.
Efter migreringen
Nu när du har migrerat ditt program till Azure App Service bör du kontrollera att det fungerar som förväntat. När du har gjort det har vi några rekommendationer för dig som kan göra ditt program mer molnbaserat.
Rekommendationer
Om du valde att använda katalogen /home för fillagring, bör du överväga att ersätta den med Azure-lagring. Mer information finns i Åtkomst till Azure Storage som en nätverksresurs från en container i App Service.
Om du har konfiguration i katalogen /home som innehåller anslutningssträng, SSL-nycklar och annan hemlig information kan du överväga att använda Azure Key Vault och/eller parameterinmatning med programinställningar där det är möjligt. Mer information finns i Använda Key Vault-referenser för App Service och Azure Functions och Konfigurera en App Service-app i Azure Portal.
Överväg att använda distributionsplatser för tillförlitliga distributioner utan driftstopp. Mer information finns i Konfigurera mellanlagringsmiljöer i Azure App Service.
Utforma och implementera en DevOps-strategi. För att bibehålla tillförlitligheten samtidigt som du ökar din utvecklingshastighet bör du överväga att automatisera distributioner och testning med Azure-pipelines. Mer information finns i Skapa och distribuera till en Java-webbapp. När du använder distributionsfack kan du automatisera distributionen till ett fack följt av fackbytet. Mer information finns i avsnittet Distribuera till ett fack i Distribuera en Azure Web App (Linux).
Utforma och implementera en strategi för affärskontinuitet och haveriberedskap. För verksamhetskritiska program bör du överväga en distributionsarkitektur för flera regioner. Mer information finns i Webbprogram för flera regioner med hög tillgänglighet.