JBoss EAP-toepassingen migreren naar JBoss EAP op Azure App Service
In deze handleiding wordt beschreven waar u rekening mee moet houden wanneer u een bestaande JBoss EAP-toepassing wilt migreren om uit te voeren op JBoss EAP in een Azure-app Service-exemplaar.
Premigratie
Voltooi voordat u begint de evaluatie- en inventarisstappen die in de volgende secties worden beschreven om een geslaagde migratie te garanderen.
Servercapaciteit inventariseren
Documenteer de hardware (geheugen, CPU, schijf) van de huidige productieserver(s) en het gemiddelde en piekaantal aanvragen en het resourcegebruik. U hebt deze informatie nodig, welk migratiepad u ook kiest. Het is bijvoorbeeld handig bij het selecteren van de grootte van de VM's in uw knooppuntgroep, de hoeveelheid geheugen die door de container moet worden gebruikt en hoeveel CPU-shares de container nodig heeft.
Het is mogelijk om het formaat van knooppuntgroepen in AKS te wijzigen. Zie Het formaat van knooppuntgroepen wijzigen in Azure Kubernetes Service (AKS) voor meer informatie.
Alle geheimen inventariseren
Controleer alle eigenschaps- en configuratiebestanden op de productieserver(s) op geheimen en wachtwoorden. Controleer in elk geval jboss-web.xml in uw WAR's. Mogelijk bevinden zich ook in uw toepassing configuratiebestanden met wachtwoorden of referenties.
Overweeg deze geheimen op te slaan in Azure KeyVault. Zie Basisconcepten van Azure Key Vault voor meer informatie.
U kunt Key Vault-geheimen in uw App Service-exemplaar gebruiken met Key Vault-verwijzingen. Met Key Vault-verwijzingen kunt u de geheimen in uw toepassing gebruiken terwijl ze in rust worden beveiligd en versleuteld. Zie Key Vault-verwijzingen gebruiken voor App Service en Azure Functions voor meer informatie.
Alle certificaten inventariseren
Documenteer alle certificaten die worden gebruikt voor openbare SSL-eindpunten. U kunt alle certificaten op de productieserver(s) weergeven door de volgende opdracht uit te voeren:
keytool -list -v -keystore <path to keystore>
Controleren of de ondersteunde Java-versie goed werkt
JBoss EAP op Virtuele Azure-machines vereist een ondersteunde versie van Java. Zie Ondersteunde configuraties in de Red Hat-documentatie voor hulp bij welke versie van de JDK moet worden gebruikt.
Notitie
Deze validatie is vooral belangrijk als uw huidige server wordt uitgevoerd in een niet-ondersteunde JDK (zoals Oracle JDK of IBM OpenJ9).
Meld u aan bij uw productieserver en voer de volgende opdracht uit om uw huidige Java-versie te verkrijgen:
java -version
Externe resources inventariseren
Externe resources, zoals gegevensbronnen, JMS-berichtenbrokers en andere resources, worden ingevoerd via Java Naming and Directory Interface (JNDI). Voor sommige resources kan migratie of herconfiguratie vereist zijn.
Binnen uw toepassing
Inspecteer de WEB-INF-/jboss-web.xml - en/of WEB-INF-/web.xml-bestanden . Zoek naar <Resource>
-elementen in het <Context>
-element.
Gegevensbronnen
Gegevensbronnen zijn JNDI-resources waarvoor het kenmerk type
is ingesteld op javax.sql.DataSource
. Documenteer voor elke gegevensbron de volgende informatie:
- Wat is de naam van de gegevensbron?
- Wat is de configuratie van de verbindingsgroep?
- Waar vind ik het JAR-bestand van het JDBC-stuurprogramma?
Raadpleeg Over JBoss EAP-gegevensbronnen in de Jboss EAP-documentatie voor meer informatie.
Alle andere externe resources
Het is niet haalbaar om alle mogelijke externe afhankelijkheden in deze handleiding te documenteren. Het is de verantwoordelijkheid van uw team om alle externe afhankelijkheden van uw toepassing te verifiëren na de migratie.
Bepalen of sessiereplicatie wordt gebruikt
Als uw toepassing afhankelijk is van sessiereplicatie, moet u uw toepassing zo aanpassen dat deze afhankelijkheid niet meer bestaat. App Service staat niet toe dat exemplaren rechtstreeks met elkaar communiceren.
Nagaan of en hoe het bestandssysteem wordt gebruikt
Voor het gebruik van het bestandssysteem op de toepassingsserver is herconfiguratie vereist of zijn in zeldzame gevallen architectuurwijzigingen vereist. Het bestandssysteem kan worden gebruikt door JBoss EAP-modules of door uw toepassingscode. U kunt enkele of alle scenario's die in de volgende secties worden beschreven identificeren.
Statische alleen-lezeninhoud
Als uw toepassing momenteel met statische inhoud werkt, hebt u hiervoor een alternatieve locatie nodig. U kunt statische inhoud verplaatsen naar Azure Blob Storage en Azure CDN toevoegen voor razendsnelle downloads wereldwijd. Zie statische websitehosting in Azure Storage en quickstart: Een Azure-opslagaccount integreren met Azure CDN voor meer informatie.
Dynamisch gepubliceerde statische inhoud
Als uw toepassing statische inhoud toestaat die wordt geüpload/geproduceerd door uw toepassing, maar onveranderbaar is nadat deze is gemaakt, kunt u Azure Blob Storage en Azure CDN gebruiken zoals hierboven beschreven, met een Azure-functie om uploads en CDN-vernieuwing te verwerken. U vindt een voorbeeldimplementatie voor gebruik in Statische inhoud uploaden en via CDN vooraf laden met Azure Functions.
Dynamische of interne inhoud
Voor bestanden die vaak worden geschreven en gelezen door uw toepassing (zoals tijdelijke gegevensbestanden) of statische bestanden die alleen zichtbaar zijn voor uw toepassing, kunt u lokale bestandsopslag gebruiken die is gekoppeld aan uw App Service-plan. Zie De functionaliteit van het besturingssysteem voor Azure-app Service en inzicht in het bestandssysteem van de Azure-app Service voor meer informatie.
Bepalen of uw toepassing gebruikmaakt van geplande taken
Geplande taken, zoals Quartz Scheduler-taken of Unix Cron-taken, mogen niet worden gebruikt met Azure-app Service. Azure-app Service voorkomt niet dat u een toepassing met geplande taken intern implementeert. Als uw toepassing echter wordt uitgeschaald, kan dezelfde geplande taak meer dan één keer per geplande periode worden uitgevoerd. Deze situatie kan tot onbedoelde gevolgen leiden.
Inventariseer geplande taken die worden uitgevoerd op de productieserver(s), binnen of buiten de toepassingscode.
Bepalen of er een verbinding met on-premises services is vereist
Als voor uw toepassing toegang nodig is tot een van uw on-premises services, moet u een van de connectiviteitsservices van Azure inrichten. Zie Connect an on-premises network to Azure (Een on-premises netwerk verbinden met Azure) voor meer informatie. U moet uw toepassing ook herstructureren voor het gebruik van openbaar beschikbare API's in uw on-premises resources.
Bepalen of Java Message Service-wachtrijen (JMS) of -onderwerpen in gebruik zijn
Als uw toepassing JMS-wachtrijen of -onderwerpen gebruikt, moet u deze migreren naar een extern gehoste JMS-server. Azure Service Bus en het Advanced Message Queueing Protocol (AMQP) kunnen een uitstekende migratiestrategie zijn wanneer er gebruik wordt gemaakt van JMS. Zie Java Message Service 1.1 gebruiken met Azure Service Bus Standard en AMQP 1.0 voor meer informatie.
Als er met JMS permanente archieven zijn geconfigureerd, moet u de configuratie hiervan vastleggen en na de migratie toepassen.
Nagaan of andere JCA-connectors worden gebruikt
Als uw toepassing gebruikmaakt van JCA-connectors, controleert u of u de JCA-connector op JBoss EAP kunt gebruiken. Als u de JCA-connector op JBoss EAP kunt gebruiken, moet u de JAR's toevoegen aan het serverklassepad en de benodigde configuratiebestanden op de juiste locatie in de JBoss EAP-servermappen plaatsen.
Bepalen of JAAS wordt gebruikt
Als uw toepassing gebruikmaakt van JAAS, moet u vastleggen hoe JAAS is geconfigureerd. Als deze een database gebruikt, kunt u deze converteren naar een JAAS-domein op JBoss EAP. Als het een aangepaste implementatie is, moet u controleren of deze kan worden gebruikt in JBoss EAP.
Bepalen of uw toepassing gebruikmaakt van een resourceadapter
Als uw toepassing een resourceadapter (RA) nodig heeft, moet deze compatibel zijn met JBoss EAP. Bepaal of de RA prima werkt op een zelfstandig exemplaar van JBoss EAP door deze te implementeren op de server en deze correct te configureren. Als de RA goed werkt, moet u de JAR's toevoegen aan het serverklassepad van de App Service en de benodigde configuratiebestanden op de juiste locatie in de JBoss EAP-servermappen plaatsen zodat deze beschikbaar zijn.
Bepalen of uw toepassing bestaat uit meerdere WAR's
Als uw toepassing bestaat uit meerdere WAR's, moet u deze allemaal behandelen als afzonderlijke toepassingen en deze handleiding voor al deze WAR's doorlopen.
Bepalen of uw toepassing is verpakt als een EAR
Als uw toepassing is verpakt als een EAR-bestand, moet u het bestand application.xml controleren en de configuratie vastleggen.
Notitie
Als u elk van uw webtoepassingen onafhankelijk wilt kunnen schalen voor een beter gebruik van uw App Service-resources, moet u de EAR opsplitsen in afzonderlijke webtoepassingen.
Alle externe processen en daemons identificeren die worden uitgevoerd op de productieservers
U moet alle processen die buiten de toepassingsserver worden uitgevoerd, zoals controledaemons, verwijderen of naar een andere locatie migreren.
In-place tests uitvoeren
Voordat u uw containerinstallatiekopieën maakt, migreert u uw toepassing naar de JDK- en JBoss EAP-versies die u in App Service wilt gebruiken. Test de toepassing grondig op compatibiliteit en prestaties.
JBoss EAP in App Service-functienotities
Wanneer u JBoss EAP in App Service gebruikt, moet u rekening houden met de volgende notities.
JBoss EAP-beheerconsole: de JBoss-webconsole wordt niet weergegeven in App Service. In plaats daarvan biedt Azure Portal de beheer-API's voor uw toepassing en moet u implementeren met behulp van de Azure CLI, de Azure Maven-invoegtoepassing of andere Hulpprogramma's voor Azure-ontwikkelaars. Verdere configuratie van JBoss-resources kan worden bereikt met behulp van de JBoss CLI tijdens het opstarten van de toepassing.
Transacties: de Transacties-API wordt ondersteund en er is ondersteuning voor automatisch transactieherstel. Zie Transacties beheren op JBoss EAP in de Red Hat-documentatie voor meer informatie.
Beheerde domeinmodus: In een productieomgeving met meerdere servers biedt de modus Beheerd domein in JBoss EAP gecentraliseerde beheerde mogelijkheden. Met JBoss EAP in App Service neemt het App Service-platform echter de verantwoordelijkheid voor de configuratie en het beheer van uw serverexemplaren. App Service elimineert de noodzaak voor de beheerde domeinmodus van JBoss EAP. Domeinmodus is een goede keuze voor implementaties met meerdere servers op basis van virtuele machines. Zie Over beheerde domeinen in de Red Hat-documentatie voor meer informatie.
Server-naar-serverclustering: Vanaf 28 september 2023 is de geclusterde implementatie van JBoss EAP algemeen beschikbaar. Deze ondersteuning betekent dat u de volgende functies niet meer uit uw toepassingen hoeft te verwijderen voordat u ze in App Service kunt implementeren:
- Stateful sessiebonen.
- Gedistribueerde transacties.
- Vergelijkbare functies waarvoor communicatie tussen instanties of hoge beschikbaarheid is vereist.
Zie de releaseaankondiging en de sectie Clustering van Een Java-app configureren voor Azure-app Service voor meer informatie.
Migratie
Red Hat Migration Toolkit for Apps
De Red Hat Migration Toolkit for Applications is een gratis extensie voor Visual Studio Code. Deze extensie analyseert uw toepassingscode en configuratie om aanbevelingen te bieden voor migratie naar de cloud vanaf on-premises. Zie het overzicht van Migration Toolkit for Applications voor meer informatie.
De inhoud van deze handleiding helpt u bij het oplossen van de andere onderdelen van het migratietraject, zoals het kiezen van het juiste type App Service-plan, het externaliseren van uw sessiestatus en het gebruik van Azure om uw EAP-exemplaren te beheren in plaats van de JBoss Management-interface.
Azure-app Service inrichten voor JBoss EAP-runtime
Gebruik de volgende opdrachten om een resourcegroep en een Azure-app serviceplan te maken. Nadat het App Service-plan is gemaakt, wordt er een Linux-web-app-plan gemaakt met behulp van de JBoss EAP-runtime. U kunt JBoss EAP-sites alleen maken op PremiumV3- en IsolatedV2 App Service Plan-lagen.
Zorg ervoor dat de opgegeven omgevingsvariabelen de juiste waarden hebben.
Notitie
PremiumV3 en IsolatedV2 komen beide in aanmerking voor prijzen voor gereserveerde instanties, waardoor uw kosten kunnen worden verlaagd. Zie App Service-prijzen voor meer informatie over app Service-planlagen en prijzen voor gereserveerde instanties.
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
De toepassing bouwen
Bouw de toepassing met behulp van de volgende Maven-opdracht.
mvn clean install -DskipTests
De toepassing implementeren
Als uw toepassing is ontwikkeld op basis van een Maven POM-bestand, gebruikt u de web-app-invoegtoepassing voor Maven om de web-app te maken en uw toepassing te implementeren. Zie quickstart: Een Java-app maken in Azure-app Service voor meer informatie.
Als u de implementatie van JBoss EAP-toepassingen wilt automatiseren, kunt u de Azure Pipelines-taak voor web-app of GitHub Action gebruiken voor implementatie in Azure WebApp.
Gegevensbronnen instellen
Er zijn drie belangrijke stappen bij het registreren van een gegevensbron bij JBoss EAP: het JDBC-stuurprogramma uploaden, het JDBC-stuurprogramma toevoegen als een module en de module registreren. Zie Datasource Management in de JBoss EAP-documentatie voor meer informatie. App Service is een staatloze hostingservice, dus de configuratieopdrachten voor het toevoegen en registreren van de gegevensbronmodule moeten worden gescript en toegepast wanneer de container wordt gestart.
Gebruik de volgende stappen om gegevensbronnen in te stellen.
Haal het JDBC-stuurprogramma van uw database op.
Maak een XML-moduledefinitiebestand voor het JDBC-stuurprogramma. Het onderstaande voorbeeld is een moduledefinitie voor PostgreSQL. Vervang de
resource-root path
waarde door het pad naar het JDBC-stuurprogramma dat u gebruikt.<?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>
Plaats uw JBoss CLI-opdrachten in een bestand met de naam jboss-cli-commands.cli. De JBoss-opdrachten moeten de module toevoegen en registreren als gegevensbron. In het onderstaande voorbeeld ziet u de JBoss CLI-opdrachten voor PostgreSQL.
Notitie
Microsoft raadt aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, zoals voor databases, caches, berichten of AI-services, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen wanneer veiligere opties, zoals beheerde identiteiten voor wachtwoordloze of sleutelloze verbindingen, niet haalbaar zijn. Voor bewerkingen van lokale machines geeft u de voorkeur aan gebruikersidentiteiten voor verbindingen zonder wachtwoord of sleutelloze verbindingen.
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
Maak een opstartscript met de naam startup_script.sh waarmee de JBoss CLI-opdrachten worden aangeroepen. In het onderstaande voorbeeld ziet u hoe u het bestand jboss-cli-commands.cli aanroept. Later configureert u App Service om dit script uit te voeren wanneer het exemplaar wordt gestart.
$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
Upload met behulp van een FTP-client naar keuze uw JDBC-stuurprogramma, jboss-cli-commands.cli, startup_script.sh en de moduledefinitie naar /site/deployments/tools/.
Configureer uw site om startup_script.sh uit te voeren wanneer de container wordt gestart. Navigeer in Azure Portal naar de opstartopdracht Algemene instellingen > voor configuratie>. Stel het opstartopdrachtveld in op /home/site/deployments/tools/startup_script.sh en selecteer Opslaan.
Start de web-app opnieuw op, waardoor het configuratiescript wordt uitgevoerd.
Werk de JTA-gegevensbronconfiguratie voor uw toepassing bij. Open het bestand src/main/resources/META-INF/persistence.xml voor uw app en zoek het
<jta-data-source>
element. Vervang de inhoud zoals hier wordt weergegeven:<jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
De toepassing bouwen
Bouw de toepassing met behulp van de volgende Maven-opdracht.
mvn clean install -DskipTests
De toepassing implementeren
Als uw toepassing is ontwikkeld op basis van een Maven POM-bestand, gebruikt u de web-app-invoegtoepassing voor Maven om de web-app te maken en uw toepassing te implementeren. Zie quickstart: Een Java-app maken in Azure-app Service voor meer informatie.
Als u de implementatie van JBoss EAP-toepassingen wilt automatiseren, kunt u de Azure Pipelines-taak voor web-app of GitHub Action gebruiken voor implementatie in Azure WebApp.
Postmigratie
Nu u uw toepassing hebt gemigreerd naar Azure-app Service, moet u controleren of deze werkt zoals verwacht. Wanneer u dat gedaan hebt, hebben we enkele aanbevelingen voor u aan de hand waarvan u de toepassing geschikter kunt maken voor de cloud.
Aanbevelingen
Als u ervoor hebt gekozen om de /home directory voor bestandsopslag te gebruiken, kunt u overwegen deze te vervangen door Azure Storage. Zie Toegang tot Azure Storage als een netwerkshare vanuit een container in App Service voor meer informatie.
Als u configuratie hebt in de /home directory die verbindingsreeks s, SSL-sleutels en andere geheime informatie bevat, kunt u waar mogelijk Azure Key Vault en/of parameterinjectie gebruiken met toepassingsinstellingen. Zie Key Vault-verwijzingen gebruiken voor App Service en Azure Functions en een App Service-app configureren in Azure Portal voor meer informatie.
Overweeg implementatiesites te gebruiken voor betrouwbare implementaties zonder downtime. Zie Faseringsomgevingen in Azure App Service instellen voor meer informatie.
Ontwerp en implementeer een DevOps-strategie. Als u sneller wilt ontwikkelen zonder dat dit ten koste gaat van de betrouwbaarheid, kunt u het beste implementaties en testen automatiseren met Azure Pipelines. Zie Bouwen en implementeren in een Java-web-app voor meer informatie. Wanneer u implementatiesites gebruikt, kunt u de implementatie automatiseren naar een site gevolgd door de sitewisseling. Zie de sectie Implementeren naar een site van Een Azure-web-app (Linux) voor meer informatie.
Ontwerp en implementeer een strategie voor bedrijfscontinuïteit en herstel na noodgevallen. Voor bedrijfskritische toepassingen kunt u het beste een implementatiearchitectuur voor meerdere regio's gebruiken. Zie De webtoepassing Met hoge beschikbaarheid voor meerdere regio's voor meer informatie.