Uw Spring Boot migreren naar Azure App Service
In deze handleiding wordt beschreven waar u rekening mee moet houden wanneer u een bestaande Spring Boot wilt migreren naar Azure App Service.
Premigratie
Voltooi voordat u begint de evaluatie- en inventarisatiestappen die in de volgende secties worden beschreven om te zorgen voor een geslaagde migratie.
Als u niet aan een van deze vereisten vóór de migratie kunt voldoen, bekijkt u de volgende handleidingen voor migratie:
- Uitvoerbare JAR-toepassingen migreren naar containers op Azure Kubernetes Service (geplande richtlijnen)
- Uitvoerbare JAR-toepassingen migreren naar Azure Virtual Machines (geplande richtlijnen)
Overschakelen naar een ondersteund platform
App Service biedt specifieke versies van Java SE. Zorg voor compatibiliteit en migreer uw toepassing naar een van de ondersteunde versies van de huidige omgeving voordat u verdergaat 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.
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
Als u de huidige versie wilt verkrijgen die door Azure App Service wordt gebruikt, downloadt u Zulu 8 als u van plan bent de Java 8 Runtime te gebruiken, of Zulu 11 als u van plan bent de Java 11 Runtime te gebruiken.
Externe resources inventariseren
Identificeer externe resources, zoals gegevensbronnen, JMS-bericht-brokers en URL's van andere services. In Spring Boot toepassingen vindt u de configuratie voor dergelijke resources doorgaans in de map src/main/directory, in een bestand dat meestal application.properties of application.ymlwordt genoemd. Controleer daarnaast de omgevingsvariabelen van de productie-implementatie op relevante configuratie-instellingen.
Databases
Identificeer de verbindingsreeks voor elke SQL database.
Voor een Spring Boot-toepassing vindt u de verbindingsreeksen meestal in configuratiebestanden.
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
Zie Spring Data-documentatie voor meer mogelijke configuratiescenario's:
JMS-berichtbrokers
Identificeer de broker of brokers die worden gebruikt door in het buildmanifest (meestal een pom.xml of build.gradle-bestand) te zoeken naar de relevante afhankelijkheden.
Een toepassing met Spring Boot ActiveMQ bevat bijvoorbeeld doorgaans deze afhankelijkheid in het pom.xml bestand:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Spring Boot-toepassingen die gebruikmaken van eigen brokers bevatten gewoonlijk afhankelijkheden rechtstreeks van 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.0.4.0")
...
}
Nadat u de broker of brokers in gebruik hebt geïdentificeerd, moet u de bijbehorende instellingen zoeken. In Spring Boot toepassingen vindt u deze doorgaans in de bestanden application.properties en application.yml in de toepassingsmap.
Hier is 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=tryandguess
Zie de documentatie voor Spring Boot messaging voor meer informatie over activemq-configuratie.
Hier is een IBM MQ-voorbeeld uit een application.yaml-bestand:
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: big$ecr3t
Zie de documentatie over IBM MQ Spring-onderdelen voor meer informatie over de IBM MQ-configuratie.
Externe caches identificeren
Identificeer alle 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 Session door te zoeken naar de respectieve configuratie (in Java of XML).
Id-providers
Identificeer een of meer id-provider(s) die door uw toepassing worden gebruikt. Raadpleeg het volgende voor meer informatie over hoe id-providers kunnen worden geconfigureerd:
- Zie de Spring Security-referentie voor OAuth2-configuratie.
- Zie de Auth0 Spring Security-documentatie voor auth0 Spring Security-configuratie.
- Zie de Auth0 PingFederate-instructiesvoor de configuratie van PingFederate Spring Security.
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 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 deze tekenreeksen vindt u deze waarschijnlijk 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>
Bepalen 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.
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 Hosting van statische websites in Azure Storage en Quickstart: Een Azure-opslagaccount integreren met Azure CDN .
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.
Speciale gevallen
Voor bepaalde productiescenario's zijn mogelijk aanvullende wijzigingen vereist of gelden extra beperkingen. Hoewel dergelijke scenario's niet vaak voorkomen, is het belangrijk om ervoor te zorgen dat ze niet van toepassing zijn op uw toepassing of juist 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 intern een toepassing met geplande taken 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 app code bevat met afhankelijkheden van het hostbesturingssysteem, moet u de app herstructureren om die afhankelijkheden te verwijderen. Zo moet u mogelijk de / of \ vervangen in bestandssysteempaden met File.Separator of Paths.get.
Alle externe processen/daemons bepalen die worden uitgevoerd op de productieserver(s)
Alle processen die buiten de toepassingsserver worden uitgevoerd, zoals controledaemons, moeten worden gemigreerd naar een andere locatie of worden verwijderd.
De verwerking van niet-HTTP-aanvragen of meerdere poorten identificeren
App Service ondersteunt slechts één HTTP-eindpunt op één poort. Als uw toepassing op meerdere poorten luistert of aanvragen accepteert met behulp van andere protocollen dan HTTP, gebruikt u geen Azure App Service.
Migratie
De configuratie parameteriseren
Zorg ervoor dat alle coördinaten van externe resources (zoals databaseverbindingsreeksen) en andere aanpasbare instellingen kunnen worden gelezen via omgevingsvariabelen. Als u een toepassing migreert Spring Boot toepassing, moeten alle configuratie-instellingen al extern kunnen worden gemaakt. Zie Externalized Configuration (Externe configuratie) in de documentatie Spring Boot informatie.
Hier volgt een voorbeeld van een verwijzing van omgevingsvariabele SERVICEBUS_CONNECTION_STRING uit een SERVICEBUS_CONNECTION_STRING-bestand:
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 serviceabonnementen het abonnement waarvan de specificaties voldoen aan of hoger zijn dan die van de huidige productiehardware.
Notitie
Als u van plan bent om faserings-/canary-implementaties uit te voeren of implementatiesleuven te gebruiken,moet het App Service die extra capaciteit bevatten. Het wordt aanbevolen om Premium-abonnementen of hoger te gebruiken voor Java-apps.
Web-apps maken en implementeren
U moet in uw App Service-plan (waarbij u 'Java SE' als de runtime-stack kiest) een web-app maken 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 Snelstart: Een Java-appmaken op Azure App Service voor meer Azure App Service.
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. Als dat mogelijk is, 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 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 is 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 Voor meer informatie Zelfstudie: Een bestaande aangepaste DNS-naam aan een Azure App Service.
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.
Coördinaten van externe resources en andere instellingen migreren
Volg deze stappen om verbindingsreeksen en andere instellingen te migreren.
Notitie
Voor de instellingen van Spring Boot-toepassingen die zijn geparameteriseerd met variabelen in de sectie De configuratie parameteriseren, moeten deze omgevingsvariabelen worden gedefinieerd in de toepassingsconfiguratie. Alle instellingen voor Spring Boot-toepassingen die niet expliciet zijn geparameteriseerd met omgevingsvariabelen, kunnen er wel door worden overschreven via Toepassingsconfiguratie. Bijvoorbeeld:
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.
Notitie
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 aan de hand van de volgende richtlijnen:
- Als de id-provider is Azure Active Directory, zijn er geen wijzigingen nodig.
- Als de id-provider een on-premises Active Directory forest is, kunt u overwegen om een hybride identiteitsoplossing te implementeren met Azure Active Directory. Zie de documentatie over hybride identiteit voor meer informatie.
- Als de id-provider een andere on-premises oplossing is, zoals PingFederate, raadpleegt u het onderwerp Aangepaste installatie van Azure AD Verbinding maken voor het configureren van federatie met Azure Active Directory. U kunt ook Spring Security gebruiken om uw id-provider te gebruiken via OAuth2/OpenID Verbinding maken of SAML.
Opnieuw opstarten 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. 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 map /home te gebruiken voor de bestandsopslag, kunt u deze het beste vervangen door Azure Storage.
Als uw configuratie in de map /home staat en deze verbindingsreeksen, SSL-sleutels en andere geheime gegevens bevat, kunt u het beste waar mogelijk Azure Key Vault en/of parameterinvoeging met toepassingsinstellingen gebruiken.
Gebruik implementatiesites 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 Implementatiesleuven gebruikt, kunt u de implementatie automatiseren in een sleuf, gevolgd door het wisselen van de sleuf.
Ontwerp en implementeer een strategie voor bedrijfscontinuïteit en herstel na noodgevallen. Voor essentiële apps kunt u het beste een implementatiearchitectuur voor meerdere regio's gebruiken.