Dela via


Migrera Spring Cloud-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 Cloud-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

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.

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. För versioner som stöds, se Spring Cloud-dokumentationen.

Identifiera Spring Cloud-versioner

Granska beroendena för varje program som du migrerar för att fastställa vilken version av Spring Cloud-komponenter som används.

Maven

I Maven-projekt anges Spring Cloud-versionen vanligtvis i egenskapen spring-cloud.version :

  <properties>
    <spring-cloud.version>2023.0.2</spring-cloud.version>
  </properties>
Gradle

I Gradle-projekt anges Spring Cloud-versionen vanligtvis i blocket "extra egenskaper":

ext {
  set('springCloudVersion', "2023.0.2")
}

Du måste uppdatera alla program så att de använder versioner av Spring Cloud som stöds. För versioner som stöds, se Spring Cloud-dokumentationen.

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 Cloud-program kan du vanligtvis hitta konfigurationen för sådana resurser på någon av följande platser:

  • I mappen src/main/resources i en fil som vanligtvis kallas application.properties eller application.yml.
  • I Spring Cloud Config Server-lagringsplatsen som du identifierade i föregående steg.

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 Cloud-program kan du vanligtvis hitta dem i application.properties och application.yml filer i programkatalogen eller på Spring Cloud Config Server-lagringsplatsen.

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 alla identitetsprovidrar och alla Spring Cloud-program som kräver autentisering och/eller auktorisering. Information om hur du kan konfigurera identitetsprovidrar finns i följande resurser:

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

Resurser som konfigurerats via VMware Tanzu Application Service (TAS) (tidigare Pivotal Cloud Foundry)

För program som hanteras med TAS konfigureras externa resurser, inklusive de resurser som beskrevs tidigare, ofta via TAS-tjänstbindningar. Om du vill undersöka konfigurationen för sådana resurser använder du TAS (Cloud Foundry) CLI för att visa variabeln VCAP_SERVICES för programmet.

# Log into TAS, if needed (enter credentials when prompted)
cf login -a <API endpoint>

# Set the organization and space containing the application, if not already selected during login.
cf target org <organization name>
cf target space <space name>

# Display variables for the application
cf env <Application Name>

Granska variabeln VCAP_SERVICES för konfigurationsinställningar för externa tjänster som är bundna till programmet. Mer information finns i TAS-dokumentationen (Cloud Foundry).

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 i produktionsdistributionerna för eventuella hemliga strängar och lösenord. I ett Spring Cloud-program kan du vanligtvis hitta sådana strängar i application.properties eller application.yml fil i enskilda tjänster eller på Spring Cloud Config Server-lagringsplatsen.

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>

Avgöra om Spring Cloud Vault används

Om du använder Spring Cloud Vault för att lagra och komma åt hemligheter identifierar du det säkerhetskopierade hemlighetsarkivet (till exempel HashiCorp Vault eller CredHub). Identifiera sedan alla hemligheter som används av programkoden.

Leta upp konfigurationsserverkällan

Om ditt program använder en Spring Cloud-konfigurationsserver identifierar du var konfigurationen lagras. Du hittar vanligtvis den här inställningen i filen bootstrap.yml eller bootstrap.properties , eller ibland i filen application.yml eller application.properties . Inställningen ser ut som i följande exempel:

spring.cloud.config.server.git.uri: file://${user.home}/spring-cloud-config-repo

Git används oftast som Spring Cloud Config Server-säkerhetskopieringsdatalager, vilket visades tidigare, men en av de andra möjliga serverdelarna kan användas. Se Spring Cloud Config Server-dokumentationen för information om andra serverdelar, till exempel Relationsdatabas (JDBC), SVN och det lokala filsystemet.

Granska distributionsarkitekturen

Dokumentera maskinvarukrav för varje tjänst

För var och en av dina Spring Cloud-tjänster (inklusive konfigurationsservern, registret eller gatewayen) dokumenterar du följande information:

  • 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 Spring Cloud-programmen för närvarande är distribuerade mellan flera regioner eller datacenter. Dokumentera drifttidskrav/serviceavtal för de program som du migrerar.

Identifiera klienter som kringgår tjänstregistret

Identifiera alla klientprogram som anropar någon av de tjänster som ska migreras utan att använda Spring Cloud Service Registry. Efter migreringen är sådana anrop inte längre möjliga. Uppdatera sådana klienter så att de använder Spring Cloud OpenFeign före migreringen.

Migrering

Ta bort begränsade konfigurationer

Azure Container Apps-miljön erbjuder hanterad Eureka Server, Spring Cloud Config Server och Admin. När ett program är bundet till Java-komponenten matar Azure Container Apps in relaterade egenskaper som systemmiljövariabler. Enligt Spring Boot Externalized Configuration-designen skrivs programegenskaper som definierats i din kod eller paketerade i artefakter över av systemmiljövariabler.

Om du anger någon av följande egenskaper via kommandoradsargument, en Java-systemegenskap eller containerns miljövariabel måste du ta bort den för att undvika konflikter och oväntat beteende:

  • SPRING_CLOUD_CONFIG_COMPONENT_URI
  • SPRING_CLOUD_CONFIG_URI
  • SPRING_CONFIG_IMPORT
  • eureka.client.fetch-registry
  • eureka.client.service-url.defaultZone
  • eureka.instance.prefer-ip-address
  • eureka.client.register-with-eureka
  • SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP
  • SPRING_BOOT_ADMIN_CLIENT_URL

Skapa en hanterad miljö och appar i Azure Container Apps

Etablera en Azure Container Apps-app i din Azure-prenumeration i en befintlig hanterad miljö eller skapa en ny för varje tjänst som du migrerar. Du behöver inte skapa appar som körs som Spring Cloud-register- och konfigurationsservrar. För mer information, se Snabbstart: Distribuera din första containerapp med hjälp av Azure-portalen.

Förbereda Spring Cloud-konfigurationsservern

Konfigurera konfigurationsservern i din Azure Container Apps for Spring-komponent. Mer information finns i Konfigurera inställningar för komponenten Config Server for Spring i Azure Container Apps.

Kommentar

Om din aktuella Spring Cloud Config-lagringsplats finns i det lokala filsystemet eller lokalt måste du först migrera eller replikera konfigurationsfilerna till en molnbaserad lagringsplats, till exempel GitHub, Azure Repos eller BitBucket.

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 Spring Cloud Vault-hemligheter till Azure KeyVault

Du kan mata in hemligheter direkt i program via Spring med hjälp av Azure KeyVault Spring Boot Starter. Mer information finns i Använda Spring Boot Starter för Azure Key Vault.

Kommentar

Migrering kan kräva att du byter namn på vissa hemligheter. Uppdatera programkoden i enlighet med detta.

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)

Om du redan har konfigurerat APM-relaterade variabler i containern behöver du bara se till att anslutningen till APM-målplattformen kan upprättas. Om APM-konfigurationen refererar till miljövariabler från containern måste du ange miljövariablerna för körningsmiljön i Azure Container Apps. Känslig information, till exempel anslutningssträng, bör hanteras på ett säkert sätt. Du kan antingen ange den som en hemlighet eller referera till en hemlighet som lagras i Azure Key Vault.

Konfigurera hemligheter per tjänst och externaliserade inställningar

Du kan mata in konfigurationsinställningar i varje container som miljövariabler. Eventuella ändringar i variablerna skapar en ny revision för den befintliga appen. Hemligheter är nyckel/värde-par och förblir giltiga för alla revisioner.

Migrera och aktivera identitetsprovidern

Om något av Spring Cloud-programmen kräver autentisering eller auktorisering använder du följande riktlinjer för att säkerställa 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. Vägledning 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.

Uppdatera klientprogram

Uppdatera konfigurationen av alla klientprogram för att använda de publicerade Azure Container Apps-slutpunkterna för migrerade program.

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.

  • Om dina program använder äldre Spring Cloud Netflix-komponenter kan du överväga att ersätta dem med aktuella alternativ, som du ser i följande tabell:

    Legacy Befintliga
    Spring Cloud Eureka Spring Cloud Service Registry
    Spring Cloud Netflix Zuul Spring Cloud Gateway
    Spring Cloud Netflix Archaius Spring Cloud Config Server
    Spring Cloud Netflix-menyfliksområdet Spring Cloud Load Balancer (lastbalanserare på klientsidan)
    Spring Cloud Hystrix Spring Cloud Circuit Breaker + Resilience4J
    Spring Cloud Netflix Turbine Mikrometer + Prometheus