Migrace Spring Boot aplikací do Azure App Service
Tato příručka popisuje, o čem byste měli vědět, když chcete migrovat existující Spring Boot aplikaci do Azure App Service.
Před migrací
Pokud chcete zajistit úspěšnou migraci, než začnete, proveďte kroky posouzení a inventáře popsané v následujících částech.
Pokud některý z těchto požadavků před migrací nesplňujete, projděte si následující doprovodné průvodce migrací:
- 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)
Přepnutí na podporovanou platformu
App Service nabízí specifické verze Java SE. Kvůli zajištění kompatibility migrujte aplikaci do jedné z podporovaných verzí jejího aktuálního prostředí. Teprve pak pokračujte zbývajícími kroky. 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
Pokud chcete získat aktuální verzi, kterou používá Azure App Service, stáhněte Zulu 8 (pokud hodláte použít modul runtime Java 8) nebo Zulu 11 (pokud hodláte použít modul runtime Java 11).
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 Spring Boot aplikacích obvykle najdete konfiguraci těchto prostředků ve složce src/main/directory v souboru, který se obvykle nazývá application.properties nebo application.yml. Dále ověřte proměnné prostředí produkčního nasazení u všech relevantních konfiguračních nastavení.
Databáze
V případě jakékoli databáze SQL určete připojovací řetězec.
V případě aplikací Spring Boot se připojovací řetězce obvykle nacházejí v konfiguračních souborech.
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 Spring Data:
Zprostředkovatelé zpráv JMS
Identifikujte zprostředkovatele nebo zprostředkovatele, kteří se používají, v manifestu sestavení (obvykle v souborupom.xmlnebo build.gradle) pro příslušné závislosti.
Například aplikace typu Spring Boot ActiveMQ obvykle tuto závislost obsahuje ve svémpom.xmlsouboru:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Aplikace Spring Boot využívající vlastní zprostředkovatele obvykle obsahují závislosti přímo v knihovnách ovladačů JMS těchto zprostředkovatelů. Tady je příklad ze souboru build.gradle:
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.0.4.0")
...
}
Po identifikování zprostředkovatelů nebo zprostředkovatelů, které se používají, vyhledejte odpovídající nastavení. V Spring Boot aplikacích je obvykle najdete v souborech application.properties a application.yml v adresáři aplikace.
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=tryandguess
Další informace o konfiguraci ActiveMQ najdete v dokumentaci Spring Boot zasílání zpráv.
Tady je příklad IBM MQ ze souboru application.yaml:
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: big$ecr3t
Další informace o konfiguraci IBM MQ najdete v dokumentaci ke komponentám IBM MQ Spring.
Identifikace externích mezipamětí
Identifikujte všechny externí mezipaměti, které se používají. Redis se často používá prostřednictvím Spring Data Redis. Informace o konfiguraci najdete v dokumentaci Spring Data Redis.
Vyhledáním odpovídající konfigurace (v jazyce Java nebo XML)zjistěte, jestli se data relace uchová v mezipaměti prostřednictvím Spring Session.
Zprostředkovatelé identit
Identifikujte všechny zprostředkovatele identity používané vaší aplikací. Informace o konfiguraci zprostředkovatelů identity najdete v následujících informacích:
- 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 PingFederate Auth0.
Všechny ostatní externí prostředky
V této příručce není možné zdokumentovat všechny možné externí závislosti. Je zodpovědností vašeho týmu, aby ověřil, že po migraci do App Service budou fungovat všechny externí závislosti vaší aplikace.
Inventář tajných kódů
Hesla a zabezpečené řetězce
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. U aplikace Spring Boot se tyto řetězce pravděpodobně nacházejí 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>
Určení, jestli a jak se systém souborů používá
Jakékoli používání systému souborů na aplikačním serveru bude vyžadovat změnu konfigurace nebo ve vzácných případech změnu architektury. Můžete zjistit některé nebo všechny z následujících situací.
Statický obsah jen pro čtení
Pokud vaše aplikace aktuálně poskytuje statický obsah, budete pro ni potřebovat alternativní umístění. Možná budete chtít statický obsah přesunout do Azure Blob Storage a přidat Azure CDN, abyste umožnili bleskově rychlé globální stahování. Další informace najdete v tématu Hostování statického webu v Azure Storage Rychlý start: Integraceúčtu úložiště Azure s Azure CDN .
Dynamicky publikovaný statický obsah
Pokud vaše aplikace umožňuje nahrávání nebo vytváření statického obsahu, který je ale po vytvoření neměnný, můžete použít Azure Blob Storage a Azure CDN, jak je popsáno výše, s funkcí Azure Functions, která zpracovává nahrávání a aktualizace CDN. Pro vaše použití jsme poskytli ukázkovou implementaci na GitHubu – Uploading and CDN-preloading static content with Azure Functions.
Zvláštní případy
Určité produkční scénáře mohou vyžadovat další změny nebo zavádět dodatečná omezení. I když takové scénáře mohou být občasné, je důležité zajistit, aby byly buď nepoužitelné pro vaši aplikaci, nebo správně vyřešené.
Určení, jestli aplikace využívá naplánované úlohy
Naplánované úlohy, jako jsou úlohy plánovače Quartz nebo cron, nelze se službou App Service používat. App Service vám nezabrání v nasazení aplikace obsahující naplánované úlohy interně. Pokud ale u aplikace dojde k horizontálnímu rozšíření kapacity, může se stejná naplánovaná úloha spustit v průběhu naplánovaného období více než jednou. Tato situace může vést k nezamýšleným důsledkům.
Proveďte inventarizaci všech naplánovaných úloh uvnitř nebo vně aplikačního procesu.
Určení, jestli aplikace 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, budete muset refaktorováním tyto závislosti odebrat. Pomocí File.Separator nebo Paths.get budete například muset nahradit použití znaků / nebo \ v cestách systému souborů.
Zjištění všech vnějších procesů/démonů běžících na produkčních serverech
Procesy, které běží mimo aplikační server, například monitorovací démony, bude třeba migrovat jinam nebo eliminovat.
Zjištění, že se zpracovávají jiné požadavky než HTTP nebo se obsluhuje několik portů
App Service podporuje jen jeden koncový bod HTTP na jednom portu. Pokud vaše aplikace naslouchá na více portech nebo přijímá požadavky pomocí jiných protokolů než HTTP, nepoužívejte Azure App Service.
Migrace
Parametrizace konfigurace
Zajistěte, aby se z proměnných prostředí daly číst všechny souřadnice externích prostředků (například připojovací řetězce databází) a další přizpůsobitelná nastavení. Pokud migrujete aplikaci Spring Boot, všechna nastavení konfigurace by už měla být externalizovatelná. Další informace najdete v tématu Externalizovaná konfigurace v Spring Boot dokumentaci.
Tady je příklad, kdy se odkazuje na proměnnou prostředí SERVICEBUS_CONNECTION_STRING ze souboru SERVICEBUS_CONNECTION_STRING:
spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000
Zřízení plánu služby App Service
V seznamu dostupných plánů služby vyberte plán, jehož specifikace jsou stejné nebo vyšší, než má aktuální produkční hardware.
Poznámka
Pokud plánujete spouštět pracovní/kanárská nasazení nebo používat sloty nasazení,musí plán nasazení App Service obsahovat tuto dodatečnou kapacitu. Pro aplikace v jazyce Java doporučujeme používat plány Premium nebo vyšší.
Vytvoření plánu služby App Service
Vytváření a nasazování webových aplikací
V plánu služby App Service (kde jako zásobník modulu runtime zvolíte Java SE) budete muset vytvořit webovou aplikaci pro každý spustitelný soubor JAR, který zamýšlíte provozovat.
Aplikace Maven
Pokud je vaše aplikace vytvořena ze souboru Maven POM, použijte k vytvoření webové aplikace a jejímu nasazení modul plug-in WebApp pro Maven. Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Javě na Azure App Service.
Jiné aplikace než Maven
Pokud modul plug-in Maven nelze použít, budete muset webovou aplikaci zřídit prostřednictvím jiných mechanismů, mezi které patří:
Po vytvoření webové aplikace použijte k jejímu nasazení některý z dostupných mechanismů nasazení. Pokud je to možné, měla by být aplikace nahrána do cesty /home/site/wwwroot/app.jar. Pokud soubor JAR nechcete přejmenovat na app.jar,můžete nahrát skript prostředí pomocí příkazu ke spuštění souboru JAR. Pak úplnou cestu k tomuto skriptu vložte do textového pole Spouštěcí soubor v části Konfigurace na portálu. Spouštěcí skript se nespouštěl z adresáře, do kterého je umístěn. Proto ve spouštěcím skriptu vždy používejte absolutní cesty k referenčním souborům (například: java -jar /home/myapp/myapp.jar).
Migrace parametrů modulu runtime JVM
Pokud vaše aplikace vyžaduje konkrétní parametry modulu runtime, použijte k jejich určení nejvhodnější mechanismus.
Konfigurace vlastní domény a SSL
Pokud vaše aplikace bude viditelná ve vlastní doméně, budete k ní muset namapovat webovou aplikaci. Další informace najdete v tématu Kurz: Mapování existujícího vlastního názvu DNS na Azure App Service.
Potom budete muset svázat certifikát SSL dané domény s webovou aplikací App Service. Další informace najdete v tématu Zabezpečení vlastního názvu DNS s využitím vazby SSL ve službě Azure App Service.
Import back-endových certifikátů
Všechny certifikáty pro komunikaci s back-endovými systémy, jako jsou databáze, musí být službě App Service dostupné. Další informace najdete v článku, který se věnuje přidání certifikátu SSL ve službě App Service.
Migrace souřadnic externích prostředků a dalších nastavení
Tímto postupem provedete migraci připojovacích řetězců a dalších nastavení.
Poznámka
Pro všechna nastavení aplikace Spring Boot, která jsou parametrizována pomocí proměnných v části Parametrizace konfigurace, musí být příslušné proměnné prostředí definovány v konfiguraci aplikace. Veškerá nastavení aplikace Spring Boot, která nejsou explicitně parametrizována pomocí proměnných prostředí, bude možné přepsat prostřednictvím konfigurace aplikace. Například:
spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000

Migrace naplánovaných úloh
Pokud chcete v Azure spouštět naplánované úlohy, zvažte použití triggeru časovače pro Azure Functions. Samotný kód úlohy nemusíte do funkce migrovat. Funkce může úlohu aktivovat jednoduše tak, že vyvolá adresu URL ve vaší aplikaci. Pokud musí být spouštění těchto úloh dynamicky vyvolávané a/nebo centrálně sledované, zvažte použití Spring Batch.
Alternativně můžete pro vyvolání adresy URL vytvořit aplikaci logiky s triggerem opakování, a to bez psaní kódu mimo vaši aplikaci. Další informace najdete článcích Přehled – co je služba Azure Logic Apps? a Vytvoření, plánování a spouštění opakovaných úloh a pracovních postupů pomocí triggeru opakování ve službě Azure Logic Apps.
Poznámka
Abyste zabránili zneužití, budete pravděpodobně muset zajistit, aby koncový bod vyvolávající úlohu vyžadoval přihlašovací údaje. V takovém případě bude tyto přihlašovací údaje muset poskytovat funkce triggeru.
Migrace a povolení zprostředkovatele identity
Pokud vaše aplikace vyžaduje ověřování nebo autorizaci, podle následujících pokynů se ujistěte, že je nakonfigurovaná pro přístup ke zprostředkovateli identity:
- Pokud je zprostředkovatel identity Azure Active Directory, nemělo by být nutné provádět žádné změny.
- Pokud je zprostředkovatel identity doménovou místní Active Directory, zvažte implementaci řešení hybridní identity s Azure Active Directory. Další informace najdete v dokumentaci k hybridní identitě.
- Pokud je zprostředkovatelem identity jiné místní řešení, například PingFederate, podívejte se na téma Vlastní instalace služby Azure AD Připojení a nakonfigurujte federaci s Azure Active Directory. Případně zvažte použití spring security k použití zprostředkovatele identity prostřednictvím OAuth2 nebo OpenID PřipojeníSAML.
Restartování a orientační test
Nakonec budete muset všechny změny konfigurace uplatnit restartováním webové aplikace. Po restartování ověřte, že vaše aplikace správně funguje.
Po migraci
Teď, když je vaše aplikace migrovaná do služby Azure App Service, byste měli ověřit, že funguje podle očekávání. Až to uděláte, máme pro vás několik doporučení, která vaší aplikaci dodají výraznější nativní cloudový charakter.
Doporučení
Pokud jste se k ukládání souborů rozhodli použít adresář /home, zvažte jeho nahrazení službou Azure Storage.
Pokud konfigurace v adresáři /home obsahuje připojovací řetězce, klíče SSL a jiné tajné informace, zvažte všude, kde je to možné, použití služby Azure Key Vault nebo vkládání parametrů do nastavení aplikace (případně obojí).
Pro spolehlivá nasazení bez výpadků zvažte použití slotů nasazení.
Navrhněte a implementujte strategii DevOps. Pokud chcete zachovat spolehlivost a zároveň zvýšit rychlost vývoje, uvažujte o automatizaci nasazení a testování pomocí Azure Pipelines. Pokud používáte sloty nasazení, můžete automatizovat nasazení do slotu, za nímž následuje prohození slotů.
Navrhněte a implementujte strategii provozní kontinuity a zotavení po havárii. U nepostradatelných aplikací uvažujte o architektuře nasazení ve více oblastech.