Rychlý start: Vytvoření funkce Java v Azure z příkazového řádku

V tomto článku použijete nástroje příkazového řádku k vytvoření funkce Java, která reaguje na požadavky HTTP. Po místním otestování kódu ho nasadíte do prostředí bez serveru Azure Functions.

Pokud Maven není upřednostňovaný vývojářský nástroj, podívejte se na naše podobné kurzy pro vývojáře v Javě:

Za dokončení tohoto rychlého startu se ve vašem účtu Azure účtu Azure účtu vynačítá náklady na pár centů USD nebo méně.

Konfigurace místního prostředí

Než začnete, musíte mít následující:

Kontrola předpokladů

  • V terminálu nebo v příkazovém okně spusťte a func --version zkontrolujte, že Azure Functions Core Tools verze 4.x.

  • Spusťte az --version a zkontrolujte, že azure CLI má verzi 2.4 nebo novější.

  • Spuštěním az login se přihlaste k Azure a ověřte aktivní předplatné.

Vytvoření projektu místní funkce

V Azure Functions je projekt funkce kontejner pro jednu nebo více jednotlivých funkcí, které každá reaguje na konkrétní aktivační událost. Všechny funkce v projektu sdílejí stejnou místní konfiguraci a konfiguraci hostování. V této části vytvoříte projekt funkce, který obsahuje jednu funkci.

  1. Spuštěním následujícího příkazu v prázdné složce vygenerujte projekt Functions z archetypu Maven.

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

    Důležité

    • Pokud chcete funkce spouštět ve verzi Java 11, použijte -DjavaVersion=11. Další informace najdete v tématu Verze Javy.
    • Aby bylo možné dokončit tento článek, proměnná prostředí musí být nastavená na umístění instalace správné verze JAVA_HOME sady JDK.
  2. Maven vás požádá o hodnoty potřebné k dokončení generování projektu při nasazení.
    Po zobrazení výzvy zadejte následující hodnoty:

    Výzva Hodnota Popis
    groupId com.fabrikam Hodnota, která jedinečně identifikuje váš projekt ve všech projektech podle pravidel pojmenování balíčků pro Javu.
    artifactId (ID artefaktu) fabrikam-functions Hodnota, která je název souboru jar bez čísla verze.
    Verze 1.0-SNAPSHOT Zvolte výchozí hodnotu.
    Balíček com.fabrikam Hodnota, která je balíček Java pro vygenerovaný kód funkce. Použijte výchozí hodnotu.
  3. Potvrďte Y to zadáním nebo stisknutím klávesy Enter.

    Maven vytvoří soubory projektu v nové složce s názvem artifactId, což je v tomto příkladu fabrikam-functions .

  4. Přejděte do složky projektu:

    cd fabrikam-functions
    

    Tato složka obsahuje různé soubory pro projekt, včetně konfiguračních souborů s názvem local.settings.json a host.json. Vzhledem k tomu, že soubor local.settings.json může obsahovat tajné kódy stažené z Azure, je soubor v souboru .gitignore ve výchozím nastavení vyloučený ze správy zdrojového kódu.

(Volitelné) Prozkoumání obsahu souboru

V případě potřeby můžete přeskočit na Možnost Spustit funkci místně a prozkoumat obsah souboru později.

Function.java

Soubor Function.java obsahuje metodu, která přijímá data požadavku v proměnné , je httprequestmessage, která je dekorovaná poznámkou run request HttpTrigger, která definuje chování triggeru.

/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 */

package com.functions;

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

Zpráva odpovědi je vygenerována rozhraním API HttpResponseMessage.Builder.

pom.xml

Nastavení prostředků Azure vytvořených pro hostování vaší aplikace jsou definované v elementu konfigurace modulu plug-in s groupId ve vygenerované com.microsoft.azure pom.xml souboru. Například následující element konfigurace instruuje nasazení založené na Mavenu, aby vytvořilo aplikaci funkcí ve skupině prostředků java-functions-group v westus oblasti. Samotná aplikace funkcí běží na Windows v plánu, což je ve výchozím nastavení java-functions-app-service-plan plán Consumption bez serveru.

<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>${functionResourceGroup}</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>${functionAppRegion}</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>
            <!-- for docker function, please set the following parameters -->
            <!-- <image>[hub-user/]repo-name[:tag]</image> -->
            <!-- <serverId></serverId> -->
            <!-- <registryUrl></registryUrl>  -->
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~3</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Tato nastavení můžete změnit, abyste mohli řídit způsob vytváření prostředků v Azure, například změnou runtime.os z windows na před linux počátečním nasazením. Úplný seznam nastavení podporovaných plug-inem Maven najdete v podrobnostech o konfiguraci.

FunctionTest.java

Archetyp také vygeneruje test jednotek pro vaši funkci. Když funkci změníte tak, aby se do projektu přidávají vazby nebo aby se do projektu přidávají nové funkce, budete také muset upravit testy v souboru FunctionTest.java.

Místní spuštění funkce

  1. Spusťte funkci spuštěním místního hostitele Azure Functions runtime ze složky LocalFunctionProj:

    mvn clean package
    mvn azure-functions:run
    

    Na konci výstupu by se měly zobrazit následující řádky:

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

    Poznámka

    Pokud se příklad HttpExample nezobrazí, jak je znázorněno výše, pravděpodobně jste hostitele s zahájili mimo kořenovou složku projektu. V takovém případě pomocí Ctrl C zastavte hostitele, přejděte do kořenové složky projektu a + znovu spusťte předchozí příkaz.

  2. Zkopírujte adresu URL vaší funkce z tohoto výstupu do prohlížeče a připojte řetězec dotazu HttpExample ?name=<YOUR_NAME> , aby byla úplná adresa URL, například http://localhost:7071/api/HttpExample?name=Functions . Prohlížeč by měl zobrazit zprávu, která vrací hodnotu řetězce dotazu. V terminálu, ve kterém jste s projektem začali, se při žádostech zobrazuje také výstup protokolu.

  3. Až budete hotovi, stiskněte Ctrl C a + zastavte y hostitele funkcí.

Nasazení projektu funkce do Azure

Aplikace funkcí a související prostředky se vytvoří v Azure při prvním nasazení projektu funkcí. Nastavení prostředků Azure vytvořených pro hostování vaší aplikace jsou definované vpom.xml souboru. V tomto článku přijmete výchozí hodnoty.

Tip

Pokud chcete vytvořit aplikaci funkcí spuštěnou v Linuxu místo Windows, změňte element v souboru runtime.os pom.xml z windows na linux . Spuštění Linuxu v plánu Consumption se podporuje v těchto oblastech. Nemůžete mít aplikace, které běží v Linuxu, a aplikace, které běží Windows ve stejné skupině prostředků.

  1. Před nasazením se přihlaste ke svému předplatnému Azure pomocí Azure CLI nebo Azure PowerShell.

    az login
    

    Příkaz az login vás přihlásí k vašemu účtu Azure.

  2. Pomocí následujícího příkazu nasaďte projekt do nové aplikace funkcí.

    mvn azure-functions:deploy
    

    Tím se v Azure vytvoří následující prostředky:

    • Skupina prostředků. Má název java-functions-group.
    • Storage účtu. Vyžadované funkcí. Název se generuje náhodně na základě Storage požadavků na název účtu.
    • Plán hostování. Hostování bez serveru pro vaši aplikaci funkcí v oblasti westus Název je java-functions-app-service-plan.
    • Aplikace funkcí. Aplikace funkcí je jednotka nasazení a spuštění vašich funkcí. Název se náhodně generuje na základě vašeho artifactId a připojuje se k náhodně vygenerovanému číslu.

    Nasazení zabalí soubory projektu a nasadí je do nové aplikace Function App pomocí nasazení zip. Kód se spouští z balíčku pro nasazení v Azure.

Vyvolání funkce v Azure

Vzhledem k tomu, že funkce používá Trigger HTTP, vyvoláte ji pomocí požadavku HTTP na adresu URL v prohlížeči nebo pomocí nástroje, jako je například kudrlinkou.

Zkopírujte úplnou adresu URL pro vyvolání zobrazenou ve výstupu příkazu publikovat do adresního řádku prohlížeče a přidejte parametr dotazu &name=Functions . V prohlížeči by se měl zobrazit podobný výstup jako při spuštění funkce místně.

Výstup funkce spuštěné v Azure v prohlížeči

Spuštěním následujícího příkazu zobrazíte protokoly streamovánítéměř v reálném čase:

func azure functionapp logstream <APP_NAME> 

V samostatném okně terminálu nebo v prohlížeči zavolejte vzdálenou funkci znovu. Podrobný protokol provádění funkce v Azure je zobrazený v terminálu.

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

pokud budete pokračovat k dalšímu kroku a přidáte výstupní vazbu fronty Azure Storage, zachovejte všechny prostředky na místě, jak budete vytvářet informace o tom, co jste už provedli.

Jinak pomocí následujícího příkazu odstraňte skupinu prostředků a všechny její obsažené prostředky, abyste se vyhnuli vzniku dalších nákladů.

az group delete --name java-functions-group

Další kroky