Dela via


Migrera Spring Boot-program till Azure Container Apps

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 Container 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 körs den ursprungliga instansen tills den nya instansen har startats. Det här mönstret kan få följande potentiellt betydande konsekvenser för ditt program:

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

Innan du migrerar till Azure Container 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, till exempel följande alternativ:

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.

Azure Container Apps erbjuder flera typer av lagring. Tillfällig lagring kan läsa och skriva temporära data och vara tillgänglig för en container eller replik som körs. Azure File tillhandahåller permanent lagring och kan delas mellan flera containrar. Mer information finns i Använda lagringsmonteringar i Azure Container Apps.

Skrivskyddat statiskt innehåll

Om ditt program för närvarande hanterar statiskt innehåll behöver du en alternativ plats för det. Du kanske vill överväga att flytta statiskt innehåll 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 stöder statiskt innehåll, oavsett om det har laddats upp eller genererats av själva programmet, som förblir oförändrat efter att det har skapats, kan du integrera Azure Blob Storage och Azure CDN. Du kan också använda en Azure-funktion för att hantera uppladdningar och utlösa CDN-uppdateringar vid behov. 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 ditt program innehåller någon kod med beroenden på värdoperativsystemet måste du omstrukturera det för att ta bort dessa beroenden. Du kan till exempel behöva ersätta all användning av / eller \ i filsystemsökvägar med File.Separator eller Paths.get om programmet körs i Windows.

Växla till en plattform som stöds

Om du skapar din Dockerfile manuellt och distribuerar ett containerbaserat program till Azure Container Apps tar du fullständig kontroll över distributionen, inklusive JRE/JDK-versioner.

För distribution från artefakter erbjuder Azure Container Apps även specifika versioner av Java (8, 11, 17 och 21) och specifika versioner av Spring Boot- och Spring Cloud-komponenter. 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 Översikt över Java i Azure Container Apps.

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

Tillfälliga program som Unix cron-jobb eller kortvariga program som baseras på Spring Batch-ramverket ska köras som ett jobb i Azure Container Apps. Mer information finns i Jobb i Azure Container Apps. Om ditt program är ett tidskrävande program och utför uppgifter regelbundet med hjälp av ett schemaläggningsramverk som Quartz eller Spring Batch, kan Azure Container Apps vara värd för programmet. Programmet måste dock hantera skalning på lämpligt sätt för att undvika konkurrensförhållanden där samma programinstanser körs mer än en gång per schemalagd period under utskalning eller löpande uppgradering.

Inventera schemalagda aktiviteter som körs på produktionsservrarna, inom 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>3.3.3</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 '3.3.3'
  id 'io.spring.dependency-management' version '1.1.6'
  id 'java'
}

För alla program som använder Spring Boot-versioner före 3.x följer du Migreringsguiden för Spring Boot 2.0 eller Spring Boot 3.0 för att uppdatera dem till en Spring Boot-version som stöds. Mer information om vilka versioner som stöds finns i Spring Boot- och Spring Cloud-versionerna.

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 programprestandahanteringsagenter som används av dina program. Azure Containers Apps erbjuder inte inbyggt stöd för APM-integrering. Du måste förbereda containeravbildningen eller integrera APM-verktyget direkt i koden. Om du vill mäta programmets prestanda men inte har integrerat någon APM ännu kan du överväga att använda Azure Application Insights. 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/resources i en fil som vanligtvis kallas application.properties eller application.yml.

Databaser

För ett Spring Boot-program visas anslutningssträng vanligtvis i konfigurationsfiler när det är beroende av en extern databas. 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.4.0.5")
      ...
    }

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 application.properties och application.yml filer i programkatalogen.

Kommentar

Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Det autentiseringsflöde som beskrivs i den här proceduren, till exempel för databaser, cacheminnen, meddelanden eller AI-tjänster, kräver en mycket hög grad av förtroende för programmet och medför risker som inte finns i andra flöden. Använd endast det här flödet när säkrare alternativ, till exempel hanterade identiteter för lösenordslösa eller nyckellösa anslutningar, inte är genomförbara. För lokala datoråtgärder föredrar du användaridentiteter för lösenordslösa eller nyckellösa anslutningar.

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

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: <password>

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

Med Azure Container Apps kan du exponera porten enligt din Azure Container Apps-resurskonfiguration. Ett Spring Boot-program lyssnar till exempel på port 8080 som standard, men det kan ställas in med server.port eller miljövariabel efter SERVER_PORT behov.

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 Container Apps-miljö och distribuera appar

Etablera en Azure Container Apps-instans i din Azure-prenumeration. Dess säkra värdmiljö skapas tillsammans med den. För mer information, se Snabbstart: Distribuera din första containerapp med hjälp av Azure-portalen.

Se till att konsolen loggar och konfigurerar diagnostikinställningar

Konfigurera loggningen så att alla utdata dirigeras till konsolen i stället för till filer.

När ett program har distribuerats till Azure Container Apps kan du konfigurera loggningsalternativen i containerappmiljön för att definiera ett eller flera mål för loggarna. Dessa mål kan omfatta Azure Monitor Log Analytics, Azure Event Hub eller till och med andra övervakningslösningar från tredje part. Du kan också inaktivera loggdata och visa loggar endast vid körning. Detaljerade konfigurationsinstruktioner finns i Logglagrings- och övervakningsalternativ i Azure Container Apps.

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. Du kan ange sökvägen för att montera i containern via appinställningarna och justera den efter den sökväg som appen använder. Mer information finns i Använda lagringsmonteringar i Azure Container Apps.

Migrera alla certifikat till KeyVault

Azure Containers Apps stöder säker kommunikation mellan appar. Programmet behöver inte hantera processen för att upprätta säker kommunikation. Du kan ladda upp det privata certifikatet till Azure Container Apps eller använda ett kostnadsfritt hanterat certifikat som tillhandahålls av Azure Container Apps. Att använda Azure Key Vault för att hantera certifikat är en rekommenderad metod. Mer information finns i Certifikat i Azure Container Apps.

Konfigurera APM-integreringar (Application Performance Management)

Oavsett om din app distribueras från en containeravbildning eller från kod, påverkar Inte Azure Container Apps din avbildning eller kod. Integreringen av ditt program med ett APM-verktyg beror därför på dina egna inställningar och implementering.

Om ditt program inte använder en APM som stöds är Azure Application Insights ett alternativ. Mer information finns i Använda Azure Monitor Application Insights med Spring Boot.

Distribuera programmet

Distribuera var och en av de migrerade mikrotjänsterna (inklusive Spring Cloud Config Server och Spring Cloud Service Registry), enligt beskrivningen i Distribuera Azure Container Apps med kommandot az containerapp up.

Konfigurera hemligheter per tjänst och externaliserade inställningar

Du kan mata in konfigurationsinställningar i varje program som miljövariabler. Du kan ange dessa variabler som manuellt poster eller som referenser till hemligheter. Mer information om konfiguration finns i Hantera miljövariabler i Azure Container Apps.

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 Connect 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 Connect eller SAML.

Exponera programmet

Som standard är ett program som distribuerats till Azure Container Apps tillgängligt via en program-URL. Om din app distribueras i kontexten för en hanterad miljö med ett eget virtuellt nätverk måste du fastställa appens tillgänglighetsnivå för att endast tillåta offentlig ingress eller ingress från ditt virtuella nätverk. Mer information finns i Nätverk i Azure Container Apps-miljön.

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. Med den här komponenten kan ditt program identifieras dynamiskt av andra distribuerade Spring-program och -klienter. Mer information finns i Konfigurera inställningar för Eureka Server for Spring-komponenten i Azure Container Apps. Ändra sedan alla programklienter så att de använder Spring Client Load Balancer. Med Spring Client Load Balancer kan klienten hämta adresser till alla programinstanser som körs och hitta en instans som fungerar om en annan instans blir skadad eller inte svarar. 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 Container Apps-miljö. Om en Spring Cloud Gateway redan har distribuerats kontrollerar du att en routningsregel har konfigurerats 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 appinstansen så att den används. Mer information finns i Konfigurera inställningar för komponenten Config Server for Spring i Azure Container Apps. 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 konfiguration skapar du en <fil med ditt programnamn>.yml , där your-application-name är samma som i föregående steg. Flytta inställningarna från application.yml fil i src/main/resources till den nya fil som du 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 delas mellan alla program i Azure Container Apps-miljön. 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 den hanterade komponenten Admin för Spring för att aktivera ett administrativt gränssnitt för Spring Boot-webbprogram som exponerar aktuatorslutpunkter. Mer information finns i Konfigurera Spring Boot Admin-komponenten i Azure Container Apps.

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

  • Överväg att använda ändringar, revisionsetiketter och inkommande trafikvikter för att aktivera blågrön distribution, vilket gör att du kan testa kodändringar i produktion innan de görs tillgängliga för vissa eller alla dina slutanvändare. Mer information finns i Blågrön distribution i Azure Container 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 aktivera Java-utvecklingsstacken för att samla in JVM-kärnmått för dina program. Mer information finns i Java-mått för Java-appar i Azure Container 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 Konfigurera aviseringar i Azure Container Apps.

  • Överväg att replikera din app mellan zonerna i regionen genom att aktivera redundans för Azure Container Apps-zonen. Trafiken lastbalanseras och dirigeras automatiskt till repliker om ett zonavbrott inträffar. Mer information om redundanta inställningar finns i Tillförlitlighet i Azure Container Apps.

  • Överväg att skydda Azure Container Apps från vanliga sårbarheter och sårbarheter med hjälp av Brandvägg för webbprogram på Application Gateway. Mer information finns i Skydda Azure Container Apps med brandväggen för webbprogram på Application Gateway.