Freigeben über


Migrieren von JBoss EAP-Anwendungen zu JBoss EAP unter Azure App Service

In diesem Handbuch wird beschrieben, was Sie beachten sollten, wenn Sie eine vorhandene Red Hat JBoss Enterprise Application Platform (EAP)-Anwendung migrieren möchten, die auf JBoss EAP in einer Azure App Service-Instanz ausgeführt werden soll.

Vor der Migration

Führen Sie vor Beginn einer Migration die in den folgenden Abschnitten beschriebenen Schritte zur Bewertung und Bestandsermittlung aus, um eine erfolgreiche Migration zu gewährleisten.

Inventarisieren der Serverkapazität

Dokumentieren Sie die Hardware (Arbeitsspeicher, CPU, Datenträger) der aktuellen Produktionsserver und die durchschnittliche und maximale Anzahl von Anforderungen und die Ressourcennutzung. Sie benötigen diese Informationen unabhängig vom gewählten Migrationspfad. Dies ist beispielsweise hilfreich bei der Auswahl der Größe der VMs in Ihrem Knotenpool, der Speichermenge, die vom Container verwendet wird, und der Anzahl der CPU-Anteile, die der Container benötigt.

Es ist möglich, die Größe von Knotenpools in AKS zu ändern. Weitere Informationen finden Sie unter Ändern der Größe von Knotenpools in Azure Kubernetes Service (AKS).

Alle Geheimnisse inventarisieren

Überprüfen Sie alle Eigenschaften und Konfigurationsdateien auf den Produktionsservern auf geheime Schlüssel und Kennwörter. Überprüfen Sie unbedingt jboss-web.xml in Ihren Web Application Archive (WAR)-Dateien. Konfigurationsdateien, die Kennwörter oder Anmeldeinformationen enthalten, finden Sie auch in Ihrer Anwendung.

Es empfiehlt sich gegebenenfalls, diese Geheimnisse in Azure Key Vault zu speichern. Weitere Informationen finden Sie unter Grundlegende Konzepte von Azure Key Vault.

Sie können Key Vault-Geheimnisse auf Ihrer App Service-Instanz mit Key Vault-Verweisen nutzen. Mit Key Vault-Verweisen können Sie die Geheimnisse in Ihrer Anwendung verwenden, während sie im ruhenden Zustand geschützt und verschlüsselt sind. Weitere Informationen erhalten Sie unter Verwenden von Key Vault-Verweisen in App Service und Azure Functions.

Inventarisieren aller Zertifikate

Dokumentieren Sie alle Zertifikate, die für öffentliche SSL-Endpunkte verwendet werden. Sie können alle Zertifikate auf den Produktionsservern anzeigen, indem Sie den folgenden Befehl ausführen:

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

Überprüfen, ob die unterstützte Java-Version richtig funktioniert

JBoss EAP für App Service erfordert eine unterstützte Version von Java. Anleitungen dazu, welche Version des Java Development Kit (JDK) verwendet werden soll, finden Sie in der Red Hat-Dokumentation unterstützte Konfigurationen.

Hinweis

Diese Überprüfung ist besonders wichtig, wenn Ihr aktueller Server auf einem nicht unterstützten JDK (z. B. Oracle JDK oder IBM OpenJ9) ausgeführt wird.

Melden Sie sich an Ihrem Produktionsserver an, und führen Sie den folgenden Befehl aus, um Ihre aktuelle Java-Version zu ermitteln:

java -version

Externe Ressourcen inventarisieren

Externe Ressourcen wie Datenquellen, JMS-Nachrichtenbroker (Java Message Service) und andere werden über Java Naming and Directory Interface (JNDI) eingefügt. Einige dieser Ressourcen können eine Migration oder Neukonfiguration erfordern.

Innerhalb Ihrer Anwendung

Untersuchen Sie die Datei WEB-INF/jboss-web.xml und/oder WEB-INF/web.xml. Suchen Sie im <Resource>-Element nach <Context>-Elementen.

Datenquellen

Datenquellen sind JNDI-Ressourcen, für die das type-Attribut auf javax.sql.DataSource festgelegt ist. Dokumentieren Sie für jede Datenquelle die folgenden Informationen:

  • Wie lautet der Name der Datenquelle?
  • Wie ist der Verbindungspool konfiguriert?
  • Wo finde ich die Java Database Connectivity (JDBC)-Treiber-JAR-Datei?

Weitere Informationen finden Sie unter About JBoss Enterprise Application Platform (EAP) Datasources in der JBoss EAP-Dokumentation.

Alle anderen externen Ressourcen

Es würde den Rahmen dieses Leitfadens sprengen, jede mögliche externe Abhängigkeit zu dokumentieren. Ihr Team ist dafür verantwortlich, zu überprüfen, dass nach der Migration die Anforderungen aller externen Abhängigkeiten Ihrer Anwendung abgedeckt werden können.

Ermitteln, ob und wie das Dateisystem verwendet wird

Für jegliche Nutzung des Dateisystems auf dem Anwendungsserver sind erneute Konfigurationen oder in selteneren Fällen auch Architekturänderungen erforderlich. JBoss EAP-Module oder Ihr Anwendungscode können das Dateisystem verwenden. Sie können einige oder alle szenarien identifizieren, die in den folgenden Abschnitten beschrieben sind.

Schreibgeschützter statischer Inhalt

Wenn Ihre Anwendung derzeit statische Inhalte liefert, benötigen Sie einen alternativen Speicherort dafür. Sie sollten in Erwägung ziehen, statische Inhalte in Azure Blob Storage zu verschieben und Azure Front Door für schnelle Downloads global hinzuzufügen. Weitere Informationen finden Sie unter Statisches Websitehosting in Azure Storage und Integrieren eines Azure Storage-Kontos in azure Front Door.

Dynamischer oder interner Inhalt

Für Dateien, für die von Ihrer Anwendung häufige Schreib- und Lesevorgänge durchgeführt werden (z. B. temporäre Datendateien), oder für statische Dateien, die nur für Ihre Anwendung sichtbar sind, können Sie lokalen Dateispeicher nutzen, der Ihrem App Service-Plan zugeordnet ist. Weitere Informationen finden Sie unter Betriebssystemfunktionen für Azure App Service und Grundlegendes zum Azure App Service-Dateisystem.

Ermitteln, ob für Ihre Anwendung geplante Aufträge benötigt werden

Für Azure App Service sollten geplante Aufträge, z. B. Quartz Scheduler-Aufgaben oder Unix-Cron-Aufträge, NICHT verwendet werden. Azure App Service hindert Sie nicht an der Bereitstellung einer Anwendung, die intern geplante Aufgaben enthält. Wenn Ihre Anwendung jedoch skaliert wird, kann derselbe geplante Auftrag unter Umständen mehrmals pro geplantem Zeitraum ausgeführt werden. Diese Situation kann unerwünschte Konsequenzen haben.

Inventarisieren Sie alle geplanten Aufgaben, die auf Produktionsservern ausgeführt werden, innerhalb oder außerhalb Ihres Anwendungscodes.

Ermitteln, ob eine Verbindung mit der lokalen Umgebung erforderlich ist

Wenn Ihre Anwendung auf Ihre lokalen Dienste zugreifen muss, müssen Sie einen der Konnektivitätsdienste von Azure bereitstellen. Weitere Informationen finden Sie unter Herstellen einer Verbindung zwischen einem lokalen Netzwerk und Azure. Alternativ müssen Sie Ihre Anwendung so umgestalten, dass öffentlich zugängliche APIs genutzt werden, die von Ihren lokalen Ressourcen verfügbar gemacht werden.

Ermitteln, ob JMS-Warteschlangen oder -Themen (Java Message Service) verwendet werden

Wenn Ihre Anwendung JMS-Warteschlangen oder -Themen nutzt, müssen diese zu einem extern gehosteten JMS-Server migriert werden. Azure Service Bus und das Advanced Message Queuing Protocol (AMQP) können bei Verwendung von JMS eine hervorragende Migrationsstrategie sein. Weitere Informationen finden Sie unter Verwenden von Java Message Service 1.1 mit Azure Service Bus Standard und AMQP 1.0.

Wenn beständige JMS-Speicher konfiguriert wurden, müssen Sie die zugehörige Konfiguration erfassen und nach dem Migrationsvorgang anwenden.

Ermitteln, ob JCA-Connectors genutzt werden

Wenn Ihre Anwendung JCA-Connectors (Java Connector Architecture) verwendet, überprüfen Sie, ob Sie den JCA-Connector auf JBoss EAP verwenden können. Wenn Sie den JCA-Connector auf JBoss EAP verwenden können möchten, müssen Sie die Java-Archivdateien (JAR) dem Serverklassenpfad hinzufügen, damit er verfügbar ist, und die erforderlichen Konfigurationsdateien am richtigen Ort in den JBoss EAP-Serververzeichnissen ablegen.

Ermitteln, ob JAAS verwendet wird

Wenn für Ihre Anwendung JAAS verwendet wird, müssen Sie erfassen, wie JAAS konfiguriert wird. Sofern hierfür eine Datenbank verwendet wird, können Sie sie in eine JAAS-Domäne unter JBoss EAP konvertieren. Falls es sich um eine benutzerdefinierte Implementierung handelt, müssen Sie überprüfen, ob sie unter JBoss EAP verwendet werden kann.

Ermitteln, ob Ihre Anwendung einen Ressourcenadapter verwendet

Wenn für Ihre Anwendung ein Ressourcenadapter (RA) benötigt wird, muss dieser mit JBoss EAP kompatibel sein. Ermitteln Sie, ob der RA für eine eigenständige Instanz von JBoss EAP richtig funktioniert, indem Sie ihn auf dem Server bereitstellen und entsprechend konfigurieren. Falls der RA richtig funktioniert, müssen Sie die JARs dem Serverklassenpfad der App Service-Instanz hinzufügen und die erforderlichen Konfigurationsdateien in den JBoss EAP-Serververzeichnissen ablegen, um die Verfügbarkeit sicherzustellen.

Ermitteln, ob Ihre Anwendung aus mehreren WAR-Dateien besteht

Besteht Ihre Anwendung aus mehreren WAR-Dateien, sollten Sie die einzelnen WAR-Dateien als separate Anwendungen behandeln und für jede Datei diese Anleitung ausführen.

Ermitteln, ob Ihre Anwendung als EAR-Datei gepackt ist

Ist Ihre Anwendung als EAR-Datei gepackt, untersuchen Sie die Datei application.xml, und erfassen Sie die Konfiguration.

Hinweis

Wenn Sie in der Lage sein möchten, jede Ihrer Webanwendungen unabhängig voneinander zu skalieren, um Ihre App Service-Ressourcen besser zu nutzen, sollten Sie das EAR in separate Webanwendungen aufteilen.

Ermitteln aller externen Prozesse und Daemons, die auf den Produktionsservern ausgeführt werden

Werden einige Ihrer Prozesse außerhalb des Anwendungsservers ausgeführt (z. B. die Überwachung von Daemons), müssen Sie sie beseitigen oder zu einem anderen Ort migrieren.

Durchführung von Vor-Ort-Tests

Bevor Sie Ihre Web-Apps erstellen, migrieren Sie Ihre Anwendung zu den JDK- und JBoss-EAP-Versionen, die Sie für App Service verwenden möchten. Führen Sie für die Anwendung gründliche Tests durch, um die Kompatibilität und Leistung sicherzustellen.

JBoss EAP in App Service: Hinweise zu Features

Beachten Sie bei Verwendung von JBoss EAP in App Service unbedingt die folgenden Hinweise.

  • JBoss EAP-Verwaltungskonsole: Die JBoss-Webkonsole wird in App Service nicht verfügbar gemacht. Stattdessen werden die Verwaltungs-APIs für Ihre Anwendung über das Azure-Portal bereitgestellt, und Sie sollten für die Bereitstellung die Azure CLI, das Azure Maven-Plug-In oder andere Azure-Entwicklungstools verwenden. Eine weitere Konfiguration von JBoss-Ressourcen kann mithilfe der JBoss CLI während des Anwendungsstarts erreicht werden.

  • Transaktionen: Die Transaktions-API wird unterstützt, und es gibt Unterstützung für die automatische Transaktionswiederherstellung. Weitere Informationen finden Sie in der Red Hat-Dokumentation unter Verwalten von Transaktionen unter JBoss EAP.

  • Modus „Verwaltete Domänen“: In einer Produktionsumgebung mit mehreren Servern werden im Modus „Verwaltete Domänen“ in JBoss EAP zentralisierte verwaltete Funktionen bereitgestellt. Bei Verwendung von JBoss EAP in App Service übernimmt aber die App Service-Plattform die Zuständigkeit für die Konfiguration und Verwaltung Ihrer Serverinstanzen. App Service macht den verwalteten Domänen-Modus von JBoss EAP überflüssig. Der Domänenmodus ist eine gute Wahl für VM-basierte Bereitstellungen mit mehreren Servern. Weitere Informationen finden Sie in der Red Hat-Dokumentation unter Informationen zu verwalteten Domänen.

  • Server-zu-Server-Clustering-: App Service unterstützt JBoss EAP-Clusterbereitstellungen vollständig. Dies bedeutet, dass Sie folgendes sicher verwenden können:

    • Statusbasierte Session Beans.
    • Verteilte Transaktionen.
    • Ähnliche Funktionen, die eine Kommunikation von Instanz zu Instanz oder Hochverfügbarkeit erfordern.

    Weitere Informationen finden Sie im Abschnitt mit dem Titel Clustering des Dokuments Configure a Java app for Azure App Service.

Migration

Red Hat Migration Toolkit für Anwendungen

Das Red Hat Migration Toolkit for Applications ist eine kostenlose Erweiterung für Visual Studio Code. Diese Erweiterung analysiert Ihren Anwendungscode und Ihre Konfiguration, um Empfehlungen für die Migration von der lokalen Bereitstellung in die Cloud bereitzustellen. Weitere Informationen finden Sie in der Übersicht über das Migrations-Toolkit für Applikationen.

Die Inhalte dieses Leitfadens helfen Ihnen, die anderen Komponenten der Migrationsreise zu beheben, z. B. die Auswahl des richtigen App Service Plan-Typs, das Externalisieren des Sitzungszustands und die Verwendung von Azure zum Verwalten Ihrer EAP-Instanzen anstelle der JBoss-Verwaltungsschnittstelle.

Bereitstellen von Azure App Service für die JBoss EAP-Runtime

Verwenden Sie die folgenden Befehle, um eine Ressourcengruppe und einen Azure App Service-Plan zu erstellen. Nachdem der App Service Plan erstellt wurde, wird ein Linux-Web-App-Plan mit der JBoss Enterprise Application Platform (EAP)-Laufzeit erstellt.

Vergewissern Sie sich, dass die angegebenen Umgebungsvariablen über die richtigen Werte verfügen.

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

Erstellen der Anwendung

Führen Sie den Buildvorgang für die Anwendung mit dem folgenden Maven-Befehl durch.

mvn clean install -DskipTests

Bereitstellen der Anwendung

Wenn Ihre Anwendung über eine Maven-POM-Datei erstellt wurde, sollten Sie das Web-App-Plug-In für Maven verwenden, um die Web-App zu erstellen und Ihre Anwendung bereitzustellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen Sie eine Java App auf Azure App Service.

Für die Automatisierung der Bereitstellung von JBoss EAP-Anwendungen können Sie die Azure Pipelines-Aufgabe für Web-Apps oder die GitHub-Aktion für die Bereitstellung für Azure-Web-Apps verwenden.

Einrichten von Datenquellen

Beim Registrieren einer Datenquelle bei der JBoss Enterprise Application Platform (EAP) gibt es drei Kernschritte: Hochladen des Java Database Connectivity (JDBC)-Treibers, Hinzufügen des JDBC-Treibers als Modul und Registrierung des Moduls. Weitere Informationen finden Sie in der JBoss EAP-Dokumentation im Artikel zur Datenquellenverwaltung. App Service ist ein zustandsloser Hostingdienst, weshalb die Konfigurationsbefehle zum Hinzufügen und Registrieren des Datenquellenmoduls als Skript geschrieben und beim Start des Containers angewendet werden müssen.

Führen Sie die folgenden Schritte aus, um Datenquellen einzurichten.

  1. Rufen Sie den JDBC-Treiber Ihrer Datenbank ab.

  2. Erstellen Sie eine XML-Moduldefinitionsdatei für den JDBC-Treiber. Das gezeigte Beispiel ist eine Moduldefinition für PostgreSQL. Achten Sie darauf, dass Sie den Wert resource-root path durch den Pfad zum von Ihnen verwendeten JDBC-Treiber ersetzen.

    <?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. Fügen Sie Ihre JBoss-CLI-Befehle in eine Datei mit dem Namen jboss-cli-commands.cli ein. Die JBoss-Befehle müssen das Modul hinzufügen und es als Datenquelle registrieren. Das Beispiel zeigt die JBoss CLI-Befehle für PostgreSQL.

    Hinweis

    Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden, der verfügbar ist. Der in diesem Verfahren beschriebene Authentifizierungsfluss, z. B. für Datenbanken, Caches, Nachrichten oder KI-Dienste, erfordert ein sehr hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Optionen wie verwaltete Identitäten für kennwortlose oder schlüssellose Verbindungen nicht geeignet sind. Bei Vorgängen des lokalen Computers bevorzugen Sie Benutzeridentitäten für kennwortlose oder schlüssellose Verbindungen.

    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. Erstellen Sie ein Startskript mit dem Namen startup_script.sh, über das die JBoss-CLI-Befehle aufgerufen werden. Das Beispiel zeigt, wie Sie Ihre jboss-cli-commands.cli Datei aufrufen. Später konfigurieren Sie App Service so, dass dieses Skript ausgeführt wird, wenn die Instanz gestartet wird.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Laden Sie mit einem FTP-Client Ihrer Wahl den JDBC-Treiber, jboss-cli-commands.cli, startup_script.sh und die Moduldefinition in /site/deployments/tools/ hoch.

  6. Konfigurieren Sie Ihre Site so, dass startup_script.sh ausgeführt wird, wenn der Container gestartet wird. Navigieren Sie im Azure-Portal zu Konfiguration > Allgemeine Einstellungen > Startbefehl. Legen Sie das Feld für den Startbefehl auf /home/site/deployments/tools/startup_script.sh fest, und wählen Sie anschließend Speichern aus.

  7. Starten Sie die Web-App neu, wodurch das Konfigurationsskript ausgeführt wird.

  8. Aktualisieren Sie die Java Transaction API (JTA)-Datenquellenkonfiguration für Ihre Anwendung. Öffnen Sie die Datei src/main/resources/META-INF/persistence.xml für Ihre Anwendung und suchen Sie das Element <jta-data-source>. Ersetzen Sie seinen Inhalt wie folgt:

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

Erstellen der Anwendung

Führen Sie den Buildvorgang für die Anwendung mit dem folgenden Maven-Befehl durch.

mvn clean install -DskipTests

Bereitstellen der Anwendung

Wenn Ihre Anwendung über eine Maven-POM-Datei erstellt wurde, sollten Sie das Web-App-Plug-In für Maven verwenden, um die Web-App zu erstellen und Ihre Anwendung bereitzustellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen Sie eine Java App auf Azure App Service.

Für die Automatisierung der Bereitstellung von JBoss EAP-Anwendungen können Sie die Azure Pipelines-Aufgabe für Web-Apps oder die GitHub-Aktion für die Bereitstellung für Azure-Web-Apps verwenden.

Nach der Migration

Nachdem Sie Ihre Anwendung zu Azure App Service migriert haben, sollten Sie überprüfen, ob sie erwartungswend funktioniert. Danach haben wir einige Empfehlungen für Sie, die Ihre Anwendung cloudnativ machen können.

Empfehlungen