Migrace aplikací Spring Boot do Azure Spring Apps

Poznámka:

Azure Spring Apps je nový název služby Azure Spring Cloud. Přestože má služba nový název, na některých místech uvidíte starý název, protože pracujeme na aktualizaci prostředků, jako jsou snímky obrazovky, videa a diagramy.

Tato příručka popisuje, o čem byste měli vědět, když chcete migrovat existující aplikaci Spring Boot, která se bude spouštět v Azure Spring 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čí. To má pro vaši aplikaci následující potenciálně významné důsledky:

  • Žádný singleton nemůže být zaručen, že je skutečně jediný.
  • Veškerá data, která nebyla zachována mimo úložiště, budou pravděpodobně ztracena mnohem dříve, než by byla na jednom fyzickém serveru nebo virtuálním počítači.

Před migrací na Azure Spring 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 například:

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.

Poznámka:

Azure Spring Apps poskytuje 5 GB dočasného úložiště na instanci Azure Spring Apps, která je připojená ./tmp Pokud jsou dočasné soubory zapsány nad rámec tohoto limitu nebo do jiného umístění, bude nutné provést změny kódu.

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

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

Přepnutí na podporovanou platformu

Azure Spring Apps nabízí konkrétní verze Javy a konkrétní verze Spring Bootu a Spring Cloudu. 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

Podporované verze Javy, Spring Boot a Spring Cloudu a pokyny k aktualizaci najdete v tématu Příprava aplikace pro nasazení v Azure Spring Apps.

Určení, jestli aplikace využívá naplánované úlohy

Naplánované úlohy, jako jsou úlohy plánovače Quartz nebo úlohy Unix cron, by se neměly používat s Azure Spring Apps. Azure Spring Apps vám nezabrá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 spuštěných na produkčních serverech nebo mimo 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>2.7.10</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 '2.7.10'
  id 'io.spring.dependency-management' version '1.0.15.RELEASE'
  id 'java'
}

Pro všechny aplikace používající Spring Boot 1.x postupujte podle průvodce migrací Spring Boot 2.0 a aktualizujte je na podporovanou verzi Spring Boot. Podporované verze najdete v části Verze Spring Boot a Spring Cloudu v části Příprava aplikace na nasazení v Azure Spring Apps.

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 všechny agenty monitorování výkonu aplikací používané s vašimi aplikacemi. Azure Spring Apps podporuje integraci s application Přehledy, New Relic, Elastic APM, Dynatrace a AppDynamics. Pokud aplikace používá podporovanou funkci APM, nakonfigurujte integraci při migraci. Pokud aplikace nepoužívá podporovanou funkci APM, zvažte místo toho použití služby Application Přehledy. 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/directory v souboru, který se obvykle nazývá application.properties nebo application.yml.

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 službě Spring Data:

Zprostředkovatelé zpráv JMS

Identifikujte zprostředkovatele nebo zprostředkovatele používané v manifestu sestavení (obvykle soubor pom.xml nebo build.gradle ) pro příslušné závislosti.

Například aplikace Spring Boot používající ActiveMQ by 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.0.4.0")
      ...
    }

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.

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 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: big$ecr3t

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 Spring Apps přepíše server.port nastavení v nasazené aplikaci. Pokud se klienti klientů spoléhají na to, že aplikace je dostupná na jiném portu než 443, budete je muset upravit.

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í instance a aplikací Azure Spring Apps

Zřízení instance Azure Spring Apps ve vašem předplatném Azure, pokud ještě neexistuje. Pak tam vytvořte aplikaci. Další informace najdete v tématu Rychlý start: Nasazení první aplikace do Azure Spring Apps.

Zajištění protokolování konzoly a konfigurace nastavení diagnostiky

Nakonfigurujte protokolování tak, aby se veškerý výstup směroval do konzoly a ne do souborů.

Po nasazení aplikace do Azure Spring Apps přidejte nastavení diagnostiky, které zpřístupní protokolované události pro použití, například prostřednictvím Služby Azure Monitor Log Analytics.

Zásobník LogStash/ELK

Pokud pro agregaci protokolů používáte LogStash/ELK Stack, nakonfigurujte nastavení diagnostiky pro streamování výstupu konzoly do centra událostí Azure. Pak pomocí modulu plug-in LogStash EventHub ingestujte protokolované události do LogStash.

Splunk

Pokud použijete Splunk pro agregaci protokolů, nakonfigurujte nastavení diagnostiky pro streamování výstupu konzoly do azure Blob Storage. Potom pomocí doplňku Splunk pro Microsoft Cloud Services ingestujte protokolované události do Splunku.

Konfigurace trvalého úložiště

Pokud některá část aplikace čte nebo zapisuje do místního systému souborů, budete muset nakonfigurovat trvalé úložiště tak, aby nahradilo místní systém souborů. Další informace najdete v tématu Použití integrovaného trvalého úložiště v Azure Spring Apps.

Do adresáře byste měli zapisovat všechny dočasné soubory /tmp . Pro nezávislost operačního systému můžete tento adresář získat pomocí System.getProperty("java.io.tmpdir"). Můžete také použít java.nio.Files::createTempFile k vytvoření dočasných souborů.

Migrace všech certifikátů do služby KeyVault

Azure Spring Apps neposkytuje přístup k úložišti klíčů JRE, takže musíte migrovat certifikáty do služby Azure KeyVault a změnit kód aplikace pro přístup k certifikátům ve službě KeyVault. Další informace najdete v tématu Začínáme s certifikáty služby Key Vault a klientskou knihovnou certifikátů služby Azure Key Vault pro Javu.

Konfigurace integrací správy výkonu aplikací (APM)

Azure Spring Apps nabízí následující integrace APM. Podle odkazů povolte APM, které potřebujete.

Pokud vaše aplikace nepoužívá podporovanou funkci APM, zvažte místo toho použití Přehledy aplikace. Azure Spring Apps nabízí hlubokou integraci s aplikačními Přehledy pro správu výkonu a odezvu na aberace v reálném čase.

Zakázání klientů metrik a koncových bodů v aplikacích

Odeberte všechny používané klienty metrik nebo koncové body metrik vystavené ve vašich aplikacích.

Nasazení aplikace

Nasaďte všechny migrované mikroslužby (nezahrnuje servery Spring Cloud Config a Registry), jak je popsáno v rychlém startu: Nasazení první aplikace do Azure Spring Apps.

Konfigurace tajných kódů pro jednotlivé služby a externalizovaných nastavení

Do každé služby můžete vložit jakákoli nastavení konfigurace pro jednotlivé služby jako proměnné prostředí. Na webu Azure Portal použijte následující kroky:

  1. Přejděte do instance Azure Spring Apps a vyberte Aplikace.
  2. Vyberte službu, která se má nakonfigurovat.
  3. Vyberte Konfigurace.
  4. Zadejte proměnné, které chcete nakonfigurovat.
  5. Zvolte Uložit.

Spring Cloud App Configuration Settings

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 Připojení 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 Připojení nebo SAML.

Zveřejnění aplikace

Ve výchozím nastavení nejsou aplikace nasazené do Azure Spring Apps viditelné externě. Aplikaci můžete zveřejnit tak, že ji zpřístupníte pomocí následujícího příkazu:

az spring app update --name <application name> --is-public true

Tento krok přeskočte, pokud používáte bránu Spring Cloud nebo chcete ji použít. Další informace najdete v následující části.

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. To umožní dynamické zjištění vaší aplikace jinými nasazenými aplikacemi a klienty Spring. Další informace najdete v tématu Příprava aplikace pro nasazení v Azure Spring Apps. Potom upravte všechny klienty aplikace tak, aby používaly nástroj pro vyrovnávání zatížení klienta Spring Client. To umožňuje klientovi získat adresy všech spuštěných instancí aplikace a najít instanci, která funguje, pokud je poškozena jiná instance nebo nereaguje. Další informace najdete v tématu Spring Tipy: Spring Cloud Load Balancer na blogu Spring.

  • 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é v instanci Azure Spring Apps. Pokud už je brána Spring Cloud nasazená, ujistěte se, že je nakonfigurovaná tak, aby směrovala provoz do nově nasazené aplikace.

  • Zvažte přidání serveru Spring Cloud Config, 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 nakonfigurujte instanci Azure Spring Apps tak, aby ji používala. Další informace najdete v tématu Nastavení instance Spring Cloud Config Serveru pro vaši službu. Pak proveďte migraci konfigurace pomocí následujících kroků:

    1. V adresáři src/main/resources aplikace vytvořte soubor bootstrap.yml s následujícím obsahem:

        spring:
          application:
            name: <your-application-name>
      
    2. 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í ze souboru application.yml v souboru src/main/resources do nového souboru, který jste právě 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.

    3. 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é se budou sdílet mezi všemi aplikacemi v instanci Azure Spring Apps. Tato nastavení obvykle zahrnují zdroje dat, nastavení protokolování, konfiguraci ovladače Spring Boot a další.

    4. Potvrďte a nasdílete tyto změny do úložiště Git.

    5. Odeberte soubor application.properties nebo application.yml z aplikace.

  • Zvažte přidání kanálu nasazení pro automatické konzistentní nasazení. Pokyny jsou k dispozici pro Azure Pipelines, pro GitHub Actions a pro Jenkinse.

  • Před dostupností některých nebo všech koncových uživatelů zvažte použití přípravných nasazení k testování změn kódu v produkčním prostředí. Další informace najdete v tématu Nastavení přípravného prostředí v Azure Spring 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 použití Aplikace Azure Přehledy ke sledování výkonu a interakcí vašich aplikací. Další informace najdete v tématu Aplikace Přehledy Agent in-Process v Javě v Azure Spring 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 Kurz: Monitorování prostředků Spring Cloudu pomocí upozornění a skupin akcí.

  • Zvažte replikaci nasazení Azure Spring Apps v jiné oblasti, aby se snížila latence a vyšší spolehlivost a odolnost proti chybám. Pomocí Azure Traffic Manageru můžete vyrovnávat zatížení mezi nasazeními nebo pomocí služby Azure Front Door přidat přesměrování zpracování SSL a firewall webových aplikací s ochranou před útoky DDoS.

  • Pokud geografická replikace není nutná, zvažte přidání brány Aplikace Azure pro přidání přesměrování zpracování SSL a firewallu webových aplikací s ochranou před útoky DDoS.