Migrace aplikací Spring Boot do Azure Container Apps

Tato příručka popisuje, o čem byste měli vědět, když chcete migrovat existující aplikaci Spring Boot, která se má spouštět na Azure Container Apps.

Před migrací

Pokud chcete zajistit úspěšnou migraci, dokončete kroky posouzení a inventáře popsané v následujících částech.

Pokud nemůžete splnit žádné z těchto požadavků na předběžnou migraci, projděte si následující doprovodné příručky k migraci:

  • Migrace spustitelných aplikací JAR do kontejnerů na Azure Kubernetes Service (plánované pokyny)
  • Migrace spustitelných aplikací JAR do Azure Virtual Machines (plánované pokyny)

Kontrola komponent aplikace

Identifikace místního stavu

Na prostředích PaaS neexistuje záruka, že aplikace poběží přesně jednou v daném čase. I když nakonfigurujete aplikaci tak, aby běžela v jedné instanci, můžete vytvořit duplicitní instanci v následujících případech:

  • Aplikace musí být přesunuta na fyzického hostitele kvůli selhání nebo aktualizaci systému.
  • Aplikace se aktualizuje.

V každém z těchto případů zůstane původní instance spuštěná, dokud se nová instance nedokončí. Tento model může mít následující potenciálně významné důsledky pro vaši aplikaci:

  • Žádný singleton nemůže být zaručen, že je skutečně jediný.
  • Jakákoli data, která se neuchovávají mimo úložiště, budou pravděpodobně ztracena dříve, než by byla na jednom fyzickém serveru nebo virtuálním počítači.

Před migrací na Azure Container Apps se ujistěte, že váš kód neobsahuje místní stav, který nesmí být ztracen nebo duplikován. Pokud existuje místní stav, změňte kód tak, aby tento stav uložil mimo aplikaci. Aplikace připravené pro cloud obvykle ukládají stav aplikace do umístění, jako jsou například následující možnosti:

Určení, jestli a jak se používá systém souborů

Vyhledejte všechny instance, ve kterých vaše služby zapisují nebo čtou z místního systému souborů. Určete, kde se krátkodobé/dočasné soubory zapisují a čtou a kde se zapisují a čtou dlouhodobé soubory.

Azure Container Apps nabízí několik typů úložiště. Dočasné úložiště může číst a zapisovat dočasná data a být k dispozici pro spuštěný kontejner nebo repliku. Azure Soubor poskytuje trvalé úložiště a dá se sdílet napříč několika kontejnery. Další informace najdete v tématu Použití připojení úložiště v Azure Container Apps.

Statický obsah jen pro čtení

Pokud vaše aplikace aktuálně obsluhuje statický obsah, potřebujete pro ni alternativní umístění. Možná budete chtít přesunout statický obsah do Azure Blob Storage a přidat Azure CDN pro bleskově rychlé stahování globálně. Další informace najdete v tématu Statické hostování webů v Azure Storage a Quickstart: Integrace účtu Azure storage s Azure CDN.

Dynamicky publikovaný statický obsah

Pokud vaše aplikace podporuje statický obsah bez ohledu na to, jestli je aplikace nahraná nebo vygenerovaná samotnou aplikací, která po jejím vytvoření zůstane beze změny, můžete integrovat Azure Blob Storage a Azure CDN. Funkci Azure můžete také použít ke správě nahrávání a aktivaci aktualizací CDN v případě potřeby. Poskytli jsme ukázkovou implementaci pro vaše použití na Nahrávání a předběžné načítání statického obsahu pomocí Azure Functions.

Určení, jestli některá ze služeb obsahuje kód specifický pro operační systém

Pokud vaše aplikace obsahuje jakýkoli kód se závislostmi na hostitelském operačním systému, musíte ho refaktorovat, abyste tyto závislosti odebrali. Pokud vaše aplikace běží na Windows, můžete například potřebovat nahradit v cestách souborového systému jakékoli použití / nebo \ za File.Separator nebo Paths.get.

Přepnutí na podporovanou platformu

Pokud vytvoříte soubor Dockerfile ručně a nasadíte kontejnerizovanou aplikaci do Azure Container Apps, převezmete úplnou kontrolu nad nasazením včetně verzí JRE/JDK.

Pro nasazení z artefaktů nabízí Azure Container Apps také konkrétní verze Java (8, 11, 17 a 21) a konkrétní verze komponent Spring Boot a Spring Cloud. Pokud chcete zajistit kompatibilitu, nejprve migrujte aplikaci do jedné z podporovaných verzí Java v aktuálním prostředí a pokračujte zbývajícími kroky migrace. Výslednou konfiguraci plně otestujte. V těchto testech použijte nejnovější stabilní verzi své linuxové distribuce.

Poznámka:

Toto ověření je obzvláště důležité, pokud se váš aktuální server provozuje na nepodporované sadě JDK (například Oracle JDK nebo IBM OpenJ9).

Pokud chcete získat aktuální Java verzi, přihlaste se k produkčnímu serveru a spusťte následující příkaz:

java -version

Podporované verze Java, Spring Boot a Spring Cloud a pokyny k aktualizaci najdete v tématu Java na přehledu služby Azure Container Apps.

Určení, jestli aplikace využívá naplánované úlohy

Dočasné aplikace, jako jsou úlohy Unix cron nebo krátkodobé aplikace založené na architektuře Spring Batch, by se měly spouštět jako úloha na Azure Container Apps. Další informace najdete v tématu Jobs v Azure Container Apps. Pokud je vaše aplikace dlouhotrvající aplikace a provádí úlohy pravidelně pomocí plánovací architektury, jako je Quartz nebo Spring Batch, Azure Container Apps může tuto aplikaci hostovat. Aplikace však musí správně zpracovávat škálování, aby se zabránilo podmínkám vzájemného soupeření, kdy jsou stejné instance aplikace spouštěny více než jednou za naplánované období během horizontálního navýšení kapacity nebo postupného upgradu.

Inventarizace všech naplánovaných úloh spuštěných na produkčních serverech uvnitř kódu aplikace nebo mimo váš kód aplikace.

Identifikace verzí Spring Bootu

Prozkoumejte závislosti migrovaných aplikací a zjistěte její verzi Spring Bootu.

Odborník

V projektech Maven se verze Spring Boot obvykle nachází v <parent> prvku souboru POM:

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

V projektech Gradle se verze Spring Boot obvykle nachází v plugins části jako verze org.springframework.boot modulu plug-in:

plugins {
  id 'org.springframework.boot' version '3.3.3'
  id 'io.spring.dependency-management' version '1.1.6'
  id 'java'
}

Pro všechny aplikace používající verze Spring Boot starší než 3.x postupujte podle průvodce migrací Spring Boot 2.0 nebo Průvodce migrací Spring Boot 3.0 a aktualizujte je na podporovanou verzi Spring Boot. Podporované verze najdete ve verzích Spring Boot a Spring Cloud.

Identifikace řešení agregace protokolů

Identifikujte všechna řešení agregace protokolů, která používají aplikace, které migrujete. Při migraci musíte nakonfigurovat nastavení diagnostiky, aby byly protokolované události dostupné pro spotřebu. Další informace najdete v části Zajištění protokolování konzoly a konfigurace nastavení diagnostiky .

Identifikace agentů správy výkonu aplikací (APM)

Identifikujte agenty správy výkonu aplikací používané vašimi aplikacemi. Azure Containers Apps nenabízí integrovanou podporu integrace APM. Musíte připravit image kontejneru nebo integrovat nástroj APM přímo do kódu. Pokud chcete měřit výkon vaší aplikace, ale ještě jste neintegrovali žádný nástroj APM, zvažte použití Azure Application Insights. Další informace najdete v části Migrace .

Inventář externích prostředků

Identifikujte externí prostředky, například zdroje dat, zprostředkovatele zpráv JMS a adresy URL dalších služeb. V aplikacích Spring Boot obvykle najdete konfiguraci těchto prostředků ve složce src/main/resources , obvykle v souboru označovaného jako application.properties nebo application.yml.

Databáze

U aplikace Spring Boot se připojovací řetězce obvykle nacházejí v konfiguračních souborech, pokud závisí na externí databázi. Tady je příklad ze souboru application.properties :

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

Tady je příklad ze souboru application.yaml :

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

Další možné scénáře konfigurace najdete v dokumentaci ke službě Spring Data:

Zprostředkovatelé zpráv JMS

Identifikujte zprostředkovatele, které se používají, podíváte-li se do manifestu sestavení (obvykle pom.xml nebo build.gradle) na příslušné závislosti.

Aplikace Spring Boot využívající ActiveMQ by například obvykle obsahovala tuto závislost v souboru pom.xml :

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

Aplikace Spring Boot využívající komerční zprostředkovatele obvykle obsahují závislosti přímo v knihovnách ovladačů JMS zprostředkovatelů. Tady je příklad ze souboru build.gradle :

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

Jakmile identifikujete používaného zprostředkovatele nebo zprostředkovatele, vyhledejte odpovídající nastavení. V aplikacích Spring Boot je obvykle najdete v souboru application.properties a application.yml v adresáři aplikace.

Poznámka:

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto postupu, například pro databáze, mezipaměti, zasílání zpráv nebo služby AI, vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok používejte pouze v případě, že nejsou možné bezpečnější možnosti, jako jsou spravované identity pro připojení bez hesla či klíče. V případě místních operací počítačů upřednostňujete identity uživatelů pro připojení bez hesla nebo bez klíčů.

Tady je příklad ActiveMQ ze souboru 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=<password>

Další informace o konfiguraci ActiveMQ najdete v dokumentaci ke zasílání zpráv Spring Boot.

Tady je příklad IBM MQ ze souboru application.yaml :

ibm:
  mq:
    queueManager: qm1
    channel: dev.ORDERS
    connName: localhost(14)
    user: admin
    password: <password>

Další informace o konfiguraci IBM MQ naleznete v dokumentaci k komponentám IBM MQ Spring.

Identifikace externích mezipamětí

Identifikujte všechny používané externí mezipaměti. Redis se často používá prostřednictvím Spring Data Redis. Informace o konfiguraci najdete v dokumentaci Spring Data Redis .

Zjistěte, jestli se data relace ukládají do mezipaměti prostřednictvím relace Spring vyhledáním příslušné konfigurace (v Java nebo XML).

Zprostředkovatelé identit

Identifikujte všechny zprostředkovatele identit, které vaše aplikace používá. Informace o konfiguraci zprostředkovatelů identity najdete v následujících tématech:

Identifikace všech klientů, kteří se spoléhají na nestandardní port

Azure Container Apps umožňuje vystavit port podle konfigurace Azure Container Apps prostředků. Například aplikace Spring Boot naslouchá ve výchozím nastavení na portu 8080, ale může být nastavena pomocí server.port nebo proměnné prostředí SERVER_PORT podle potřeby.

Všechny ostatní externí prostředky

Pro tuto příručku není možné zdokumentovat všechny možné externí závislosti. Po migraci je vaší zodpovědností ověřit, že můžete vyhovět každé externí závislosti vaší aplikace.

Zdroje konfigurace inventáře a tajné kódy

Inventarizace hesel a zabezpečených řetězců

Ve všech vlastnostech a konfiguračních souborech a ve všech proměnných prostředí v rámci produkčních nasazení vyhledejte tajné řetězce a hesla. V aplikaci Spring Boot můžete tyto řetězce obvykle najít v souboru application.properties nebo application.yml .

Inventurní certifikáty

Zdokumentujte všechny certifikáty používané pro veřejné koncové body SSL nebo komunikaci s back-endovými databázemi a dalšími systémy. Všechny certifikáty na produkčních serverech zobrazíte spuštěním následujícího příkazu:

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

Kontrola architektury nasazení

Zdokumentujte požadavky na hardware pro každou službu.

Zdokumentujte následující informace pro aplikaci Spring Boot:

  • Počet spuštěných instancí.
  • Počet procesorů přidělených jednotlivým instancím.
  • Velikost paměti RAM přidělená jednotlivým instancím.

Zdokumentovat geografickou replikaci nebo distribuci

Určete, jestli se instance aplikací Spring Boot aktuálně distribuují mezi několik oblastí nebo datových center. Zdokumentujte požadavky na dobu provozu a sla pro aplikace, které migrujete.

Migrace

Vytvoření Azure Container Apps prostředí a nasazení aplikací

Zřízení instance Azure Container Apps ve vašem předplatném Azure Jeho zabezpečené hostitelské prostředí se vytvoří společně s ním. Další informace najdete v tématu Quickstart: Nasazení první aplikace kontejneru pomocí portálu Azure.

Zajištění protokolování konzoly a konfigurace nastavení diagnostiky

Nakonfigurujte protokolování, abyste měli jistotu, že se veškerý výstup směruje do konzoly a ne do souborů.

Po nasazení aplikace do Azure Container Apps můžete nakonfigurovat možnosti protokolování v prostředí Container Apps tak, aby definovaly jeden nebo více cílů protokolů. Mezi tyto cíle patří Azure Monitor Log Analytics, centrum událostí Azure nebo dokonce jiná řešení monitorování třetích stran. Máte také možnost zakázat data protokolu a zobrazit protokoly pouze během běhu. Podrobné pokyny ke konfiguraci najdete v tématu Možnosti úložiště logů a monitorování v Azure Container Apps.

Konfigurace trvalého úložiště

Pokud některá část aplikace čte nebo zapisuje do místního systému souborů, musíte nakonfigurovat trvalé úložiště tak, aby nahradilo místní systém souborů. Můžete zadat cestu k připojení v kontejneru prostřednictvím nastavení aplikace a sladit ji s cestou, kterou vaše aplikace používá. Další informace najdete v tématu Použití připojení úložiště v Azure Container Apps.

Migrace všech certifikátů do služby KeyVault

Azure Containers Apps podporuje zabezpečenou komunikaci mezi aplikacemi. Vaše aplikace nemusí spravovat proces navazování zabezpečené komunikace. Privátní certifikát můžete nahrát do Azure Container Apps nebo použít bezplatný spravovaný certifikát poskytovaný Azure Container Apps. Použití Azure Key Vault ke správě certifikátů je doporučeným přístupem. Další informace najdete v tématu Certificates v Azure Container Apps.

Konfigurace integrací správy výkonu aplikací (APM)

Bez ohledu na to, jestli je vaše aplikace nasazená z image kontejneru nebo kódu, Azure Container Apps nenaruší váš obrázek nebo kód. Proto integrace aplikace s nástrojem APM závisí na vašich vlastních předvolbách a implementaci.

Pokud vaše aplikace nepoužívá podporovanou funkci APM, Azure Application Insights je jednou z možností. Další informace najdete v tématu Použití Azure Monitor Application Insights se Spring Boot.

Nasazení aplikace

Nasaďte všechny migrované mikroslužby (včetně Spring Cloud Config Serveru a registru služby Spring Cloud), jak je popsáno v Deploy Azure Container Apps pomocí příkazu az containerapp up.

Konfigurace tajných kódů pro jednotlivé služby a externalizovaných nastavení

Nastavení konfigurace můžete do každé aplikace vložit jako proměnné prostředí. Tyto proměnné můžete nastavit jako ručně zadané položky nebo odkazy na tajné kódy. Další informace o konfiguraci najdete v tématu Spravování proměnných prostředí v Azure Container Apps.

Migrujte a povolte poskytovatele identity

Pokud některé z aplikací Spring Cloud vyžadují ověřování nebo autorizaci, ujistěte se, že jsou nakonfigurované pro přístup k zprostředkovateli identity:

  • Pokud je zprostředkovatel identity Microsoft Entra ID, neměly by být potřeba žádné změny.
  • Pokud je zprostředkovatelem identity lokální doménová struktura Active Directory, zvažte implementaci řešení hybridní identity s Microsoft Entra ID. Další informace najdete v dokumentaci k hybridní identitě.
  • Pokud je zprostředkovatelem identity jiné místní řešení, například PingFederate, projděte si téma Vlastní instalace Microsoft Entra Connect, abyste nakonfigurovali federaci s Microsoft Entra ID. Případně zvažte použití Spring Security pro využití vašeho poskytovatele identity prostřednictvím OAuth2/OpenID Connect nebo SAML.

Zpřístupnění aplikace

Ve výchozím nastavení je aplikace nasazená do Azure Container Apps přístupná prostřednictvím adresy URL aplikace. Pokud je vaše aplikace nasazená v kontextu spravovaného prostředí s vlastní virtuální sítí, musíte určit úroveň přístupnosti aplikace, která umožňuje pouze veřejné příchozí přenosy dat nebo příchozí přenos dat z vaší virtuální sítě. Další informace najdete v tématu Síťové připojení v prostředí Azure Container Apps.

Po migraci

Teď, když jste dokončili migraci, ověřte, že vaše aplikace funguje podle očekávání. Aplikaci pak můžete nastavit jako nativní pro cloud pomocí následujících doporučení.

  • Zvažte možnost, aby vaše aplikace fungovala s registrem Spring Cloud. Tato komponenta umožňuje dynamicky zjišťovat vaši aplikaci jinými nasazenými aplikacemi a klienty Spring. Další informace najdete v tématu Konfigurování nastavení komponenty Eureka Server for Spring v Azure Container Apps. Potom upravte všechny klienty aplikací tak, aby používaly Load Balancer Spring Client. Spring Client Load Balancer umožňuje klientovi získat adresy všech spuštěných instancí aplikace a najít instanci, která funguje, pokud dojde k poškození nebo nereagování jiné instance. Další informace najdete v Tipy na Spring: Spring Cloud Load Balancer ve Spring Blogu.

  • Místo toho, aby byla vaše aplikace veřejná, zvažte přidání instance brány Spring Cloud. Brána Spring Cloud poskytuje jeden koncový bod pro všechny aplikace nasazené ve vašem Azure Container Apps prostředí. Pokud už je brána Spring Cloud nasazená, ujistěte se, že je nakonfigurované pravidlo směrování pro směrování provozu do nově nasazené aplikace.

  • Zvažte přidání Spring Cloud Config serveru, který centrálně spravuje a verzionuje konfiguraci pro všechny vaše aplikace Spring Cloud. Nejprve vytvořte úložiště Git pro uložení konfigurace a konfiguraci instance aplikace tak, aby ji používala. Další informace najdete v tématu Konfigurování konfiguračního serveru pro komponentu Spring v Azure Container Apps. Pak proveďte migraci konfigurace pomocí následujících kroků:

    1. V adresáři src/main/resources aplikace vytvořte soubor bootstrap.yml s následujícím obsahem:

        spring:
          application:
            name: <your-application-name>
      
    2. V konfiguračním úložišti Git vytvořte <soubor s názvem> vaší aplikace.yml , kde your-application-name je stejný jako v předchozím kroku. Přesuňte nastavení z application.yml souboru v souboru src/main/resources do nového souboru, který jste vytvořili. Pokud byla nastavení dříve v souboru .properties , nejprve je převeďte na YAML. K provedení tohoto převodu můžete najít online nástroje nebo moduly plug-in IntelliJ.

    3. Ve výše uvedeném adresáři vytvořte soubor application.yml . Tento soubor můžete použít k definování nastavení a prostředků, které jsou sdíleny mezi všemi aplikacemi v prostředí Azure Container Apps. Tato nastavení obvykle zahrnují zdroje dat, nastavení protokolování, konfiguraci ovladače Spring Boot a další.

    4. Potvrďte a nasdílete tyto změny do úložiště Git.

    5. Odeberte soubor application.properties nebo application.yml z aplikace.

  • Zvažte přidání komponenty spravované správcem pro Spring, aby bylo možné povolit rozhraní pro správu webových aplikací Spring Boot, které zpřístupňují koncové body poháněcího zařízení. Další informace najdete v tématu Konfigurování komponenty Spring Boot Admin v Azure Container Apps.

  • Zvažte přidání kanálu nasazení pro automatické konzistentní nasazení. Pokyny jsou k dispozici pro Azure Pipelines a pro GitHub Actions.

  • Zvažte použití revizí, popisků revizí a váhy příchozího přenosu dat kontejneru, abyste umožnili modré zelené nasazení, které umožňuje otestovat změny kódu v produkčním prostředí předtím, než budou zpřístupněny některým nebo všem koncovým uživatelům. Další informace naleznete v části Blue-Green Deployment v Azure Container Apps.

  • Zvažte přidání vazeb služby pro připojení aplikace k podporovaným databázím Azure. Tyto vazby služeb by eliminovaly nutnost poskytovat informace o připojení, včetně přihlašovacích údajů, aplikacím Spring Cloud.

  • Zvažte povolení Java vývojového zásobníku ke shromažďování základních metrik prostředí JVM pro vaše aplikace. Další informace najdete v tématu Java metriky pro Java aplikace v Azure Container Apps.

  • Zvažte přidání pravidel upozornění Azure Monitor a skupin akcí, abyste mohli rychle zjišťovat a řešit nerovné podmínky. Další informace najdete v tématu Nastavování výstrah v Azure Container Apps.

  • Zvažte replikaci aplikace napříč zónami v oblasti povolením redundance zón Azure Container Apps. Provoz je vyrovnáván zatížením a automaticky přesměrován na repliky v případě výpadku zóny. Další informace o redundantním nastavení najdete v tématu Spolehlivost v Azure Container Apps.

  • Zvažte ochranu Azure Container Apps před běžným zneužitím a ohrožením zabezpečení pomocí Web Application Firewall ve službě Application Gateway. Další informace najdete v tématu Chraňte Azure Container Apps pomocí webového aplikačního firewallu na Application Gateway.