Nasazení bezserverových aplikací v Javě pomocí Quarkus ve službě Azure Functions

V tomto článku budete vyvíjet, sestavovat a nasazovat bezserverovou aplikaci Java do Azure Functions pomocí Quarkus. Tento článek používá Quarkus Funqy a integrovanou podporu triggeru HTTP služby Azure Functions pro Javu. Použití Quarkus se službou Azure Functions poskytuje výkon programovacího modelu Quarkus se škálováním a flexibilitou azure Functions. Po dokončení spustíte bezserverové aplikace Quarkus ve službě Azure Functions a budete pokračovat v monitorování aplikace v Azure.

Předpoklady

Vytvoření projektu aplikace

Pomocí následujícího příkazu naklonujte ukázkový projekt Java pro tento článek. Ukázka je na GitHubu.

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus

Pokud se zobrazí zpráva o tom, že je v odpojeném stavu HEAD , je tato zpráva v bezpečí ignorovat. Vzhledem k tomu, že tento článek nevyžaduje žádné potvrzení, je vhodné odpojit stav HEAD.

Prozkoumejte ukázkovou funkci. Otevřete soubor functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java.

Spusťte následující příkaz: Poznámka @Funq vytvoří vaši metodu (v tomto případě funqyHello) bezserverovou funkci.

@Funq
public String funqyHello() {
    return "hello funqy";
}

Azure Functions Java má vlastní sadu poznámek specifických pro Azure, ale tyto poznámky nejsou nutné, pokud používáte Quarkus ve službě Azure Functions v jednoduché kapacitě, jak tady děláme. Další informace o poznámkách k Javě v Azure Functions najdete v příručce pro vývojáře v Javě pro Azure Functions.

Pokud neurčíte jinak, název funkce je stejný jako název metody. K definování názvu funkce s parametrem pro anotaci můžete použít také následující příkaz:

@Funq("alternateName")
public String funqyHello() {
    return "hello funqy";
}

Název je důležitý. Stane se součástí identifikátoru REST URI pro vyvolání funkce, jak je znázorněno dále v článku.

Místní testování funkce

Používá mvn se ke spuštění vývojového režimu Quarkus v místním terminálu. Spuštění Quarkus tímto způsobem umožňuje živé opětovné načítání s kompilací na pozadí. Když upravíte soubory Java nebo soubory prostředků a aktualizujete prohlížeč, projeví se tyto změny automaticky.

Aktualizace prohlížeče aktivuje kontrolu pracovního prostoru. Pokud kontrola zjistí nějaké změny, soubory Java se znovu kompilují a aplikace se znovu nasadí. Vaše znovu nasazené aplikační služby požadavek. Pokud dojde k problémům s kompilací nebo nasazením, zobrazí se chybová stránka s informacemi.

V následujícím postupu nahraďte yourResourceGroupName názvem skupiny prostředků. Názvy aplikací funkcí musí být globálně jedinečné ve všech Azure. Názvy skupin prostředků musí být globálně jedinečné v rámci předplatného. Tento článek dosahuje nezbytné jedinečnosti tím, že před název skupiny prostředků před název funkce. Zvažte vytvoření jedinečného identifikátoru u všech názvů, které vytvoříte, které musí být jedinečné. Užitečnou technikou je použít iniciály následované dnešním datem ve mmdd formátu.

Skupina prostředků není pro tuto část pokynů nutná, ale vyžaduje se později. Pro zjednodušení vyžaduje projekt Maven, abyste definovali vlastnost.

  1. Vyvolání vývojového režimu Quarkus:

    cd functions-azure
    mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
    

    Výstup by měl vypadat takto:

    ...
    --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
    -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
    --\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
    INFO  [io.quarkus] (Quarkus Main Thread) quarkus-azure-function 1.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx.) started in 1.290s. Listening on: http://localhost:8080
    
    INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
    INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, funqy-http, smallrye-context-propagation, vertx]
    
    --
    Tests paused
    Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
    
  2. K funkci se dostanete pomocí CURL příkazu v místním terminálu:

    curl localhost:8080/api/funqyHello
    

    Výstup by měl vypadat takto:

    "hello funqy"
    

Přidání injektáže závislostí do funkce

Open-standard technologie Jakarta EE Contexts and Dependency Injection (CDI) poskytuje injektáž závislostí v Quarkus. Obecný přehled injektáže a konkrétně CDI najdete v kurzu Jakarta EE.

  1. Přidejte novou funkci, která používá injektáž závislostí.

    V adresáři functions-quarkus/src/main/java/io/quarkus vytvořte soubor GreetingService.java. Jako zdrojový kód souboru použijte následující kód:

    package io.quarkus;
    
    import javax.enterprise.context.ApplicationScoped;
    
    @ApplicationScoped
    public class GreetingService {
    
        public String greeting(String name) {
            return "Welcome to build Serverless Java with Quarkus on Azure Functions, " + name;
        }
    
    }
    

    Soubor uložte.

    GreetingService je injektovatelná bean, která implementuje metodu greeting() . Metoda vrátí řetězcovou Welcome... zprávu s parametrem name .

  2. Otevřete existující soubor functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java . Nahraďte třídu následujícím kódem pro přidání nového gService pole a greeting metody:

    package io.quarkus;
    
    import javax.inject.Inject;
    import io.quarkus.funqy.Funq;
    
    public class GreetingFunction {
    
        @Inject
        GreetingService gService;
    
        @Funq
        public String greeting(String name) {
            return gService.greeting(name);
        }
    
        @Funq
        public String funqyHello() {
            return "hello funqy";
        }
    
    }
    

    Soubor uložte.

  3. K nové greeting funkci se dostanete pomocí curl příkazu v místním terminálu:

    curl -d '"Dan"' -X POST localhost:8080/api/greeting
    

    Výstup by měl vypadat takto:

    "Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
    

    Důležité

    Živé kódování (označované také jako vývojový režim) umožňuje spustit aplikaci a průběžně provádět změny. Quarkus automaticky znovu zkompiluje a znovu načte aplikaci při provedení změn. Jedná se o výkonný a efektivní styl vývoje, který budete používat v celém tomto článku.

    Než přejdete vpřed k dalšímu kroku, zastavte režim vývoje Quarkus tak, že vyberete Ctrl+C.

Nasadit aplikaci do Azure

  1. Pokud jste to ještě neudělali, přihlaste se ke svému předplatnému Azure pomocí následujícího příkazu az login a postupujte podle pokynů na obrazovce:

    az login
    

    Poznámka:

    Pokud je k vašim přihlašovacím údajům Azure přidruženo více tenantů Azure, musíte určit, ke kterému tenantovi se chcete přihlásit. Můžete to provést pomocí --tenant této možnosti. Příklad: az login --tenant contoso.onmicrosoft.com.

    Pokračujte v procesu ve webovém prohlížeči. Pokud není k dispozici žádný webový prohlížeč nebo pokud se webovému prohlížeči nepodaří otevřít, použijte tok kódu zařízení s az login --use-device-code.

    Po úspěšném přihlášení by měl výstup v místním terminálu vypadat nějak takto:

    xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxx 'Microsoft'
    [
        {
            "cloudName": "AzureCloud",
            "homeTenantId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx",
            "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
            "isDefault": true,
            "managedByTenants": [],
            "name": "Contoso account services",
            "state": "Enabled",
            "tenantId": "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx",
            "user": {
            "name": "user@contoso.com",
            "type": "user"
            }
        }
    ]
    
  2. Sestavte a nasaďte funkce do Azure.

    Soubor pom.xml , který jste vygenerovali v předchozím kroku, používá azure-functions-maven-plugin. Spuštění mvn install generuje konfigurační soubory a pracovní adresář, který azure-functions-maven-plugin vyžaduje. V yourResourceGroupNamepřípadě použijte hodnotu, kterou jste použili dříve.

    mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
    
  3. Během nasazování se přihlaste k Azure. Modul azure-functions-maven-plugin plug-in je nakonfigurovaný tak, aby při každém nasazení projektu zobrazil výzvu k přihlášení k Azure. Během sestavení se zobrazí výstup podobný následujícímu:

    [INFO] Auth type: DEVICE_CODE
    To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXCWTLGMP to authenticate.
    

    Postupujte tak, jak výstup říká a ověřuje se v Azure pomocí prohlížeče a zadaného kódu zařízení. K dispozici je mnoho dalších možností ověřování a konfigurace. Kompletní referenční dokumentace ke azure-functions-maven-plugin službě Azure Functions: Podrobnosti o konfiguraci.

  4. Po ověření by sestavení mělo pokračovat a dokončit. Ujistěte se, že výstup zahrnuje BUILD SUCCESS téměř konec.

    Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
    

    Adresu URL pro aktivaci funkce v Azure najdete také ve výstupním protokolu:

    [INFO] HTTP Trigger Urls:
    [INFO] 	 quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
    

    Dokončení nasazení bude chvíli trvat. Mezitím se podíváme na Azure Functions na webu Azure Portal.

Přístup k bezserverové funkci v Azure a jejich monitorování

Přihlaste se k portálu a ujistěte se, že jste vybrali stejného tenanta a předplatného, které jste použili v Azure CLI.

  1. Na panelu hledání v horní části webu Azure Portal zadejte aplikaci funkcí a vyberte klávesu Enter. Aplikace funkcí by se měla nasadit a zobrazit s názvem <yourResourceGroupName>-function-quarkus.

    Screenshot that shows the function app in the portal.

  2. Výběrem aplikace funkcí zobrazíte podrobné informace, jako je umístění, předplatné, adresa URL, metriky a plán služby App Service. Pak vyberte hodnotu adresy URL .

    Screenshot that shows a URL and other function app details.

  3. Ověřte, že úvodní stránka říká, že je vaše aplikace funkcí "spuštěná a spuštěná".

    Screenshot that shows the welcome page for a function app.

  4. greeting Funkci vyvoláte pomocí následujícího curl příkazu v místním terminálu.

    Důležité

    Nahraďte YOUR_HTTP_TRIGGER_URL vlastní adresou URL funkce, kterou najdete na webu Azure Portal nebo výstupu.

    curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
    

    Výstup by měl vypadat zhruba takto:

    "Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
    

    K druhé funkci (funqyHello) můžete přistupovat také pomocí následujícího curl příkazu:

    curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
    

    Výstup by měl být stejný jako výstup, který jste si poznamenali dříve:

    "hello funqy"
    

    Pokud chcete na webu Azure Portal uplatnit základní funkci metrik, zkuste funkci vyvolat ve smyčce prostředí for :

    for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
    

    Po chvíli se na portálu zobrazí nějaká data metrik.

    Screenshot that shows function metrics in the portal.

Teď, když jste funkci Azure otevřeli na portálu, najdete další funkce, ke kterým máte přístup z portálu:

Vyčištění prostředků

Pokud tyto prostředky nepotřebujete, můžete je odstranit spuštěním následujícího příkazu v Azure Cloud Shellu nebo na místním terminálu:

az group delete --name <yourResourceGroupName> --yes

Další kroky

V tomto článku jste se naučili:

  • Spusťte režim vývoje Quarkus.
  • Nasazení aplikace Funqy do funkcí Azure pomocí .azure-functions-maven-plugin
  • Prozkoumejte výkon funkce na portálu.

Další informace o Azure Functions a Quarkus najdete v následujících článcích a odkazech: