Spring Boot-toepassingen migreren naar Azure Spring Apps

Notitie

Azure Spring Apps is de nieuwe naam voor de Azure Spring Cloud-service. Hoewel de service een nieuwe naam heeft, ziet u de oude naam op sommige plaatsen terwijl we werken aan het bijwerken van assets, zoals schermopnamen, video's en diagrammen.

In deze handleiding wordt beschreven waar u rekening mee moet houden wanneer u een bestaande Spring Boot-toepassing wilt migreren om te worden uitgevoerd in Azure Spring Apps.

Premigratie

Voltooi voordat u begint de evaluatie- en inventarisstappen die in de volgende secties worden beschreven om een geslaagde migratie te garanderen.

Als u niet aan een van deze vereisten vóór de migratie kunt voldoen, raadpleegt u de volgende aanvullende migratiehandleidingen:

  • Uitvoerbare JAR-toepassingen migreren naar containers in Azure Kubernetes Service (handleiding gepland)
  • Uitvoerbare JAR-toepassingen migreren naar Azure Virtual Machines (handleiding gepland)

Toepassingsonderdelen inspecteren

Lokale status identificeren

In PaaS-omgevingen wordt gegarandeerd dat er op elk moment precies één toepassing wordt uitgevoerd. Zelfs als u een toepassing configureert voor uitvoering in één exemplaar, kan in de volgende gevallen een duplicaatexemplaren worden gemaakt:

  • De toepassing moet worden verplaatst naar een fysieke host vanwege een fout of systeemupdate.
  • De toepassing wordt bijgewerkt.

In een van deze gevallen blijft het oorspronkelijke exemplaar actief totdat het nieuwe exemplaar is gestart. Dit heeft de volgende mogelijke aanzienlijke gevolgen voor uw toepassing:

  • Geen singleton kan gegarandeerd echt single zijn.
  • Alle gegevens die niet zijn bewaard naar externe opslag, gaan waarschijnlijk veel sneller verloren dan op één fysieke server of VIRTUELE machine.

Voordat u naar Azure Spring Apps migreert, moet u ervoor zorgen dat uw code geen lokale status bevat die niet verloren of gedupliceerd mag worden. Als de lokale status bestaat, wijzigt u de code om die status buiten de toepassing op te slaan. Cloudtoepassingen slaan doorgaans de toepassingsstatus op op locaties zoals de volgende:

Nagaan of en hoe het bestandssysteem wordt gebruikt

Zoek alle exemplaren waar uw services schrijven naar en/of lezen vanuit het lokale bestandssysteem. Bepaal waar korte-termijn-/tijdelijke bestanden worden geschreven en gelezen en waar langlevende bestanden worden geschreven en gelezen.

Notitie

Azure Spring Apps biedt 5 GB tijdelijke opslag per Azure Spring Apps-exemplaar, gekoppeld in /tmp. Als tijdelijke bestanden boven die limiet of op een andere locatie worden geschreven, zijn codewijzigingen vereist.

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 statische websitehosting in Azure Storage en quickstart: Een Azure-opslagaccount integreren met Azure CDN voor meer informatie.

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.

Bepalen of een van de services besturingssysteemspecifieke code bevat

Als uw toepassing code bevat met afhankelijkheden van het hostbesturingssysteem, moet u de toepassing herstructureren om die afhankelijkheden te verwijderen. Zo moet u mogelijk de / of \ vervangen in bestandssysteempaden met File.Separator of Paths.get.

Overschakelen naar een ondersteund platform

Azure Spring Apps biedt specifieke versies van Java en specifieke versies van Spring Boot en Spring Cloud. Om compatibiliteit te garanderen, migreert u eerst uw toepassing naar een van de ondersteunde versies van Java in de huidige omgeving en gaat u vervolgens verder met de resterende migratiestappen. 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

Zie Een toepassing voorbereiden voor implementatie in Azure Spring Apps voor ondersteunde versies van Java, Spring Boot en Spring Cloud, evenals instructies voor het bijwerken.

Bepalen of uw toepassing gebruikmaakt van geplande taken

Geplande taken, zoals Quartz Scheduler-taken of Unix Cron-taken, mogen niet worden gebruikt met Azure Spring Apps. Azure Spring Apps 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 die worden uitgevoerd op de productieserver(s), binnen of buiten de toepassingscode.

Spring Boot-versies identificeren

Bekijk de afhankelijkheden van elke toepassing die wordt gemigreerd om de Spring Boot-versie te bepalen.

Maven

In Maven-projecten wordt de Spring Boot-versie meestal gevonden in het <parent> element van het POM-bestand:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
Gradle

In Gradle-projecten wordt de Spring Boot-versie meestal gevonden in de plugins sectie, als de versie van de org.springframework.boot invoegtoepassing:

plugins {
  id 'org.springframework.boot' version '2.7.10'
  id 'io.spring.dependency-management' version '1.0.15.RELEASE'
  id 'java'
}

Voor toepassingen die Spring Boot 1.x gebruiken, volgt u de migratiehandleiding voor Spring Boot 2.0 om deze bij te werken naar een ondersteunde Spring Boot-versie. Zie de sectie Spring Boot- en Spring Cloud-versies van Een toepassing voorbereiden voor implementatie in Azure Spring Apps voor ondersteunde versies.

Oplossingen voor logboekaggregatie identificeren

Identificeer eventuele oplossingen voor logboekaggregatie die worden gebruikt door de toepassingen die u migreert. U moet diagnostische instellingen configureren in de migratie om geregistreerde gebeurtenissen beschikbaar te maken voor gebruik. Zie de sectie Logboekregistratie van de console controleren en diagnostische instellingen configureren voor meer informatie.

APM-agents (Application Performance Management) identificeren

Identificeer eventuele agents voor het bewaken van toepassingsprestaties die worden gebruikt met uw toepassingen. Azure Spring Apps ondersteunt integratie met Application Insights, New Relic, Elastic APM, Dynatrace en AppDynamics. Als de toepassing een ondersteunde APM gebruikt, configureert u de integratie in migratie. Als de toepassing geen ondersteunde APM gebruikt, kunt u in plaats daarvan Application Insights gebruiken. Zie de sectie Migratie voor meer informatie.

Externe resources inventariseren

Identificeer externe resources, zoals gegevensbronnen, JMS-bericht-brokers en URL's van andere services. In Spring Boot-toepassingen vindt u doorgaans de configuratie voor dergelijke resources in de map src/main/directory , in een bestand met de naam application.properties of application.yml.

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

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.0.4.0")
      ...
    }

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.

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=tryandguess

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: big$ecr3t

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).

Id-providers

Identificeer een of meer id-providers die door uw toepassing worden gebruikt. Raadpleeg het volgende voor informatie over hoe id-providers kunnen worden geconfigureerd:

Clients identificeren die afhankelijk zijn van een niet-standaardpoort

Azure Spring Apps overschrijft de server.port instelling in de geïmplementeerde toepassing. Als clients van de clients afhankelijk zijn van de toepassing die beschikbaar is op een andere poort dan 443, moet u deze wijzigen.

Alle andere externe resources

Het is niet haalbaar voor deze handleiding om elke mogelijke externe afhankelijkheid te documenteren. Na de migratie is het uw verantwoordelijkheid om te controleren of u aan elke externe afhankelijkheid van uw toepassing kunt voldoen.

Inventarisconfiguratiebronnen en -geheimen

Wachtwoorden en beveiligde tekenreeksen inventariseren

Controleer alle eigenschaps- en configuratiebestanden en alle omgevingsvariabelen in de productie-implementatie(s) op geheime tekenreeksen en wachtwoorden. In een Spring Boot-toepassing kunt u dergelijke tekenreeksen meestal vinden in het bestand 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>

De implementatiearchitectuur controleren

Hardwarevereisten voor elke service documenteer

Documenteer de volgende informatie voor uw Spring Boot-toepassing:

  • Het aantal exemplaren dat wordt uitgevoerd.
  • Het aantal CPU's dat aan elk exemplaar is toegewezen.
  • De hoeveelheid RAM die aan elk exemplaar is toegewezen.

Geo-replicatie/distributie document

Bepaal of uw Spring Boot-toepassingsexemplaren momenteel worden gedistribueerd tussen verschillende regio's of datacenters. Documenteer de uptimevereisten/SLA voor de toepassingen die u migreert.

Migratie

Een Azure Spring Apps-exemplaar en -apps maken

Richt een Azure Spring Apps-exemplaar in uw Azure-abonnement in als deze nog niet bestaat. Maak vervolgens daar een toepassing. Zie quickstart: Uw eerste toepassing implementeren in Azure Spring Apps voor meer informatie.

Logboekregistratie van de console controleren en diagnostische instellingen configureren

Configureer uw logboekregistratie zodat alle uitvoer wordt doorgestuurd naar de console en niet naar bestanden.

Nadat een toepassing is geïmplementeerd in Azure Spring Apps, voegt u een diagnostische instelling toe om geregistreerde gebeurtenissen beschikbaar te maken voor gebruik, bijvoorbeeld via Azure Monitor Log Analytics.

LogStash/ELK-stack

Als u LogStash/ELK Stack gebruikt voor logboekaggregatie, configureert u de diagnostische instelling om de console-uitvoer te streamen naar een Azure Event Hub. Gebruik vervolgens de LogStash EventHub-invoegtoepassing om vastgelegde gebeurtenissen op te nemen in LogStash.

Splunk

Als u Splunk gebruikt voor logboekaggregatie, configureert u de diagnostische instelling om de console-uitvoer naar Azure Blob Storage te streamen. Gebruik vervolgens de invoegtoepassing Splunk voor Microsoft Cloud Services om vastgelegde gebeurtenissen op te nemen in Splunk.

Permanente opslag configureren

Als een deel van uw toepassing leest of schrijft naar het lokale bestandssysteem, moet u permanente opslag configureren om het lokale bestandssysteem te vervangen. Zie Ingebouwde permanente opslag gebruiken in Azure Spring Apps voor meer informatie.

U moet tijdelijke bestanden naar de /tmp map schrijven. Voor onafhankelijkheid van het besturingssysteem kunt u deze map ophalen met behulp van System.getProperty("java.io.tmpdir"). U kunt ook java.nio.Files::createTempFile tijdelijke bestanden maken.

Alle certificaten migreren naar KeyVault

Azure Spring Apps biedt geen toegang tot het JRE-sleutelarchief, dus u moet certificaten migreren naar Azure KeyVault en de toepassingscode wijzigen voor toegang tot certificaten in KeyVault. Zie Aan de slag met Key Vault-certificaten en azure Key Vault Certificate-clientbibliotheek voor Java voor meer informatie.

APM-integraties (Application Performance Management) configureren

Azure Spring Apps biedt de volgende APM-integraties. Volg de koppelingen om de APM in te schakelen die u nodig hebt.

Als uw toepassing geen ondersteunde APM gebruikt, kunt u in plaats daarvan Application Insights gebruiken. Azure Spring Apps biedt uitgebreide integratie met Application Insights voor prestatiebeheer en realtime reactie op afwijkingen.

Clients en eindpunten voor metrische gegevens uitschakelen in uw toepassingen

Verwijder metrische gegevensclients die worden gebruikt of eindpunten voor metrische gegevens die beschikbaar zijn in uw toepassingen.

De toepassing implementeren

Implementeer elk van de gemigreerde microservices (inclusief de Spring Cloud-configuratie- en registerservers), zoals beschreven in quickstart: Uw eerste toepassing implementeren in Azure Spring Apps.

Geheimen per service en externe instellingen configureren

U kunt elke configuratie-instellingen per service in elke service injecteren als omgevingsvariabelen. Gebruik de volgende stappen in Azure Portal:

  1. Navigeer naar het Azure Spring Apps-exemplaar en selecteer Apps.
  2. Selecteer de service die u wilt configureren.
  3. Selecteer Configuratie.
  4. Voer de variabelen in die u wilt configureren.
  5. Selecteer Opslaan.

Spring Cloud App Configuration Settings

De id-provider migreren en inschakelen

Als voor een van de Spring Cloud-toepassingen verificatie of autorisatie is vereist, moet u ervoor zorgen dat deze zijn geconfigureerd voor toegang tot de id-provider:

  • 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 Verbinding maken onderwerp voor het configureren van federatie met Microsoft Entra ID. U kunt ook Spring Security gebruiken om uw id-provider te gebruiken via OAuth2/OpenID Verbinding maken of SAML.

De toepassing beschikbaar maken

Toepassingen die zijn geïmplementeerd in Azure Spring Apps, zijn standaard niet extern zichtbaar. U kunt uw toepassing beschikbaar maken door deze openbaar te maken met de volgende opdracht:

az spring app update --name <application name> --is-public true

Sla deze stap over als u een Spring Cloud Gateway gebruikt of wilt gebruiken. Zie de volgende onderwerpen voor meer informatie.

Postmigratie

Nu u de migratie hebt voltooid, controleert u of uw toepassing werkt zoals verwacht. U kunt uw toepassing vervolgens cloudeigender maken met behulp van de volgende aanbevelingen.

  • Overweeg uw toepassing in te schakelen voor gebruik met Spring Cloud Registry. Hierdoor kan uw toepassing dynamisch worden gedetecteerd door andere geïmplementeerde Spring-toepassingen en -clients. Zie Een toepassing voorbereiden voor implementatie in Azure Spring Apps voor meer informatie. Wijzig vervolgens alle toepassingsclients om de Spring Client Load Balancer te gebruiken. Hierdoor kan de client adressen verkrijgen van alle actieve exemplaren van de toepassing en een exemplaar zoeken dat werkt als een ander exemplaar beschadigd raakt of niet meer reageert. Zie Spring Tips: Spring Cloud Load Balancer in de Spring Blog voor meer informatie.

  • In plaats van uw toepassing openbaar te maken, kunt u overwegen een Spring Cloud Gateway-exemplaar toe te voegen. Spring Cloud Gateway biedt één eindpunt voor alle toepassingen die zijn geïmplementeerd in uw Azure Spring Apps-exemplaar. Als een Spring Cloud Gateway al is geïmplementeerd, moet u ervoor zorgen dat deze is geconfigureerd voor het routeren van verkeer naar uw zojuist geïmplementeerde toepassing.

  • Overweeg om een Spring Cloud-configuratieserver toe te voegen voor centraal beheer en configuratie van versiebeheer voor al uw Spring Cloud-toepassingen. Maak eerst een Git-opslagplaats voor het huis van de configuratie en configureer het Azure Spring Apps-exemplaar om deze te gebruiken. Zie Een Spring Cloud Config Server-exemplaar voor uw service instellen voor meer informatie. Migreer vervolgens uw configuratie met behulp van de volgende stappen:

    1. Maak in de map src/main/resources van de toepassing een bootstrap.yml-bestand met de volgende inhoud:

        spring:
          application:
            name: <your-application-name>
      
    2. Maak in de Git-opslagplaats voor de configuratie een <bestand your-application-name.yml>, waar your-application-name hetzelfde is als in de vorige stap. Verplaats de instellingen van het bestand application.yml in src/main/resources naar het nieuwe bestand dat u zojuist hebt gemaakt. Als de instellingen zich eerder in een .properties-bestand bevonden, converteert u deze eerst naar YAML. U vindt onlinehulpprogramma's of IntelliJ-invoegtoepassingen om deze conversie uit te voeren.

    3. Maak een application.yml-bestand in de bovenstaande map. U kunt dit bestand gebruiken om instellingen en resources te definiëren die worden gedeeld tussen alle toepassingen in het Azure Spring Apps-exemplaar. Dergelijke instellingen omvatten doorgaans gegevensbronnen, logboekregistratie-instellingen, Spring Boot Actuator-configuratie en andere.

    4. Voer deze wijzigingen door en push deze wijzigingen naar de Git-opslagplaats.

    5. Verwijder het bestand application.properties of application.yml uit de toepassing.

  • Overweeg om een implementatiepijplijn toe te voegen voor automatische, consistente implementaties. Er zijn instructies beschikbaar voor Azure Pipelines, voor GitHub Actions en voor Jenkins.

  • Overweeg faseringsimplementaties te gebruiken om codewijzigingen in productie te testen voordat ze beschikbaar zijn voor sommige of al uw eindgebruikers. Zie Een faseringsomgeving instellen in Azure Spring Apps voor meer informatie.

  • Overweeg servicebindingen toe te voegen om uw toepassing te verbinden met ondersteunde Azure-databases. Met deze servicebindingen hoeft u geen verbindingsgegevens, inclusief referenties, aan uw Spring Cloud-toepassingen op te geven.

  • Overweeg het gebruik van Azure-toepassing Insights om de prestaties en interacties van uw toepassingen te bewaken. Zie Application Insights Java In-Process Agent in Azure Spring Apps voor meer informatie.

  • Overweeg om waarschuwingsregels en actiegroepen van Azure Monitor toe te voegen om snel aberrante voorwaarden te detecteren en op te lossen. Zie Zelfstudie: Spring Cloud-resources bewaken met behulp van waarschuwingen en actiegroepen voor meer informatie.

  • Overweeg om de Azure Spring Apps-implementatie in een andere regio te repliceren voor lagere latentie en hogere betrouwbaarheid en fouttolerantie. Gebruik Azure Traffic Manager om de taakverdeling tussen implementaties te verdelen of Azure Front Door te gebruiken om SSL-offloading en Web Application Firewall toe te voegen met DDoS-beveiliging.

  • Als geo-replicatie niet nodig is, kunt u een Azure-toepassing-gateway toevoegen om SSL-offloading en Web Application Firewall toe te voegen met DDoS-beveiliging.