Sdílet prostřednictvím


Migrace aplikací Spring Boot do služby 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 služby 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 Javy 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).

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

V Aplikace Azure Service jsou binární soubory pro Javu 8 poskytovány z Eclipse Temurinu. Pro Javu 11, 17 a všechny budoucí verze LTS v Javě poskytuje App Service Microsoft Build 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ě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é 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 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.

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.

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. V aplikaci Spring Boot se tyto řetězce pravděpodobně nacházejí ve vlastnostech 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 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 služby Azure Blob Storage a přidání služby Azure Front Door pro rychlé stahování globálně. Další informace najdete v tématu hostování statického webu ve službě Azure Storage a Integrace účtu služby Azure Storage se službou 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. 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.

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 viz 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 hodláte provozovat přípravná/testovací 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ření plánu služby App Service

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

Pro každý spustitelný soubor JAR, který chcete spustit, budete muset vytvořit webovou aplikaci v plánu služby App Service (jako zásobník modulu runtime zvolte Java SE).

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ě ve službě Aplikace Azure 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 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 shell skript s příkazem, který spustí váš soubor 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 svém startovacím skriptu (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 službu Aplikace Azure 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í

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 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, pomocí následujících pokynů se ujistěte, že je nakonfigurovaná pro přístup ke 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.

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