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).
Als u uw huidige Java-versie wilt verkrijgen, meldt u zich aan bij uw productieserver en voert u de volgende opdracht uit:
java -version
Op Azure App Service zijn de binaire bestanden voor Java 8 beschikbaar vanuit Eclipse Temurin. Voor Java 11, 17 en alle toekomstige LTS-releases van Java biedt App Service de Microsoft Build of 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 bestand 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 volgt een voorbeeld van een bestand application.yaml :
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 die in gebruik zijn hebt geïdentificeerd, 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 in de cache worden opgeslagen via Spring-sessie 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 van Auth0 Spring Security voor de configuratie van Spring Security.
- Zie de Auth0 PingFederate-instructies voor de configuratie van Spring Security met PingFederate.
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.
Inventarisgeheimen
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.
Inventariscertificaten
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 statische inhoud te verplaatsen naar Azure Blob Storage en Azure Front Door toe te voegen voor snelle downloads wereldwijd. Voor meer informatie, zie Statische websitehosting in Azure Storage en Integreer een Azure Storage-account met Azure Front Door.
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 op 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 geen Azure App Service.
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 faserings-/canary-implementaties uit te voeren of implementatiesites te gebruiken, moet het App Service-plan die extra capaciteit bevatten. U wordt aangeraden Premium- of hogere abonnementen 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-applicaties
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 op 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:
Zodra de web-app is gemaakt, gebruikt u een van de beschikbare implementatiemechanismen om uw toepassing 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 uw opstartscript (bijvoorbeeld: java -jar /home/myapp/myapp.jar).
JVM-runtimeopties migreren
Als voor uw toepassing specifieke runtime-opties zijn vereist, gebruikt u het meest geschikte mechanisme 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 Tutorial: wijs een bestaande aangepaste DNS-naam toe aan Azure App Service voor meer informatie.
Vervolgens moet u het SSL-certificaat voor dat domein binden aan uw App Service-web-app. Zie Beveilig een aangepaste DNS-naam 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 jobs migreren
Als u geplande taken wilt uitvoeren op Azure, kunt u overwegen om een Timer-trigger te gebruiken 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 overwegen Spring Batch te 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 Overview - Wat is Azure Logic Apps? en Maken, plannen en uitvoeren van terugkerende taken en werkstromen met de trigger Terugkeerpatroon 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 inloggegevens 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 is Microsoft Entra ID, 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 het onderwerp Custom-installatie van Microsoft Entra Connect voor het configureren van federatie met Microsoft Entra ID. U kunt ook Spring Security gebruiken om uw id-provider te gebruiken via OAuth2/OpenID Connect of SAML.
Opnieuw starten en rooktest
Ten slotte moet u de web-app opnieuw starten om alle configuratiewijzigingen toe te passen. Nadat de applicatie opnieuw is gestart, controleert u of deze correct functioneert.
Postmigratie
Nu u uw toepassing hebt gemigreerd naar Azure App Service moet u controleren of deze werkt zoals verwacht. 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 voor bestandsopslag, kunt u overwegen te verwijderen met Azure Storage.
Als u configuratie hebt in de map /home die verbindingsreeksen, SSL-sleutels en andere geheime gegevens bevat, kunt u overwegen Azure Key Vault en/of parameterinjectie met toepassingsinstellingen te gebruiken waar mogelijk.
Overweeg Deployment Slots te gebruiken voor betrouwbare implementaties zonder downtime.
Ontwerp en implementeer een DevOps-strategie. Overweeg het automatiseren van implementaties en testen met Azure Pipelines om de betrouwbaarheid te behouden terwijl u de ontwikkelingssnelheid verhoogt. Wanneer u Deployment-slots gebruikt, kunt u de implementatie naar een slot automatiseren gevolgd door de slotwisseling.
Ontwerp en implementeer een strategie voor bedrijfscontinuïteit en herstel na noodgevallen. Voor bedrijfskritieke toepassingen kunt u een implementatiearchitectuur met meerdere regio's overwegen.