Sdílet prostřednictvím


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

V tomto článku pomocí nástrojů příkazového řádku vytvoříte funkci Java, která reaguje na požadavky HTTP. Po místním otestování kód nasadíte do bezserverového prostředí Azure Functions.

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

Při dokončení tohoto rychlého zprovoznění vzniknou ve vašem účtu Azure náklady ve výši několika centů USD (nebo menší).

Konfigurace místního prostředí

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

Instalace nástrojů Azure Functions Core

Doporučený způsob instalace nástrojů Core Tools závisí na operačním systému místního vývojového počítače.

Následující kroky používají instalační službu systému Windows (MSI) k instalaci nástrojů Core Tools verze 4.x. Další informace o dalších instalačních programech založených na balíčcích najdete v souboru readme nástroje Core Tools.

Stáhněte a spusťte instalační program Core Tools na základě vaší verze Windows:

Pokud jste dříve použili instalační službu systému Windows (MSI) k instalaci nástrojů Core Tools ve Windows, měli byste před instalací nejnovější verze odinstalovat starou verzi z nástroje Přidat odebrat programy.

Vytvoření místního projektu funkce

Ve službě Azure Functions je projekt funkcí kontejnerem pro jednu nebo více jednotlivých funkcí, které každá reaguje na konkrétní trigger. Všechny funkce v projektu sdílejí stejné místní a hostitelské konfigurace. 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 JAVA_HOME bylo možné dokončit tento článek, musí být proměnná prostředí nastavená na umístění instalace správné verze 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:

    Instrukce Hodnota Popis
    groupId com.fabrikam Hodnota, která jednoznačně identifikuje váš projekt ve všech projektech podle pravidel pojmenování balíčků pro Javu.
    artifactId fabrikam-functions Hodnota, která je názvem souboru JAR bez čísla verze.
    version 1.0-SNAPSHOT Zvolte výchozí hodnotu.
    balíček com.fabrikam Hodnota, která je balíčkem Java pro vygenerovaný kód funkce. Použijte výchozí hodnotu.
  3. Potvrďte zadáním Y nebo stisknutím klávesy Enter.

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

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

    cd fabrikam-functions
    

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

(Volitelné) Prozkoumání obsahu souboru

V případě potřeby můžete funkci spustit místně a později obsah souboru prozkoumat.

Function.java

Function.java obsahuje metodurun, která přijímá data požadavku v request proměnné je HttpRequestMessage, která je zdobena poznámkou HttpTrigger, která definuje chování triggeru.

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

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

pom.xml

Nastavení prostředků Azure vytvořených pro hostování vaší aplikace jsou definována v konfiguračním prvku modulu plug-in se skupinou Id com.microsoft.azure vygenerovaného souboru pom.xml. Například následující element konfigurace dává pokyn nasazení založenému na Mavenu, aby vytvořilo aplikaci funkcí ve java-functions-group skupině prostředků v westus oblasti. Samotná aplikace funkcí běží ve Windows hostovaných v java-functions-app-service-plan plánu, což je ve výchozím nastavení bezserverový plán Consumption.

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

Tato nastavení můžete změnit, abyste mohli řídit, jak se prostředky vytvářejí v Azure, například změnou runtime.os z windows před linux počátečním nasazením. Úplný seznam nastavení podporovaných modulem plug-in Maven najdete v podrobnostech konfigurace.

FunctionTest.java

Archetyp také vygeneruje test jednotek pro vaši funkci. Když funkci změníte a přidáte do projektu vazby nebo přidáte 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 modulu runtime Azure Functions 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 httpExample nezobrazí, jak je znázorněno výše, pravděpodobně jste hostitele spustili 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 spusťte předchozí příkaz znovu.

  2. Zkopírujte adresu URL vaší HttpExample funkce z tohoto výstupu do prohlížeče a připojte řetězec ?name=<YOUR_NAME>dotazu a vytvořte úplnou adresu URL jako 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 spustili projekt, se při provádění požadavků zobrazuje také výstup protokolu.

  3. Až budete hotovi, pomocí kláves Ctrl+C 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 definována v souboru pom.xml. 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 runtime.os prvek v souboru pom.xml z windows na linux. V těchto oblastech se podporuje spouštění Linuxu v plánu Consumption. Nemůžete mít aplikace, které běží v Linuxu a aplikacích, které běží ve 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 PowerShellu.

    az login
    

    Příkaz az login vás přihlásí ke svému úč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ů. Pojmenováno jako java-functions-group.
    • Účet úložiště. Vyžaduje funkce. Název se generuje náhodně na základě požadavků na název účtu úložiště.
    • Plán hostování. Bezserverové hostování vaší aplikace funkcí v oblasti westus . Název je java-functions-app-service-plan.
    • Aplikace funkcí. Aplikace funkcí je jednotka nasazení a spouštění pro vaše funkce. Název se náhodně vygeneruje na základě id artefaktu, připojeného s náhodně vygenerovaným číslem.

    Nasazení zabalí soubory projektu a nasadí je do nové aplikace funkcí pomocí nasazení zip. Kód se spustí z balíčku pro nasazení v Azure.

Důležité

Účet úložiště slouží k ukládání důležitých dat aplikace, někdy včetně samotného kódu aplikace. Přístup z jiných aplikací a uživatelů byste měli omezit na účet úložiště.

Vyvolání funkce v Azure

Vzhledem k tomu, že vaše funkce používá trigger HTTP, vyvoláte ji tak, že v prohlížeči nebo pomocí nástroje, jako je curl, vytvoří požadavek HTTP na jeho adresu URL.

Zkopírujte úplnou adresu URL vyvolání zobrazené ve výstupu příkazu publish do adresního řádku prohlížeče a připojte parametr ?name=Functionsdotazu . Prohlížeč by měl zobrazit podobný výstup jako při místním spuštění funkce.

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

Spuštěním následujícího příkazu zobrazte 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 znovu volejte vzdálenou funkci. Podrobný protokol spuštění funkce v Azure se zobrazí 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, ponechte všechny prostředky na místě, protože budete vycházet z toho, co jste už udělali.

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

az group delete --name java-functions-group

Další kroky