Rövid útmutató: Java-függvény létrehozása az Azure-ban a parancssorból

Ebben a cikkben parancssori eszközökkel hoz létre egy Java-függvényt, amely a HTTP-kérelmekre válaszol. A kódot a helyi tesztelését követően az Azure Functions kiszolgáló nélküli környezetében helyezheti üzembe.

Ha nem a Maven az előnyben részesített fejlesztési eszköz, tekintse meg a Java-fejlesztőknek készült hasonló oktatóanyagokat:

A rövid útmutató elvégzése néhány cent (USD) vagy még kevesebb költséggel jár az Azure-fiókját illetően.

A helyi környezet konfigurálása

Mielőtt hozzákezdene, a következőkre van szüksége:

  • Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.

  • Az Azure CLI 2.4-es vagy újabb verziója.

  • A Java Developer Kit, 8-es, 11-es, 17-es és 21-es verzió (csak Linuxon). A JAVA_HOME környezeti változót a JDK megfelelő verziójának telepítési helyére kell állítani.

  • Az Apache Maven 3.0-s vagy újabb verziója.

Az Azure Functions Core Tools telepítése

A Core Tools telepítésének ajánlott módja a helyi fejlesztőszámítógép operációs rendszerétől függ.

Az alábbi lépések windowsos telepítővel (MSI) telepítik a Core Tools v4.x-et. További információ a csomagalapú telepítőkről: Core Tools readme.

Töltse le és futtassa a Core Tools telepítőt a Windows-verzió alapján:

Ha korábban windowsos telepítőt (MSI) használt a Core Tools windowsos telepítéséhez, a legújabb verzió telepítése előtt el kell távolítania a régi verziót a Programok eltávolítása bővítményből.

Helyi függvényprojekt létrehozása

Az Azure Functionsben a függvényprojekt egy tároló egy vagy több egyedi függvény számára, amelyek mindegyike egy adott eseményindítóra válaszol. A projekt összes függvénye ugyanazokkal a helyi és üzemeltetési konfigurációkkal rendelkezik. Ebben a szakaszban egy függvényprojektet hoz létre, amely egyetlen függvényt tartalmaz.

  1. Egy üres mappában futtassa a következő parancsot a Functions-projekt Maven archetype-ból való létrehozásához.

    mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
    

    Fontos

    • Használja a -DjavaVersion=11 kapcsolót, ha a függvényeket Java 11-en szeretné futtatni. További információ: Java-verziók.
    • A JAVA_HOME cikk elvégzéséhez a környezeti változót a JDK megfelelő verziójának telepítési helyére kell állítani.
  2. A Maven a projekt üzembe helyezéshez szükséges értékeit kéri.
    Amikor a rendszer kéri, adja meg a következő értékeket:

    Adatkérés Érték Leírás
    groupId com.fabrikam Olyan érték, amely egyedileg azonosítja a projektet az összes projektben, a Java csomagelnevezési szabályait követve.
    artifactId fabrikam-functions Olyan érték, amely a jar neve, verziószám nélkül.
    Változat 1.0-SNAPSHOT Válassza ki az alapértelmezett értéket.
    Csomag com.fabrikam Egy érték, amely a létrehozott függvénykód Java-csomagja. Használja az alapértelmezettet.
  3. Írja be Y vagy nyomja le az Enter billentyűt a megerősítéshez.

    A Maven egy új mappában hozza létre a projektfájlokat az artifactId nevű mappában, amely ebben a példában az fabrikam-functions.

  4. Navigáljon a projektmappába:

    cd fabrikam-functions
    

    Ez a mappa különböző fájlokat tartalmaz a projekthez, beleértve a local.settings.json és host.json nevű konfigurációs fájlokat. Mivel local.settings.json tartalmazhat az Azure-ból letöltött titkos kulcsokat, a fájl alapértelmezés szerint ki van zárva a .gitignore fájlból a forrásvezérlőből.

(Nem kötelező) A fájl tartalmának vizsgálata

Ha szükséges, továbbléphet a függvény helyi futtatására, és később megvizsgálhatja a fájl tartalmát.

Function.java

Function.java olyan metódust run tartalmaz, amely kérésadatokat fogad a request változóban, egy HttpRequestMessage, amely a HttpTrigger széljegyzetével van díszítve, amely meghatározza az eseményindító viselkedését.

package com.fabrikam;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;

import java.util.Optional;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET, HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        final String query = request.getQueryParameters().get("name");
        final String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

A válaszüzenetet a HttpResponseMessage.Builder API hozza létre.

pom.xml

Gépház az alkalmazás üzemeltetéséhez létrehozott Azure-erőforrásokat a beépülő modul konfigurációs eleme határozza meg a létrehozott pom.xml fájl groupId azonosítójávalcom.microsoft.azure. Az alábbi konfigurációs elem például arra utasít egy Maven-alapú üzembe helyezést, hogy hozzon létre egy függvényalkalmazást a java-functions-group régió erőforráscsoportjában westus . Maga a függvényalkalmazás a java-functions-app-service-plan csomagban üzemeltetett Windows rendszeren fut, amely alapértelmezés szerint kiszolgáló nélküli használati csomag.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-functions-maven-plugin</artifactId>
    <version>${azure.functions.maven.plugin.version}</version>
    <configuration>
        <!-- function app name -->
        <appName>${functionAppName}</appName>
        <!-- function app resource group -->
        <resourceGroup>java-functions-group</resourceGroup>
        <!-- function app service plan name -->
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <!-- function app region-->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
        <region>westus</region>
        <!-- function pricingTier, default to be consumption if not specified -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
        <!-- <pricingTier></pricingTier> -->
        <!-- Whether to disable application insights, default is false -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
        <!-- <disableAppInsights></disableAppInsights> -->
        <runtime>
            <!-- runtime os, could be windows, linux or docker-->
            <os>windows</os>
            <javaVersion>8</javaVersion>
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~4</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Ezeket a beállításokat úgy módosíthatja, hogy szabályozhassa az erőforrások létrehozását az Azure-ban, például a kezdeti üzembe helyezés előttire linux váltással.runtime.oswindows A Maven beépülő modul által támogatott beállítások teljes listájáért tekintse meg a konfiguráció részleteit.

FunctionTest.java

Az archetípus egy egységtesztet is létrehoz a függvényhez. Amikor módosítja a függvényt kötések hozzáadására vagy új függvények hozzáadására a projekthez, a teszteket is módosítania kell a FunctionTest.java fájlban.

Függvény helyi futtatása

  1. Futtassa a függvényt úgy, hogy elindítja a helyi Azure Functions futtatókörnyezet-gazdagépet a LocalFunctionProj mappából:

    mvn clean package
    mvn azure-functions:run
    

    A kimenet vége felé a következő soroknak kell megjelennie:

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    Feljegyzés

    Ha a HttpExample nem jelenik meg a fent látható módon, valószínűleg a projekt gyökérmappájából indította el a gazdagépet. Ebben az esetben a Ctrl C billentyűkombinációval +állítsa le a gazdagépet, keresse meg a projekt gyökérmappáját, és futtassa újra az előző parancsot.

  2. Másolja a függvény URL-címét HttpExample ebből a kimenetből egy böngészőbe, és fűzze hozzá a lekérdezési sztringet ?name=<YOUR_NAME>, így a teljes URL-cím hasonló http://localhost:7071/api/HttpExample?name=Functionslesz. A böngészőnek egy olyan üzenetet kell megjelenítenie, amely visszaadja a lekérdezési sztring értékét. Az a terminál, amelyben elindította a projektet, a naplókimenetet is megjeleníti a kérések során.

  3. Ha elkészült, használja a Ctrl C billentyűkombinációt+, és állítsa y le a függvény gazdagépet.

A függvényprojekt üzembe helyezése az Azure-ban

A függvényalkalmazás és a kapcsolódó erőforrások az Azure-ban jönnek létre a függvényprojekt első üzembe helyezésekor. az alkalmazás üzemeltetéséhez létrehozott Azure-erőforrások Gépház a pom.xml fájlban vannak definiálva. Ebben a cikkben elfogadja az alapértelmezett értékeket.

Tipp.

Ha Windows helyett Linux rendszeren futó függvényalkalmazást szeretne létrehozni, módosítsa a runtime.os pom.xml fájl elemét a következőre windowslinux. Ezekben a régiókban támogatott a Linux használata használatalapú csomagban. Nem rendelkezhet Linuxon futó alkalmazásokkal és windowsos alkalmazásokkal ugyanabban az erőforráscsoportban.

  1. Az üzembe helyezés előtt jelentkezzen be az Azure-előfizetésbe az Azure CLI vagy az Azure PowerShell használatával.

    az login
    

    Az az login parancs bejelentkezteti Az Azure-fiókjába.

  2. A következő paranccsal helyezze üzembe a projektet egy új függvényalkalmazásban.

    mvn azure-functions:deploy
    

    Ez a következő erőforrásokat hozza létre az Azure-ban:

    • Erőforráscsoport. Java-functions-group néven elnevezve.
    • Storage-fiók. A Függvények megkövetelik. A rendszer véletlenszerűen hozza létre a nevet a Tárfiók nevének követelményei alapján.
    • Üzemeltetési terv. Kiszolgáló nélküli üzemeltetés a függvényalkalmazáshoz a westus régióban. A név java-functions-app-service-plan.
    • Függvényalkalmazás. A függvényalkalmazás a függvények üzembe helyezési és végrehajtási egysége. A név véletlenszerűen jön létre az artifactId alapján, véletlenszerűen generált számmal kiegészítve.

    Az üzembe helyezés tömöríti a projektfájlokat, és zip-alapú üzembe helyezéssel telepíti őket az új függvényalkalmazásba. A kód az Azure-beli üzembehelyezési csomagból fut.

Fontos

A tárfiók fontos alkalmazásadatok tárolására szolgál, néha magában az alkalmazáskódban is. Korlátoznia kell a hozzáférést más alkalmazásoktól és felhasználóktól a tárfiókhoz.

A függvény meghívása az Azure-ban

Mivel a függvény HTTP-eseményindítót használ, http-kérést küld az URL-címére a böngészőben, vagy egy olyan eszközzel, mint a curl.

Másolja a közzétételi parancs kimenetében látható teljes meghívási URL-címet egy böngészőcímsávra a lekérdezési paraméter ?name=Functionshozzáfűzésével. A böngészőnek hasonló kimenetet kell megjelenítenie, mint amikor helyileg futtatta a függvényt.

The output of the function run on Azure in a browser

Futtassa a következő parancsot a közel valós idejű streamelési naplók megtekintéséhez:

func azure functionapp logstream <APP_NAME> 

Egy külön terminálablakban vagy a böngészőben hívja újra a távoli függvényt. Az Azure-beli függvényvégrehajtás részletes naplója jelenik meg a terminálban.

Az erőforrások eltávolítása

Ha folytatja a következő lépést , és hozzáad egy Azure Storage-üzenetsor kimeneti kötését, tartsa a helyén az összes erőforrást, miközben a már elvégzett feladatokra épít.

Ellenkező esetben a következő paranccsal törölje az erőforráscsoportot és annak összes benne foglalt erőforrását, hogy elkerülje a további költségek felmerülését.

az group delete --name java-functions-group

Következő lépések