Migrace aplikací Spring Boot do Azure App Service

Tato příručka popisuje, o čem byste měli vědět, když chcete migrovat existující aplikaci Spring Boot do Azure App Service.

Před migrací

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

Přepnutí na podporovanou platformu

App Service nabízí konkrétní verze Java SE. Pokud chcete zajistit kompatibilitu, před pokračováním v některém ze zbývajících kroků migrujte aplikaci do jedné z podporovaných verzí jejího aktuálního prostředí. 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

Na Azure App Service jsou binární soubory pro Java 8 k dispozici z Eclipse Temurinu. Pro Java 11, 17 a všechny budoucí verze LTS Java poskytuje App Service Microsoft Build of OpenJDK. Tyto binární soubory jsou k dispozici ke stažení zdarma na následujících webech:

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 můžete obvykle najít konfiguraci takových prostředků ve složce src/main/directory , obvykle v souboru nazývaném application.properties nebo application.yml. Kromě toho zkontrolujte proměnné prostředí produkčního nasazení, jestli neobsahují příslušná nastavení konfigurace.

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 hesel či 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 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:

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 ověřit, že po migraci služby App Service může být splněna každá externí závislost vaší aplikace.

Tajemství inventáře

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. V aplikaci Spring Boot se tyto řetězce pravděpodobně nacházejí ve vlastnostech 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>

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

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ě obsluhuje statický obsah, potřebujete pro ni alternativní umístění. Měli byste zvážit přesun statického obsahu do Azure Blob Storage a přidání Azure Front Door pro rychlé stahování globálně. Další informace najdete v tématu Hostování statických webů v Azure Storage a Integrace účtu Azure Storage s Azure Front Door.

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 můžou být občasné, je důležité zajistit, aby byly pro vaši aplikaci nepoužitelné 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 nebrání v interním nasazení aplikace obsahující naplánované úlohy. 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.

Inventarizace všech naplánovaných úloh uvnitř nebo mimo proces aplikace

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, 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.

Identifikace všech vnějších procesů nebo démonů spuštěných na produkčních serverech

Procesy spuštěné mimo aplikační server, jako je monitorování démonů, se budou muset migrovat jinam nebo je eliminovat.

Identifikace zpracování požadavků jiných než HTTP nebo několika portů

App Service podporuje pouze 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

Ujistěte se, že všechny souřadnice externích zdrojů (například databázové spojovací řetězce) a další nastavitelné parametry lze načíst z prostředí proměnných. Pokud migrujete aplikaci Spring Boot, všechna nastavení konfigurace by už měla být externě použitelná. Další informace naleznete v tématu Externalized Configuration v dokumentaci Spring Boot.

Tady je příklad, který odkazuje na proměnnou SERVICEBUS_CONNECTION_STRING prostředí ze souboru application.properties :

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žeb vyberte plán, jehož specifikace splňují nebo překračují hodnoty aktuálního produkčního hardwaru.

Poznámka:

Pokud plánujete spouštět přípravné nebo kanárské nasazení nebo používat sloty nasazení, musí plán služby App Service zahrnovat tuto dodatečnou kapacitu. Pro aplikace Java doporučujeme používat plány Premium nebo vyšší.

Vytvořte plán služby App Service.

Vytváření a nasazování webových aplikací

Budete muset vytvořit webovou aplikaci ve svém plánu služby App Service (vyberte Java SE jako runtime) pro každý spustitelný soubor JAR, který chcete spustit.

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 Quickstart: Vytvoření aplikace Java 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 jeden z dostupných mechanismů nasazení k nasazení vaší aplikace. Pokud je to možné, měla by se vaše aplikace nahrát na /home/site/wwwroot/app.jar. Pokud nechcete soubor JAR přejmenovat na app.jar, můžete nahrát shellový skript s příkazem pro spuštění souboru JAR. Potom vložte úplnou cestu k tomuto skriptu do textového pole Spouštěcí soubor v části Konfigurace portálu. Spouštěcí skript se nespustí z adresáře, do kterého je umístěný. Proto vždy používejte absolutní cesty k odkazování na soubory ve spouštěcím skriptu (například: java -jar /home/myapp/myapp.jar).

Migrace parametrů modulu runtime JVM

Pokud vaše aplikace vyžaduje konkrétní možnosti modulu runtime, použijte nejvhodnější mechanismus k jejich určení.

Konfigurace vlastní domény a SSL

Pokud vaše aplikace má být viditelná na vlastní doméně, bude potřeba namapovat vaši webovou aplikaci na ni. Další informace najdete v tématu Tutorial: 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 pomocí vazby SSL v 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 tématu Přidání certifikátu SSL ve službě App Service.

Migrace souřadnic externích prostředků a dalších nastavení

Pokud chcete migrovat připojovací řetězce a další nastavení, postupujte podle těchto kroků.

Poznámka:

U všech nastavení aplikace Spring Boot parametrizovaných pomocí proměnných v oddílu Parametrizace konfigurace musí být tyto proměnné prostředí definovány v konfiguraci aplikace. Všechna nastavení aplikace Spring Boot, která nejsou explicitně parametrizovaná pomocí proměnných prostředí, je stále 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 služby App Service

Migrace naplánovaných úloh

Pokud chcete spouštět naplánované úlohy na Azure, zvažte použití triggeru Timer 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 taková spuštění úloh dynamicky vyvolána nebo centrálně sledována, 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 v tématu Overview – co je Azure Logic Apps? a Vytvoření, plán a spouštění opakovaných úkolů a pracovních postupů pomocí triggeru Opakování v 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.

Migrujte a povolte poskytovatele identity

Pokud vaše aplikace vyžaduje ověřování nebo autorizaci, pomocí následujících pokynů se ujistěte, že je nakonfigurovaná pro přístup ke 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.

Restart a úvodní testování

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ž máte aplikaci migrovanou na Azure App Service měli byste ověřit, že funguje podle očekávání. Jakmile to uděláte, máme pro vás několik doporučení, která mohou pomoci vaší aplikaci stát se více cloud-native.

Doporučení