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 v 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 webových aplikací JAR do kontejnerů ve službě Azure Kubernetes Service (plánované pokyny)
- Migrace spustitelných webových aplikací JAR do služby Azure Virtual Machines (plánované pokyny)
Kontrola komponent aplikace
Identifikace místního stavu
Vprostředích 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í do 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:
- Azure Cache for Redis
- Azure Cosmos DB
- Další externí databáze, jako je Azure SQL, Azure Database for MySQL nebo Azure Database for PostgreSQL.
- Azure Storage, které slouží k ukládání nestrukturovaných dat nebo dokonce serializovaných objektů.
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 File 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 služby Azure Blob Storage a přidat Azure CDN pro bleskově rychlé stahování globálně. Další informace najdete v tématu Hostování statického webu ve službě Azure Storage a rychlém startu: Integrace účtu úložiště Azure 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 službu Azure Blob Storage a Azure CDN. Funkci Azure Functions můžete také použít ke správě nahrávání a aktivaci aktualizací CDN v případě potřeby. Pro vaše použití jsme poskytli ukázkovou implementaci na GitHubu – Uploading and CDN-preloading static content with 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. Může být například nutné nahradit jakékoli použití /
cest systému souborů nebo \
v cestě File.Separator
k systému souborů nebo Paths.get
v případě, že je vaše aplikace spuštěná ve Windows.
Přepnutí na podporovanou platformu
Pokud soubor Dockerfile vytvoříte 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 Javy (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í Javy 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).
Aktuální verzi jazyka Java získáte tak, že se přihlásíte k produkčnímu serveru a spustíte následující příkaz:
java -version
Informace o podporovaných verzích Javy, Spring Boot a Spring Cloudu a pokyny k aktualizaci najdete v přehledu Javy v 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 v Azure Container Apps. Další informace najdete v tématu Úlohy v Azure Container Apps. Pokud je vaše aplikace dlouhotrvající aplikací a pravidelně provádí úlohy pomocí plánovací architektury, jako je Quartz nebo Spring Batch, může azure Container Apps tuto aplikaci hostovat. Aplikace však musí správně zpracovávat škálování, aby se zabránilo podmínkám časování, kdy se během horizontálního navýšení kapacity nebo postupného upgradu provádí stejné instance aplikace více než jednou za naplánované období.
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.
Maven
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 aplikace, ale ještě jste neintegrovanou žádnou funkci APM, zvažte použití Aplikace Azure lication 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 v souboru, který se obvykle nazývá application.properties nebo application.yml.
Databáze
U aplikace Spring Boot se připojovací řetězec obvykle zobrazují 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 nebo zprostředkovatele používané v manifestu sestavení (obvykle pom.xml nebo soubor build.gradle ) pro 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 souborech 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é zabezpečit možnosti, jako jsou spravované identity pro připojení bez hesla nebo bez klíčů. 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 springové relace, a to vyhledáním příslušné konfigurace (v Javě 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ématu:
- Informace o konfiguraci OAuth2 najdete v referenčních informacích k Spring Security.
- Informace o konfiguraci Auth0 Spring Security najdete v dokumentaci k Auth0 Spring Security.
- Informace o konfiguraci PingFederate Spring Security najdete v pokynech pro Auth0 PingFederate.
Identifikace všech klientů, kteří se spoléhají na nestandardní port
Azure Container Apps umožňuje vystavit port podle konfigurace prostředků Azure Container Apps. Aplikace Spring Boot například ve výchozím nastavení naslouchá portu 8080, ale dá se nastavit pomocí server.port
proměnné prostředí nebo podle SERVER_PORT
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 .
Inventarizace certifikátů
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í prostředí Azure Container Apps 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 článku Rychlý start: Nasazení první aplikace kontejneru s využitím webu Azure Portal.
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 za běhu. Podrobné pokyny ke konfiguraci najdete v tématu Možnosti úložiště protokolů 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ů. Cestu, kterou chcete připojit v kontejneru, můžete zadat pomocí nastavení aplikace a zarovnat 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ý službou Azure Container Apps. Použití služby Azure Key Vault ke správě certifikátů je doporučeným přístupem. Další informace najdete v tématu Certifikáty 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 z kódu, azure Container Apps nenaruší vaši image 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, Aplikace Azure lication Insights je jednou z možností. Další informace najdete v tématu Použití služby Azure Monitor Application Insights se spring bootem.
Nasazení aplikace
Nasaďte všechny migrované mikroslužby (nezahrnuje Spring Cloud Config Server a Spring Cloud Service Registry), jak je popsáno v tématu Nasazení 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 Správa proměnných prostředí v Azure Container Apps.
Migrace a povolení zprostředkovatele 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ředkovatelem identity ID Microsoft Entra, neměly by být nutné žádné změny.
- Pokud je zprostředkovatelem identity doménová struktura místní Active Directory, zvažte implementaci řešení hybridní identity s ID Microsoft Entra. Další informace najdete v dokumentaci k hybridní identitě.
- Pokud je zprostředkovatelem identity jiné místní řešení, například PingFederate, projděte si vlastní instalaci tématu Microsoft Entra Connect a nakonfigurujte federaci s ID Microsoft Entra. Případně zvažte použití Spring Security k použití zprostředkovatele identity prostřednictvím OAuth2/OpenID Connect nebo SAML.
Zveřejně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ítě 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 Konfigurace nastavení pro komponentu Eureka Server for Spring v Azure Container Apps. Potom upravte všechny klienty aplikace tak, aby používaly Nástroj pro vyrovnávání zatížení klienta Spring. 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 tématu Spring Tips: Spring Cloud Load Balancer na 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 prostředí Azure Container Apps. 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 cloudového konfiguračního serveru, který centrálně spravuje a spravuje konfiguraci správy verzí pro všechny 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 Konfigurace nastavení pro komponentu Konfigurační server for Spring v Azure Container Apps. Pak proveďte migraci konfigurace pomocí následujících kroků:
V adresáři src/main/resources aplikace vytvořte soubor bootstrap.yml s následujícím obsahem:
spring: application: name: <your-application-name>
V konfiguračním úložišti Git vytvořte <soubor your-application-name>.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.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ší.
Potvrďte a nasdílete tyto změny do úložiště Git.
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 Konfigurace 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 najdete v tématu Blue-Green Deployment in Azure Container Apps.
Zvažte přidání vazeb služeb 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í vývojového zásobníku Java ke shromažďování základních metrik JVM pro vaše aplikace. Další informace najdete v tématu Metriky Java pro aplikace v Javě v Azure Container Apps.
Zvažte přidání pravidel upozornění a skupin akcí služby Azure Monitor pro rychlé zjišťování a řešení chybových podmínek. Další informace najdete v tématu Nastavení upozornění 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í a automaticky směrován na repliky, pokud dojde k výpadku zóny. Další informace o redundantních nastaveních najdete v tématu Spolehlivost v Azure Container Apps.
Zvažte ochranu služby Azure Container Apps před běžným zneužitím a ohrožením zabezpečení pomocí firewallu webových aplikací ve službě Application Gateway. Další informace najdete v tématu Ochrana azure Container Apps pomocí firewallu webových aplikací ve službě Application Gateway.