Migrera Spring Boot-program till Azure Spring Apps

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

Den här guiden beskriver vad du bör känna till när du vill migrera ett befintligt Spring Boot-program som ska köras i Azure Spring Apps.

Före migrering

För att säkerställa en lyckad migrering slutför du de utvärderings- och inventeringssteg som beskrivs i följande avsnitt innan du börjar.

Om du inte kan uppfylla något av dessa krav före migreringen kan du läsa följande kompletterande migreringsguider:

  • Migrera körbara JAR-program till containrar i Azure Kubernetes-tjänsten (planerad guide)
  • Migrera körbara JAR-program till virtuella Azure-datorer (planerad guide)

Granska programkomponenter

Identifiera lokalt tillstånd

I PaaS-miljöer kommer inget program garanterat att köras exakt en gång vid en viss tidpunkt. Även om du konfigurerar ett program att köras i en enda instans kan du skapa en duplicerad instans i följande fall:

  • Programmet måste flyttas till en fysisk värd på grund av fel eller systemuppdatering.
  • Programmet uppdateras.

I något av dessa fall fortsätter den ursprungliga instansen att köras tills den nya instansen har startats. Detta har följande potentiellt betydande konsekvenser för ditt program:

  • Ingen singleton kan garanteras vara riktigt enkel.
  • Data som inte har sparats utanför lagringen kommer sannolikt att gå förlorade långt tidigare än på en enda fysisk server eller virtuell dator.

Innan du migrerar till Azure Spring Apps kontrollerar du att koden inte innehåller ett lokalt tillstånd som inte får gå förlorat eller dupliceras. Om det finns ett lokalt tillstånd ändrar du koden så att den lagrar det tillståndet utanför programmet. Molnklara program lagrar vanligtvis programtillstånd på platser som följande:

Kontrollera om och hur filsystemet används

Hitta alla instanser där dina tjänster skriver till och/eller läser från det lokala filsystemet. Identifiera var kortsiktiga/tillfälliga filer skrivs och läss och var långlivade filer skrivs och läss.

Kommentar

Azure Spring Apps tillhandahåller 5 GB tillfällig lagring per Azure Spring Apps-instans, monterad i /tmp. Om temporära filer skrivs utöver den gränsen eller på en annan plats krävs kodändringar.

Skrivskyddat statiskt innehåll

Om ditt program för tillfället hanterar statiskt innehåll behöver du en alternativ plats för det. Du kanske kan tänka dig att flytta det statiska innehållet till Azure Blob Storage och lägga till Azure CDN för blixtsnabba nedladdningar globalt. Mer information finns i Värd för statiska webbplatser i Azure Storage och snabbstart: Integrera ett Azure Storage-konto med Azure CDN.

Dynamiskt publicerat statiskt innehåll

Om ditt program tillåter att statiskt innehåll laddas upp/skapas av ditt program, men inte kan ändras efter att det har skapats, så kan du använda Azure Blob Storage och Azure CDN enligt beskrivningen ovan, med en Azure-funktion för hantering av överföringar och CDN-uppdateringar. Vi har tillhandahållit en exempelimplementering som du kan använda i Överföra och CDN-för inläsa statiskt innehåll med Azure Functions.

Avgöra om någon av tjänsterna innehåller OS-specifik kod

Om programmet innehåller en kod med beroenden i värdoperativsystemet måste du omstrukturera det för att ta bort dessa beroenden. Du kan exempelvis bli tvungen att ersätta all användning av / eller \ i filsystemets sökvägar med File.Separator eller Paths.get.

Växla till en plattform som stöds

Azure Spring Apps erbjuder specifika versioner av Java och specifika versioner av Spring Boot och Spring Cloud. För att säkerställa kompatibilitet migrerar du först programmet till en av de versioner av Java som stöds i den aktuella miljön och fortsätter sedan med de återstående migreringsstegen. Var noga med att testa den resulterande konfigurationen fullt ut. Använd den senaste stabila versionen av Linux-distributionen i sådana tester.

Kommentar

Den här verifieringen är särskilt viktig om den aktuella servern körs på en JDK som inte stöds (till exempel Oracle JDK eller IBM OpenJ9).

Du får den aktuella Java-versionen genom att logga in på din produktionsserver och köra följande kommando:

java -version

För versioner av Java, Spring Boot och Spring Cloud som stöds, samt instruktioner för uppdatering, se Förbereda ett program för distribution i Azure Spring Apps.

Ta reda på om programmet är beroende av schemalagda jobb

Schemalagda jobb, till exempel Quartz Scheduler-uppgifter eller Unix cron-jobb, ska INTE användas med Azure Spring Apps. Azure Spring Apps hindrar dig inte från att distribuera ett program som innehåller schemalagda uppgifter internt. Om ditt program skalas ut kan dock samma schemalagda jobb köras mer än en gång per schemalagd period. Den här situationen kan leda till oönskade konsekvenser.

Inventera schemalagda aktiviteter som körs på produktionsservrarna, i eller utanför programkoden.

Identifiera Spring Boot-versioner

Granska beroendena för varje program som migreras för att fastställa dess Spring Boot-version.

Maven

I Maven-projekt finns Spring Boot-versionen vanligtvis i elementet <parent> i POM-filen:

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

I Gradle-projekt finns Spring Boot-versionen vanligtvis i plugins avsnittet som version av plugin-programmet org.springframework.boot :

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

För alla program som använder Spring Boot 1.x följer du migreringsguiden för Spring Boot 2.0 för att uppdatera dem till en Spring Boot-version som stöds. För versioner som stöds, se avsnittet Spring Boot- och Spring Cloud-versioner i Förbereda ett program för distribution i Azure Spring Apps.

Identifiera loggaggregeringslösningar

Identifiera eventuella loggaggregeringslösningar som används av de program som du migrerar. Du måste konfigurera diagnostikinställningar under migreringen för att göra loggade händelser tillgängliga för förbrukning. Mer information finns i avsnittet Kontrollera konsolloggning och konfigurera diagnostikinställningar .

Identifiera APM-agenter (Application Performance Management)

Identifiera alla programprestandaövervakningsagenter som används med dina program. Azure Spring Apps stöder integrering med Application Insights, New Relic, Elastic APM, Dynatrace och AppDynamics. Om programmet använder en APM som stöds konfigurerar du integreringen i migreringen. Om programmet inte använder en APM som stöds kan du överväga att använda Application Insights i stället. Mer information finns i avsnittet Migrering .

Inventera externa resurser

Identifiera externa resurser, till exempel datakällor, asynkrona JMS-meddelandetjänster och URL:er för andra tjänster. I Spring Boot-program kan du vanligtvis hitta konfigurationen för sådana resurser i mappen src/main/directory i en fil som vanligtvis kallas application.properties eller application.yml.

Databaser

Identifiera anslutningssträngen för alla SQL-databaser.

För ett Spring Boot-program visas anslutningssträngar vanligtvis i konfigurationsfiler.

Här är ett exempel från en application.properties-fil:

spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Här är ett exempel från en application.properties-fil:

spring:
  data:
    mongodb:
      uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017

Mer möjliga konfigurationsscenarier finns i Spring Data-dokumentationen:

JMS-meddelandeköer

Identifiera den asynkronisering eller asynkronisering som används genom att titta i versionsmanifestet (vanligtvis en pom.xml - eller build.gradle-fil ) för relevanta beroenden.

Till exempel skulle ett Spring Boot-program som använder ActiveMQ vanligtvis innehålla det här beroendet i sin pom.xml-fil :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

Spring Boot-program som använder kommersiella asynkroniseringar innehåller vanligtvis beroenden direkt på koordinatorernas JMS-drivrutinsbibliotek. Här är ett exempel från en build.gradle-fil:

    dependencies {
      ...
      compile("com.ibm.mq:com.ibm.mq.allclient:9.0.4.0")
      ...
    }

När du har identifierat den asynkrona meddelandekö eller de asynkrona koordinatorer som används hittar du motsvarande inställningar. I Spring Boot-program kan du vanligtvis hitta dem i filerna application.properties och application.yml i programkatalogen.

Här är ett ActiveMQ-exempel från en application.properties-fil :

spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=tryandguess

Mer information om ActiveMQ-konfiguration finns i dokumentationen om Spring Boot-meddelanden.

Här är ett IBM MQ-exempel från en application.yaml-fil :

ibm:
  mq:
    queueManager: qm1
    channel: dev.ORDERS
    connName: localhost(14)
    user: admin
    password: big$ecr3t

Mer information om IBM MQ-konfiguration finns i dokumentationen för IBM MQ Spring-komponenter.

Identifiera externa cacheminnen

Identifiera eventuella externa cacheminnen som används. Redis används ofta via Spring Data Redis. Konfigurationsinformation finns i Spring Data Redis-dokumentationen.

Avgör om sessionsdata cachelagras via Spring Session genom att söka efter respektive konfiguration (i Java eller XML).

Identitetsprovidrar

Identifiera identitetsproviders som används av ditt program. Information om hur identitetsprovidrar kan konfigureras finns i följande:

  • Information om OAuth2-konfiguration finns i Spring Security-referensen.
  • För Auth0 Spring Security-konfiguration, se dokumentationen om Auth0 Spring Security.
  • Information om Konfiguration av PingFederate Spring Security finns i Auth0 PingFederate-instruktionerna.

Identifiera klienter som förlitar sig på en port som inte är standard

Azure Spring Apps skriver server.port över inställningen i det distribuerade programmet. Om klienternas klienter förlitar sig på att programmet är tillgängligt på en annan port än 443 måste du ändra dem.

Alla andra externa resurser

Det är inte möjligt för den här guiden att dokumentera alla möjliga externa beroenden. Efter migreringen är det ditt ansvar att kontrollera att du kan uppfylla alla externa beroenden för ditt program.

Inventeringskonfigurationskällor och hemligheter

Inventera lösenord och säkra strängar

Kontrollera alla egenskaper och konfigurationsfiler och alla miljövariabler för produktionsdistribution (er) för eventuella hemliga strängar och lösenord. I ett Spring Boot-program kan du vanligtvis hitta sådana strängar i filen application.properties eller application.yml .

Inventera certifikat

Dokumentera alla certifikat som används för offentliga SSL-slutpunkter eller kommunikation med serverdelsdatabaser och andra system. Du kan visa alla certifikat på produktionsservrarna genom att köra följande kommando:

keytool -list -v -keystore <path to keystore>

Granska distributionsarkitekturen

Dokumentera maskinvarukrav för varje tjänst

Dokumentera följande information för ditt Spring Boot-program:

  • Antalet instanser som körs.
  • Antalet processorer som allokerats till varje instans.
  • Mängden RAM-minne som allokerats till varje instans.

Dokumentera geo-replikering/distribution

Avgör om dina Spring Boot-programinstanser för närvarande är distribuerade mellan flera regioner eller datacenter. Dokumentera drifttidskrav/serviceavtal för de program som du migrerar.

Migrering

Skapa en Azure Spring Apps-instans och -appar

Etablera en Azure Spring Apps-instans i din Azure-prenumeration om det inte redan finns någon. Skapa sedan ett program där. Mer information finns i Snabbstart: Distribuera ditt första program till Azure Spring Apps.

Se till att konsolen loggar och konfigurerar diagnostikinställningar

Konfigurera loggningen så att alla utdata dirigeras till konsolen och inte till filer.

När ett program har distribuerats till Azure Spring Apps lägger du till en diagnostikinställning för att göra loggade händelser tillgängliga för förbrukning, till exempel via Azure Monitor Log Analytics.

LogStash/ELK Stack

Om du använder LogStash/ELK Stack för loggaggregering konfigurerar du diagnostikinställningen för att strömma konsolutdata till en Azure Event Hub. Använd sedan Plugin-programmet LogStash EventHub för att mata in loggade händelser i LogStash.

Splunk

Om du använder Splunk för loggaggregering konfigurerar du diagnostikinställningen för att strömma konsolutdata till Azure Blob Storage. Använd sedan Splunk-tillägget för Microsoft Cloud Services för att mata in loggade händelser i Splunk.

Konfigurera beständig lagring

Om någon del av programmet läser eller skriver till det lokala filsystemet måste du konfigurera beständig lagring för att ersätta det lokala filsystemet. Mer information finns i Använda inbyggd beständig lagring i Azure Spring Apps.

Du bör skriva temporära filer till /tmp katalogen. För operativsystemets oberoende kan du hämta den här katalogen med hjälp System.getProperty("java.io.tmpdir")av . Du kan också använda java.nio.Files::createTempFile för att skapa temporära filer.

Migrera alla certifikat till KeyVault

Azure Spring Apps ger inte åtkomst till JRE-nyckelarkivet, så du måste migrera certifikat till Azure KeyVault och ändra programkoden för att få åtkomst till certifikat i KeyVault. Mer information finns i Komma igång med Key Vault-certifikat och Azure Key Vault-certifikatklientbibliotek för Java.

Konfigurera APM-integreringar (Application Performance Management)

Azure Spring Apps erbjuder följande APM-integreringar. Följ länkarna för att aktivera den APM du behöver.

Om ditt program inte använder en APM som stöds kan du överväga att använda Application Insights i stället. Azure Spring Apps erbjuder djupgående integrering med Application Insights för prestandahantering och realtidssvar på avvikelser.

Inaktivera måttklienter och slutpunkter i dina program

Ta bort alla måttklienter som används eller eventuella måttslutpunkter som exponeras i dina program.

Distribuera programmet

Distribuera var och en av de migrerade mikrotjänsterna (inklusive Spring Cloud-konfigurations- och registerservrarna), enligt beskrivningen i Snabbstart: Distribuera ditt första program till Azure Spring Apps.

Konfigurera hemligheter per tjänst och externaliserade inställningar

Du kan mata in alla konfigurationsinställningar per tjänst i varje tjänst som miljövariabler. Använd följande steg i Azure-portalen:

  1. Gå till Azure Spring Apps-instansen och välj Appar.
  2. Välj den tjänst som ska konfigureras.
  3. Välj Konfiguration.
  4. Ange de variabler som ska konfigureras.
  5. Välj Spara.

Spring Cloud App Configuration Settings

Migrera och aktivera identitetsprovidern

Om något av Spring Cloud-programmen kräver autentisering eller auktorisering kontrollerar du att de är konfigurerade för åtkomst till identitetsprovidern:

  • Om identitetsprovidern är Microsoft Entra-ID bör inga ändringar behövas.
  • Om identitetsprovidern är en lokal Active Directory skog bör du överväga att implementera en hybrididentitetslösning med Microsoft Entra-ID. Mer information finns i dokumentationen om hybrididentiteter.
  • Om identitetsprovidern är en annan lokal lösning, till exempel PingFederate, läser du avsnittet Anpassad installation av Microsoft Entra Anslut för att konfigurera federation med Microsoft Entra-ID. Du kan också överväga att använda Spring Security för att använda din identitetsprovider via OAuth2/OpenID Anslut eller SAML.

Exponera programmet

Som standard visas inte program som distribueras till Azure Spring Apps externt. Du kan exponera programmet genom att göra det offentligt med följande kommando:

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

Hoppa över det här steget om du använder eller tänker använda en Spring Cloud Gateway. Mer information finns i följande avsnitt:

Efter migreringen

Nu när du har slutfört migreringen kontrollerar du att programmet fungerar som förväntat. Du kan sedan göra ditt program mer molnbaserat med hjälp av följande rekommendationer.

  • Överväg att aktivera programmet så att det fungerar med Spring Cloud Registry. Detta gör att ditt program kan identifieras dynamiskt av andra distribuerade Spring-program och -klienter. Mer information finns i Förbereda ett program för distribution i Azure Spring Apps. Ändra sedan alla programklienter så att de använder Spring Client Load Balancer. På så sätt kan klienten hämta adresser till alla programinstanser som körs och hitta en instans som fungerar om en annan instans blir skadad eller svarar inte. Mer information finns i Spring Tips: Spring Cloud Load Balancer i Vårbloggen.

  • I stället för att göra ditt program offentligt bör du överväga att lägga till en Spring Cloud Gateway-instans . Spring Cloud Gateway tillhandahåller en enda slutpunkt för alla program som distribueras i din Azure Spring Apps-instans. Om en Spring Cloud Gateway redan har distribuerats kontrollerar du att den är konfigurerad för att dirigera trafik till ditt nyligen distribuerade program.

  • Överväg att lägga till en Spring Cloud Config-server för central hantering och versionskontrollkonfiguration för alla dina Spring Cloud-program. Skapa först en Git-lagringsplats där konfigurationen finns och konfigurera Azure Spring Apps-instansen så att den används. Mer information finns i Konfigurera en Spring Cloud Config Server-instans för din tjänst. Migrera sedan konfigurationen med hjälp av följande steg:

    1. I programmets katalog src/main/resources skapar du en bootstrap.yml-fil med följande innehåll:

        spring:
          application:
            name: <your-application-name>
      
    2. I git-lagringsplatsen för konfigurationen skapar du en <filen your-application-name.yml>, där your-application-name är samma som i föregående steg. Flytta inställningarna från filen application.yml i src/main/resources till den nya fil som du nyss skapade. Om inställningarna tidigare fanns i en .properties-fil konverterade du dem till YAML först. Du hittar onlineverktyg eller IntelliJ-plugin-program för att utföra den här konverteringen.

    3. Skapa en application.yml-fil i katalogen ovan. Du kan använda den här filen för att definiera inställningar och resurser som ska delas mellan alla program i Azure Spring Apps-instansen. Sådana inställningar omfattar vanligtvis datakällor, loggningsinställningar, Spring Boot-aktuatorkonfiguration och andra.

    4. Checka in och skicka ändringarna till Git-lagringsplatsen.

    5. Ta bort filen application.properties eller application.yml från programmet.

  • Överväg att lägga till en distributionspipeline för automatiska och konsekventa distributioner. Instruktioner är tillgängliga för Azure Pipelines, för GitHub Actions och för Jenkins.

  • Överväg att använda mellanlagringsdistributioner för att testa kodändringar i produktion innan de är tillgängliga för vissa eller alla dina slutanvändare. Mer information finns i Konfigurera en mellanlagringsmiljö i Azure Spring Apps.

  • Överväg att lägga till tjänstbindningar för att ansluta ditt program till Azure-databaser som stöds. Dessa tjänstbindningar eliminerar behovet av att tillhandahålla anslutningsinformation, inklusive autentiseringsuppgifter, till dina Spring Cloud-program.

  • Överväg att använda Azure Application Insights för att övervaka prestanda och interaktioner för dina program. Mer information finns i Application Insights Java In-Process Agent i Azure Spring Apps.

  • Överväg att lägga till Azure Monitor-aviseringsregler och åtgärdsgrupper för att snabbt identifiera och hantera avvikande villkor. Mer information finns i Självstudie: Övervaka Spring Cloud-resurser med hjälp av aviseringar och åtgärdsgrupper.

  • Överväg att replikera Azure Spring Apps-distributionen i en annan region för lägre svarstid och högre tillförlitlighet och feltolerans. Använd Azure Traffic Manager för att belastningsutjämna mellan distributioner eller använda Azure Front Door för att lägga till SSL-avlastning och brandvägg för webbprogram med DDoS-skydd.

  • Om geo-replikering inte behövs kan du överväga att lägga till en Azure Application Gateway för att lägga till SSL-avlastning och brandvägg för webbprogram med DDoS-skydd.