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:

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.

Maak het App Service-plan.

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

Toepassingsconfiguratie in App Service

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