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:

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

Konfigurace aplikace App Service

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í