Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze handleiding wordt beschreven waar u rekening mee moet houden wanneer u een bestaande Spring Boot-toepassing wilt migreren naar Azure App Service.
Voor-migratie
Voltooi voordat u begint de evaluatie- en inventarisstappen die in de volgende secties worden beschreven om een geslaagde migratie te garanderen.
Overschakelen naar een ondersteund platform
App Service biedt specifieke versies van Java SE. Om compatibiliteit te garanderen, migreert u uw toepassing naar een van de ondersteunde versies van de huidige omgeving voordat u doorgaat met een van de resterende stappen. Zorg ervoor dat de uiteindelijke configuratie volledig wordt getest. Gebruik in dergelijke tests de laatste stabiele versie van uw Linux-distributie.
Opmerking
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
Op Azure-app Service worden de binaire bestanden voor Java 8 geleverd vanuit Eclipse Temurin. Voor Java 11, 17 en alle toekomstige LTS-releases van Java biedt App Service de Microsoft Build van OpenJDK. Deze binaire bestanden zijn gratis te downloaden op de volgende sites:
Externe middelen inventariseren
Identificeer externe resources, zoals gegevensbronnen, JMS-bericht-brokers en URL's van andere services. In Spring Boot-toepassingen kunt u doorgaans de configuratie voor dergelijke resources vinden in de map src/main/directory , in een bestand met de naam application.properties of application.yml. Controleer bovendien de omgevingsvariabelen van de productie-implementatie op eventuele relevante configuratie-instellingen.
Databanken
Voor een Spring Boot-toepassing worden verbindingsreeks meestal weergegeven in configuratiebestanden wanneer deze afhankelijk is van een externe database. Hier volgt een voorbeeld van een application.properties-bestand:
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Hier volgt een voorbeeld van een application.yaml-bestand:
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Raadpleeg de Spring Data-documentatie voor meer mogelijke configuratiescenario's:
JMS-berichtbrokers
Identificeer de broker of brokers die in gebruik zijn door te zoeken in het buildmanifest (meestal een pom.xml - of build.gradle-bestand ) voor de relevante afhankelijkheden.
Een Spring Boot-toepassing die Gebruikmaakt van ActiveMQ bevat bijvoorbeeld meestal deze afhankelijkheid in het pom.xml-bestand :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Spring Boot-toepassingen die commerciële brokers gebruiken, bevatten doorgaans rechtstreeks afhankelijkheden in de JMS-stuurprogrammabibliotheken van de brokers. Hier volgt een voorbeeld van een build.gradle-bestand:
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Nadat u de broker of brokers hebt geïdentificeerd die in gebruik zijn, zoekt u de bijbehorende instellingen. In Spring Boot-toepassingen kunt u ze meestal vinden in de application.properties en application.yml bestanden in de toepassingsmap.
Opmerking
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.
Hier volgt een ActiveMQ-voorbeeld uit een bestand 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>
Zie de Spring Boot Messaging-documentatie voor meer informatie over de ActiveMQ-configuratie.
Hier volgt een IBM MQ-voorbeeld uit een application.yaml-bestand :
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
Zie de documentatie voor IBM MQ Spring-onderdelen voor meer informatie over de IBM MQ MQ-configuratie.
Externe caches identificeren
Identificeer eventuele externe caches die in gebruik zijn. Redis wordt vaak gebruikt via Spring Data Redis. Zie de Spring Data Redis-documentatie voor configuratie-informatie.
Bepaal of sessiegegevens worden opgeslagen in de cache via Spring Session door te zoeken naar de respectieve configuratie (in Java of XML).
Identiteitsaanbieders
Identificeer een of meer id-providers die door uw toepassing worden gebruikt. Raadpleeg het volgende voor informatie over hoe id-providers kunnen worden geconfigureerd:
- Zie de Spring Security-referentie voor OAuth2-configuratie.
- Zie de documentatie voor Auth0 Spring Security voor Auth0 Voor de configuratie van Spring Security.
- Zie de Auth0 PingFederate-instructies voor PingFederate voor de configuratie van PingFederate Spring Security.
Alle andere externe bronnen
Het is niet haalbaar om alle mogelijke externe afhankelijkheden in deze handleiding te documenteren. Het is de verantwoordelijkheid van uw team om te controleren of elke externe afhankelijkheid van uw toepassing kan worden voldaan na een App Service-migratie.
Geheimen inventariseren
Wachtwoorden en beveiligde tekenreeksen
Controleer alle eigenschaps- en configuratiebestanden en alle omgevingsvariabelen in de productie-implementatie(s) op geheime tekenreeksen en wachtwoorden. In een Spring Boot-toepassing zijn dergelijke tekenreeksen waarschijnlijk te vinden in application.properties of application.yml.
Certificaten inventariseren
Documenteer alle certificaten die worden gebruikt voor openbare SSL-eindpunten of communicatie met back-enddatabases en andere systemen. U kunt alle certificaten op de productieserver(s) weergeven door de volgende opdracht uit te voeren:
keytool -list -v -keystore <path to keystore>
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. U kunt enkele of elk van de volgende scenario's identificeren.
Alleen-lezen statische inhoud
Als uw toepassing momenteel statische inhoud bedient, hebt u een alternatieve locatie nodig. Overweeg om statische inhoud te verplaatsen naar Azure Blob Storage en Azure Front Door toe te voegen voor snelle downloads wereldwijd. Zie statische websitehosting in Azure Storage en Een Azure Storage-account integreren met Azure Front Doorvoor meer informatie.
Speciale gevallen
Voor bepaalde productiescenario's zijn mogelijk aanvullende wijzigingen vereist of gelden extra beperkingen. Hoewel dergelijke scenario's incidenteel kunnen zijn, is het belangrijk om ervoor te zorgen dat deze niet van toepassing zijn op uw toepassing of correct zijn opgelost.
Bepalen of de toepassing gebruikmaakt van geplande taken
Geplande taken, zoals Quartz Scheduler-taken of Cron-taken, kunnen niet met App Service worden gebruikt. 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, binnen of buiten het toepassingsproces.
Bepalen of uw toepassing code bevat die specifiek is voor het besturingssysteem
Als uw toepassing code bevat met afhankelijkheden van het host-besturingssysteem, moet u deze herstructureren om deze afhankelijkheden te verwijderen. U moet bijvoorbeeld het gebruik van / of \ in bestandssysteempaden vervangen door File.Separator of Paths.get als uw toepassing wordt uitgevoerd in Windows.
Alle externe processen/daemons identificeren die worden uitgevoerd op de productieserver(s)
Processen die buiten de toepassingsserver worden uitgevoerd, zoals bewakingsdaemons, moeten ergens anders worden gemigreerd of verwijderd.
Verwerking van niet-HTTP-aanvragen of meerdere poorten identificeren
App Service ondersteunt slechts één HTTP-eindpunt op één poort. Als uw toepassing luistert op meerdere poorten of aanvragen accepteert met andere protocollen dan HTTP, gebruikt u Azure App Service niet.
Migratie
De configuratie parameteriseren
Zorg ervoor dat alle externe resourcecoördinaten (zoals databaseverbindingstekenreeksen) en andere aanpasbare instellingen kunnen worden gelezen uit omgevingsvariabelen. Als u een Spring Boot-toepassing migreert, moeten alle configuratie-instellingen al extern zijn. Zie De externe configuratie in de Spring Boot-documentatie voor meer informatie.
Hier volgt een voorbeeld dat verwijst naar een SERVICEBUS_CONNECTION_STRING omgevingsvariabele uit een bestand application.properties :
spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000
Een App Service-plan inrichten
Selecteer in de lijst met beschikbare serviceplannen het plan waarvan de specificaties voldoen aan of overschrijden die van de huidige productiehardware.
Opmerking
Als u van plan bent om faserings-/canaryimplementaties uit te voeren of om implementatiesites te gebruiken, moet het App Service-plan over die extra capaciteit beschikken. Het wordt aanbevolen om Premium-abonnementen of hoger te gebruiken voor Java-toepassingen.
Web-apps maken en implementeren
U moet een web-app maken in uw App Service-plan (waarbij u Java SE als runtimestack kiest) voor elk uitvoerbaar JAR-bestand dat u wilt uitvoeren.
Maven-apps
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.
Andere toepassingen dan Maven-toepassingen
Als u de Maven-invoegtoepassing niet kunt gebruiken, moet u de web-app op andere manieren inrichten, zoals:
Wanneer de web-app is gemaakt, gebruikt u een van de beschikbare implementatiemethoden om uw app te implementeren. Indien mogelijk moet uw toepassing worden geüpload naar /home/site/wwwroot/app.jar. Als u de naam van uw JAR niet wilt wijzigen in app.jar, kunt u een shellscript uploaden met de opdracht om uw JAR uit te voeren. Plak vervolgens het volledige pad naar dit script in het tekstvak Opstartbestand in de sectie Configuratie van de portal. Het opstartscript wordt niet uitgevoerd vanuit de map waarin het wordt geplaatst. Gebruik daarom altijd absolute paden om te verwijzen naar bestanden in het opstartscript (bijvoorbeeld: java -jar /home/myapp/myapp.jar).
JVM-runtimeopties migreren
Als voor uw app specifieke runtimeopties vereist zijn, gebruikt u de beste methode om deze op te geven.
Aangepast domein en SSL configureren
Als uw toepassing wordt weergegeven in een aangepast domein, moet u uw webtoepassing hieraan toewijzen. Zie Zelfstudie: Een bestaande aangepaste DNS-naam toewijzen aan Azure-app Service voor meer informatie.
Vervolgens moet u het SSL-certificaat voor dat domein binden aan uw App Service-web-app. Zie Een aangepaste DNS-naam beveiligen met een SSL-binding in Azure App Service voor meer informatie.
Back-endcertificaten importeren
Alle certificaten voor het communiceren met back-endsystemen, zoals databases, moeten beschikbaar worden gesteld aan App Service. Zie Een SSL-certificaat toevoegen in App Service voor meer informatie.
Externe resourcecoördinaten en andere instellingen migreren
Volg deze stappen om verbindingsreeksen en andere instellingen te migreren.
Opmerking
Voor alle Spring Boot-toepassingsinstellingen die zijn geparameteriseerd met variabelen in de sectie Parameteriseren van de configuratie , moeten deze omgevingsvariabelen worden gedefinieerd in de toepassingsconfiguratie. Alle Spring Boot-toepassingsinstellingen die niet expliciet zijn geparameteriseerd met omgevingsvariabelen, kunnen nog steeds worden overschreven via Toepassingsconfiguratie. Voorbeeld:
spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000
Geplande taken migreren
Als u geplande taken wilt uitvoeren in Azure, kunt u gebruikmaken van een Timertrigger voor Azure Functions. U hoeft de taakcode zelf niet naar een functie te migreren. Via de functie kan eenvoudig een URL in uw toepassing worden aangeroepen om de taak te activeren. Als dergelijke taakuitvoeringen dynamisch moeten worden aangeroepen en/of centraal moeten worden bijgehouden, kunt u Spring Batch gebruiken.
U kunt ook een logische app maken met een terugkeertrigger om de URL aan te roepen zonder dat u code hoeft te schrijven buiten uw toepassing. Zie Overzicht - wat is Azure Logic Apps? en Terugkerende taken en werkstromen maken, plannen en uitvoeren met de terugkeertrigger in Azure Logic Apps voor meer informatie.
Opmerking
Om kwaadwillend gebruik te voorkomen, moet u er waarschijnlijk voor zorgen dat er referenties vereist zijn voor het eindpunt dat de taak aanroept. In dit geval moeten de referenties worden opgegeven door de triggerfunctie.
De id-provider migreren en inschakelen
Als voor uw toepassing verificatie of autorisatie is vereist, moet u ervoor zorgen dat deze zijn geconfigureerd voor toegang tot de id-provider met behulp van de volgende richtlijnen:
- Als de id-provider Microsoft Entra-id is, zijn er geen wijzigingen nodig.
- Als de id-provider een on-premises Active Directory-forest is, kunt u overwegen om een hybride identiteitsoplossing met Microsoft Entra-id te implementeren. Zie de documentatie voor hybride identiteiten voor meer informatie.
- Als de id-provider een andere on-premises oplossing is, zoals PingFederate, raadpleegt u de aangepaste installatie van Microsoft Entra Connect-onderwerp om federatie met Microsoft Entra-id te configureren. U kunt ook Spring Security gebruiken om uw id-provider te gebruiken via OAuth2/OpenID Connect of SAML.
Opnieuw starten en functioneel testen
Ten slotte moet u de web-app opnieuw starten om alle configuratiewijzigingen toe te passen. Wanneer de web-app opnieuw is gestart, controleert u of deze juist wordt uitgevoerd.
Postmigratie
Nu u de app naar Azure App Service hebt gemigreerd, moet u controleren of deze naar behoren werkt. Zodra u dat hebt gedaan, hebben we enkele aanbevelingen voor u die uw toepassing meer cloudeigen kunnen maken.
Aanbevelingen
Als u ervoor hebt gekozen om de map /home te gebruiken als bestandsopslag, kunt u deze het beste vervangen door Azure Storage.
Als u configuratie hebt in de /home directory die verbindingsreeksen, SSL-sleutels en andere geheime informatie bevat, kunt u waar mogelijk Azure Key Vault en/of parameterinjectie gebruiken met toepassingsinstellingen .
U kunt het beste implementatiesites gebruiken voor betrouwbare implementaties zonder downtime.
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. Wanneer u implementatiesites gebruikt, kunt u de implementatie automatiseren naar een site gevolgd door de sitewisseling.
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.