Sdílet prostřednictvím


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.

Požadavky

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 jste v stavu odpojeného HEAD, je bezpečné tuto zprávu ignorovat. Vzhledem k tomu, že tento článek nevyžaduje žádné commitů, je odpojený stav HEAD vhodný.

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 zpracovávají 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 Function aplikací musí být globálně jedinečné v rámci celé služby 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 funkce přidává název skupiny prostředků. 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 instrukcí nutná, ale bude potřebná později. Pro zjednodušení vyžaduje projekt Maven, abyste definovali vlastnost.

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

    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řidejte injektování závislostí do funkce

Technologie otevřeného standardu Jakarta EE Contexts a Dependency Injection (CDI) poskytuje injektování závislostí v rámci Quarkus.

  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;
        }
    
    }
    

    Uložte soubor.

    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";
        }
    
    }
    

    Uložte soubor.

  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í možnosti --tenant. Napří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 podle instrukcí ve výstupu a ověřte 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 pro azure-functions-maven-plugin je k dispozici na stránce 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 blízko na konci.

    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 portálu Azure zadejte function app a stiskněte klávesu Enter. Vaše funkční aplikace by se měla nasadit a zobrazit s názvem <yourResourceGroupName>-function-quarkus.

    Snímek obrazovky znázorňující aplikaci funkcí na portálu

  2. Výběrem funkční aplikace 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 .

    Snímek obrazovky znázorňující adresu URL a další podrobnosti aplikace funkcí

  3. Ověřte, že úvodní stránka zobrazuje, že je vaše aplikace funkční.

    Snímek obrazovky znázorňující úvodní stránku aplikace funkcí

  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 Azure portálu nebo ve 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 portálu Azure uplatnit základní schopnost metrik, zkuste vyvolat funkci ve smyčce shellu 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.

    Snímek obrazovky znázorňující metriky funkcí na portálu

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:

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

Další kroky

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

  • Spusťte režim vývoje Quarkus.
  • Nasadit aplikaci 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: