Číst v angličtině

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í APT k instalaci Nástrojů Core Tools do distribuce Ubuntu/Debian Linuxu. Další linuxové distribuce najdete v souboru readme core Tools.

  1. Nainstalujte klíč GPG úložiště balíčků Společnosti Microsoft, abyste ověřili integritu balíčku:

    Bash
    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    
  2. Před aktualizací APT nastavte zdrojový seznam APT.

    Ubuntu
    Bash
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs 2>/dev/null)-prod $(lsb_release -cs 2>/dev/null) main" > /etc/apt/sources.list.d/dotnetdev.list'
    
    Debian
    Bash
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/debian/$(lsb_release -rs 2>/dev/null | cut -d'.' -f 1)/prod $(lsb_release -cs 2>/dev/null) main" > /etc/apt/sources.list.d/dotnetdev.list'
    
  3. /etc/apt/sources.list.d/dotnetdev.list Zkontrolujte v souboru jeden z příslušných řetězců verze Linuxu v následující tabulce:

    Linuxová distribuce Verze
    Debian 12 bookworm
    Debian 11 bullseye
    Debian 10 buster
    Debian 9 stretch
    Ubuntu 22.04 jammy
    Ubuntu 20.04 focal
    Ubuntu 19.04 disco
    Ubuntu 18.10 cosmic
    Ubuntu 18.04 bionic
    Ubuntu 17.04 zesty
    Ubuntu 16.04/Linux Mint 18 xenial
  4. Spusťte aktualizaci zdroje APT:

    Bash
    sudo apt-get update
    
  5. Nainstalujte balíček Core Tools:

    Bash
    sudo apt-get install azure-functions-core-tools-4
    

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.

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

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

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

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

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

    Azure CLI
    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í.

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

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

Azure CLI
az group delete --name java-functions-group

Další kroky