Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Handbuch wird beschrieben, was Sie beachten sollten, wenn Sie eine vorhandene Spring Boot-Anwendung zu Azure App Service migrieren möchten.
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.
Wechseln zu einer unterstützten Plattform
App Service bietet spezifische Versionen von Java SE. Um die Kompatibilität sicherzustellen, migrieren Sie Ihre Anwendung zu einer der unterstützten Versionen der aktuellen Umgebung, bevor Sie mit einem der verbleibenden Schritte fortfahren. Testen Sie unbedingt die resultierende Konfiguration vollständig. Verwenden Sie die neueste stabile Version Ihrer Linux-Verteilung in solchen Tests.
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
Auf Azure App Service werden die Binärdateien für Java 8 von Eclipse Temurin bereitgestellt. Für Java 11, 17 und alle zukünftigen LTS-Versionen von Java stellt App Service den Microsoft Build of OpenJDK bereit. Diese Binärdateien stehen kostenlos auf den folgenden Websites zum Download zur Verfügung:
Externe Ressourcen inventarisieren
Identifizieren sie externe Ressourcen, z. B. Datenquellen, JMS-Nachrichtenbroker und URLs anderer Dienste. In Spring Boot-Anwendungen finden Sie in der Regel die Konfiguration für solche Ressourcen im Ordner "src/main/directory ", in einer Datei, die normalerweise als application.properties oder application.yml bezeichnet wird. Überprüfen Sie außerdem die Umgebungsvariablen der Produktionsbereitstellung auf alle relevanten Konfigurationseinstellungen.
Datenbanken
Bei einer Spring Boot-Anwendung werden Verbindungszeichenfolgen in der Regel in Konfigurationsdateien angezeigt, wenn sie von einer externen Datenbank abhängig sind. Hier ist ein Beispiel aus einer Datei "application.properties ":
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Hier ist ein Beispiel aus einer Application.yaml-Datei :
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Weitere mögliche Konfigurationsszenarien finden Sie in der Spring Data-Dokumentation:
JMS-Nachrichtenvermittlungssysteme
Identifizieren Sie den zu verwendenden Broker oder Broker, indem Sie im Buildmanifest (in der Regel eine pom.xml - oder build.gradle-Datei ) nach den relevanten Abhängigkeiten suchen.
Beispielsweise würde eine Spring Boot-Anwendung mit ActiveMQ in der Regel diese Abhängigkeit in der pom.xml Datei enthalten:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Spring Boot-Anwendungen mit kommerziellen Brokern enthalten in der Regel Abhängigkeiten direkt von den JMS-Treiberbibliotheken der Broker. Hier ist ein Beispiel aus einer Build.gradle-Datei :
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Nachdem Sie den oder die verwendeten Broker ermittelt haben, können Sie nach den entsprechenden Einstellungen suchen. In Spring Boot-Anwendungen können Sie sie in der Regel in den Dateien "application.properties " und application.yml im Anwendungsverzeichnis finden.
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.
Hier ist ein ActiveMQ-Beispiel aus einer Datei "application.properties ":
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>
Weitere Informationen zur ActiveMQ-Konfiguration finden Sie in der Dokumentation zum Spring Boot Messaging.
Nachfolgend finden Sie ein IBM MQ-Beispiel aus einer Datei "application.yaml ":
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
Weitere Informationen zur IBM MQ-Konfiguration finden Sie in der Dokumentation zu IBM MQ Spring-Komponenten.
Identifizieren externer Caches
Identifizieren Sie alle verwendeten externen Caches. Häufig wird Redis über Spring Data Redis verwendet. Informationen zur Konfiguration finden Sie in der Dokumentation zu Spring Data Redis .
Ermitteln Sie, ob Sitzungsdaten über Spring Session zwischengespeichert werden, indem Sie nach der jeweiligen Konfiguration (in Java oder XML) suchen.
Identitätsdienstleister
Identifizieren Sie alle Identitätsanbieter, die von Ihrer Anwendung verwendet werden. Informationen zur Konfiguration von Identitätsanbietern finden Sie in den folgenden Abschnitten:
- Informationen zur OAuth2-Konfiguration finden Sie in der Spring Security-Referenz.
- Die Auth0 Spring Security-Konfiguration finden Sie in der Auth0 Spring Security-Dokumentation.
- Informationen zur Konfiguration von PingFederate Spring Security finden Sie in den Auth0 PingFederate-Anweisungen.
Alle anderen externen Ressourcen
Es würde den Rahmen dieses Leitfadens sprengen, jede mögliche externe Abhängigkeit zu dokumentieren. Es liegt in der Verantwortung Ihres Teams, zu überprüfen, ob jede externe Abhängigkeit Ihrer Anwendung nach einer App Service-Migration erfüllt werden kann.
Geheime Inventarsekrete
Kennwörter und sichere Zeichenfolgen
Überprüfen Sie alle Eigenschaften und Konfigurationsdateien und alle Umgebungsvariablen für die Produktionsbereitstellung(n) auf geheime Zeichenfolgen und Kennwörter. In einer Spring Boot-Anwendung werden solche Zeichenfolgen wahrscheinlich in application.properties oder application.yml gefunden.
Bestandszertifikate
Dokumentieren Sie alle Zertifikate, die für öffentliche SSL-Endpunkte oder die Kommunikation mit Back-End-Datenbanken und anderen Systemen 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>
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. Es kann sein, dass für Sie einige bzw. alle folgenden Szenarien zutreffen.
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.
Sonderfälle
Bestimmte Produktionsszenarien erfordern möglicherweise zusätzliche Änderungen oder zusätzliche Einschränkungen. Während solche Szenarien selten auftreten können, ist es wichtig, sicherzustellen, dass sie entweder für Ihre Anwendung nicht zulässig sind oder ordnungsgemäß aufgelöst werden.
Ermitteln, ob die Anwendung auf geplanten Aufträgen basiert
Geplante Aufträge, z. B. Quarzplaneraufgaben oder Cron-Aufträge, können nicht mit App Service verwendet werden. Der App-Dienst verhindert nicht, dass Sie eine Anwendung mit geplanten Aufgaben intern bereitstellen. 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 Aufträge innerhalb oder außerhalb des Bewerbungsprozesses.
Ermitteln, ob Ihre Anwendung betriebssystemspezifischen Code enthält
Wenn Ihre Anwendung Code mit Abhängigkeiten vom Hostbetriebssystem enthält, müssen Sie ihn umgestalten, um diese Abhängigkeiten zu beseitigen. Beispielsweise müssen Sie möglicherweise die Verwendung von / oder \ in Dateisystempfaden durch File.Separator oder Paths.get ersetzen, wenn Ihre Anwendung unter Windows ausgeführt wird.
Identifizieren aller externen Prozesse/Daemons, die auf den Produktionsservern ausgeführt werden
Prozesse, die außerhalb des Anwendungsservers ausgeführt werden, z. B. das Überwachen von Daemons, müssen an anderer Stelle migriert oder eliminiert werden.
Identifizieren der Behandlung von Nicht-HTTP-Anforderungen oder mehreren Ports
Der App-Dienst unterstützt nur einen einzelnen HTTP-Endpunkt für einen einzelnen Port. Wenn Ihre Anwendung mehrere Ports überwacht oder Anforderungen mit anderen Protokollen als HTTP akzeptiert, verwenden Sie azure App Service nicht.
Migration
Parametrisieren der Konfiguration
Stellen Sie sicher, dass alle externen Ressourcenkoordinaten (z. B. Datenbankverbindungszeichenfolgen) und andere anpassbare Einstellungen aus Umgebungsvariablen gelesen werden können. Wenn Sie eine Spring Boot Application migrieren, sollten alle Konfigurationseinstellungen bereits externisierbar sein. Weitere Informationen finden Sie in der Spring Boot-Dokumentation unter „Externalized Configuration“.
Hier ist ein Beispiel, das auf eine SERVICEBUS_CONNECTION_STRING Umgebungsvariable aus einer Datei "application.properties " verweist:
spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000
Bereitstellen eines App Service-Plans
Wählen Sie in der Liste der verfügbaren Servicepläne den Plan aus, dessen Spezifikationen die der aktuellen Produktionshardware erfüllen oder überschreiten.
Hinweis
Wenn Sie die Ausführung von Staging- bzw. Canarybereitstellungen planen oder Bereitstellungsslots nutzen möchten, muss der App Service-Plan diese zusätzliche Kapazität enthalten. Wir empfehlen Ihnen die Verwendung eines Premium-Plans (oder höher) für Java-Anwendungen.
Erstellen Sie den App Service-Plan.
Erstellen und Bereitstellen von Web-Apps
Sie müssen für jede ausführbare JAR-Datei, die Sie ausführen möchten, eine Web App im App Service Plan erstellen (wählen Sie "Java SE" als Laufzeitstapel auswählen).
Maven-Anwendungen
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.
Nicht auf Maven basierende Anwendungen
Falls Sie das Maven-Plug-In nicht verwenden können, müssen Sie die Web-App über andere Mechanismen bereitstellen, z. B.:
Nachdem die Web App erstellt wurde, verwenden Sie einen der verfügbaren Bereitstellungsmechanismen , um Ihre Anwendung bereitzustellen. Wenn möglich, sollte Ihre Anwendung auf /home/site/wwwroot/app.jar hochgeladen werden. Wenn Sie Ihren JAR nicht in app.jar umbenennen möchten, können Sie ein Shellskript mit dem Befehl hochladen, um Ihren JAR auszuführen. Fügen Sie dann den vollständigen Pfad zu diesem Skript in das Textfeld "Startdatei " im Konfigurationsabschnitt des Portals ein. Das Startskript wird nicht aus dem Verzeichnis ausgeführt, in dem es platziert wurde. Verwenden Sie daher immer absolute Pfade, um auf Dateien in Ihrem Startskript zu verweisen (z. B.: java -jar /home/myapp/myapp.jar).
Migrieren von JVM-Runtimeoptionen
Wenn Ihre Anwendung bestimmte Laufzeitoptionen erfordert, verwenden Sie den am besten geeigneten Mechanismus, um sie anzugeben.
Konfigurieren benutzerdefinierter Domänen und SSL
Wenn Ihre Anwendung in einer benutzerdefinierten Domäne sichtbar ist, müssen Sie Ihre Webanwendung zuordnen. Weitere Informationen finden Sie unter Tutorial: Zuordnen eines vorhandenen benutzerdefinierten DNS-Namens zu Azure App Service.
Anschließend müssen Sie das SSL-Zertifikat für diese Domäne an Ihre App Service Web App binden. Weitere Informationen finden Sie unter Sichern eines benutzerdefinierten DNS-Namens mit einer SSL-Bindung in Azure App Service.
Importieren von Back-End-Zertifikaten
Alle Zertifikate für die Kommunikation mit Backend-Systemen, wie z. B. Datenbanken, müssen der App Service zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Hinzufügen eines SSL-Zertifikats in App Service.
Migrieren externer Ressourcenkoordinaten und anderer Einstellungen
Führen Sie die folgenden Schritte aus, um Verbindungszeichenfolgen und andere Einstellungen zu migrieren.
Hinweis
Für alle Einstellungen der Spring Boot-Anwendung, die mit Variablen im Konfigurationsabschnitt "Parametrisieren " parametrisiert werden, müssen diese Umgebungsvariablen in der Anwendungskonfiguration definiert werden. Alle Spring Boot-Anwendungseinstellungen, die nicht explizit mit Umgebungsvariablen parametrisiert werden, können weiterhin über die Anwendungskonfiguration überschrieben werden. Beispiel:
spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000
Migrieren von geplanten Aufträgen
Um geplante Aufträge in Azure auszuführen, erwägen Sie die Verwendung eines Timertriggers für Azure-Funktionen. Hierbei ist es nicht erforderlich, den eigentlichen Auftragscode in eine Funktion zu migrieren. Für die Funktion kann einfach eine URL in Ihrer Anwendung aufgerufen werden, um den Auftrag auszulösen. Wenn solche Auftragsausführungen dynamisch und/oder zentral nachverfolgt werden müssen, erwägen Sie die Verwendung von Spring Batch.
Alternativ können Sie eine Logik-App mit einem Serientrigger erstellen, um die URL aufzurufen, ohne Code außerhalb Ihrer Anwendung zu schreiben. Weitere Informationen finden Sie unter Übersicht – Was ist Azure Logic Apps? Und Erstellen, Planen und Ausführen von wiederkehrenden Aufgaben und Workflows mit dem Serientrigger in Azure Logic Apps.
Hinweis
Zur Verhinderung einer missbräuchlichen Nutzung müssen Sie ggf. sicherstellen, dass für den Endpunkt zum Aufrufen des Auftrags Anmeldeinformationen benötigt werden. In diesem Fall müssen die Anmeldeinformationen von der Triggerfunktion bereitgestellt werden.
Migrieren und Aktivieren des Identitätsanbieters
Wenn Ihre Anwendung Authentifizierung oder Autorisierung erfordert, stellen Sie sicher, dass sie für den Zugriff auf den Identitätsanbieter konfiguriert sind, indem Sie die folgenden Anleitungen verwenden:
- Wenn der Identitätsanbieter die Microsoft Entra-ID ist, sollten keine Änderungen erforderlich sein.
- Handelt es sich bei dem Identitätsanbieter um eine lokale Active Directory-Gesamtstruktur, empfiehlt sich ggf. die Implementierung einer Hybrididentitätslösung mit Microsoft Entra ID. Weitere Informationen finden Sie in der Dokumentation zur Hybrididentität.
- Wenn der Identitätsanbieter eine andere lokale Lösung ist, z. B. PingFederate, konsultieren Sie das Thema "Benutzerdefinierte Installation von Microsoft Entra Connect ", um den Partnerverbund mit Microsoft Entra ID zu konfigurieren. Alternativ können Sie Spring Security verwenden, um Ihren Identitätsanbieter über OAuth2/OpenID Connect oder SAML zu verwenden.
Neustarten und Durchführen des Buildüberprüfungstests
Abschließend müssen Sie Ihre Web-App neu starten, um alle Konfigurationsänderungen anzuwenden. Vergewissern Sie sich nach Abschluss des Neustarts, dass Ihre Anwendung korrekt ausgeführt wird.
Nach der Migration
Nachdem Sie Ihre Anwendung zu Azure App Service migriert haben, sollten Sie überprüfen, ob sie wie erwartet funktioniert. Nachdem Sie dies getan haben, haben wir einige Empfehlungen für Sie, die Ihre Anwendung cloudnativ machen können.
Empfehlungen
Wenn Sie sich für die Verwendung des /home-Verzeichnisses für die Dateispeicherung entschieden haben, sollten Sie es durch Azure Storage ersetzen.
Wenn Sie eine Konfiguration im Verzeichnis "/home " haben, die Verbindungszeichenfolgen, SSL-Schlüssel und andere geheime Informationen enthält, sollten Sie ggf. Azure Key Vault und/oder Parametereinfügung mit Anwendungseinstellungen verwenden.
Erwägen Sie die Verwendung von Bereitstellungsplätzen für zuverlässige Bereitstellungen ohne Ausfallzeiten.
Entwerfen und implementieren Sie eine DevOps-Strategie. Um die Zuverlässigkeit aufrechtzuerhalten und ihre Entwicklungsgeschwindigkeit zu erhöhen, sollten Sie die Automatisierung von Bereitstellungen und Tests mit Azure-Pipelines in Betracht ziehen. Bei Verwendung von Bereitstellungsslots können Sie nicht nur die Bereitstellung für einen Slot automatisieren, sondern auch den anschließenden Slotaustausch.
Entwerfen und implementieren Sie eine Strategie für Geschäftskontinuität und Notfallwiederherstellung. Bei unternehmenskritischen Anwendungen sollten Sie eine Architektur für die Bereitstellung mit mehreren Regionen in Betracht ziehen.