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 JBoss EAP-program som ska köras på JBoss EAP i en Azure App Service-instans.
Före 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. Kontrollera jboss-web.xml bland dina WAR-filer. Konfigurationsfiler som innehåller lösenord eller autentiseringsuppgifter kan också finnas 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å virtuella Azure-datorer kräver en version av Java som stöds. Vägledning om vilken version av 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 som datakällor, JMS asynkron meddelandekö och andra matas via Java-namngivnings- och kataloggränssnittet (JNDI). Vissa resurser kan kräva migrering eller omkonfiguration.
I ditt program
Granska 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:
- What is the datakällans namn?
- Vad är konfigurationen för anslutningspoolen?
- Var hittar jag JAR-filen för JDBC-drivrutinen?
Mer information finns i Om JBoss EAP-datakällor i dokumentationen till JBoss EAP.
Alla andra externa resurser
Det är inte möjligt att dokumentera alla möjliga externa beroenden i den här guiden. Det är ditt teams ansvar att kontrollera att du kan uppfylla varje externt beroende för ditt program efter migreringen.
Fastställ om sessionsreplikering används
Om ditt program använder sig av sessionsreplikering måste du ändra programmet och ta bort det här beroendet. App Service tillåter inte att instanser kommunicerar direkt med varandra.
Kontrollera om och hur filsystemet används
All användning av programserverns filsystem kräver omkonfiguration eller, i sällsynta fall, arkitektoniska ändringar. Filsystemet kan användas av JBoss EAP-moduler eller av programkoden. Du kanske identifierar några eller alla scenarier som beskrivs i följande avsnitt.
Skrivskyddat statiskt innehåll
Om ditt program för tillfället hanterar statiskt innehåll behöver du en alternativ plats för det. Du kanske kan tänka dig att flytta det statiska innehållet till Azure Blob Storage och lägga till Azure CDN för blixtsnabba nedladdningar globalt. Mer information finns i Värd för statiska webbplatser i Azure Storage och snabbstart: Integrera ett Azure Storage-konto med Azure CDN.
Dynamiskt publicerat statiskt innehåll
Om ditt program tillåter att statiskt innehåll laddas upp/skapas av ditt program, men inte kan ändras efter att det har skapats, så kan du använda Azure Blob Storage och Azure CDN enligt beskrivningen ovan, med en Azure-funktion för hantering av överföringar och CDN-uppdateringar. Vi har tillhandahållit en exempelimplementering som du kan använda i Överföra och CDN-för inläsa statiskt innehåll med Azure Functions.
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.
Ta reda på om programmet är beroende av schemalagda jobb
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 lokalt 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 arkiv har konfigurerats måste du avbilda konfigurationen och tillämpa den efter migreringen.
Kontrollera om JCA-anslutningsprogram används
Om ditt program använder JCA-anslutningsappar 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 JAR:erna 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 redan på om programmet använder en resursadapter
Om ditt program behöver ett resurskort (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 containeravbildningar 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.
Server-till-server-kluster: Från och med den 28 september 2023 är klustrad distribution av JBoss EAP allmänt tillgänglig. Det här stödet innebär att du inte längre behöver ta bort följande funktioner från dina program innan du kan distribuera dem till App Service:
- 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 versionsmeddelandet och avsnittet Klustring i Konfigurera en Java-app för 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 App Service-plantyp, 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 EAP-körningen. Du kan bara skapa JBoss EAP-webbplatser på PremiumV3- och IsolatedV2 App Service-plannivåer.
Kontrollera att de angivna miljövariablerna har lämpliga värden.
Kommentar
Både PremiumV3 och IsolatedV2 är berättigade till priser för reserverad instans, vilket kan minska dina kostnader. Mer information om apptjänstplannivåer och priser för reserverade instanser finns i Priser för 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
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 EAP: ladda upp JDBC-drivrutinen, 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 nedan ä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 nedan 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 nedan 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 Portal går du till Startkommando för konfiguration > av allmänna inställningar>. 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 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 som hjälper dig att göra programmet mer molnanpassat.
Rekommendationer
Om du valde att använda katalogen /home för fillagring bör du överväga att ersätta den med Azure Storage. 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.