Quickstart: Een Java-functie maken in Azure vanaf de opdrachtregel

In dit artikel gebruikt u opdrachtregelprogramma's om een Java-functie te maken die reageert op HTTP-aanvragen. Nadat u de code lokaal hebt getest, implementeert u deze in de serverloze omgeving van Azure Functions.

Als Maven niet uw favoriete ontwikkelhulpprogramma is, raadpleegt u onze vergelijkbare zelfstudies voor Java-ontwikkelaars:

Voor het voltooien van deze quickstart worden kosten van een paar dollarcent of minder in rekening gebracht bij uw Azure-account.

Uw lokale omgeving configureren

Voordat u begint, moet u het volgende hebben:

Azure Functions Core Tools installeren

De aanbevolen manier om Core Tools te installeren, is afhankelijk van het besturingssysteem van uw lokale ontwikkelcomputer.

In de volgende stappen wordt een Windows Installer (MSI) gebruikt om Core Tools v4.x te installeren. Zie de leesmij voor Core Tools voor meer informatie over andere installatieprogramma's op basis van pakketten.

Download en voer het Core Tools-installatieprogramma uit op basis van uw versie van Windows:

Als u eerder Windows Installer (MSI) hebt gebruikt om Core Tools in Windows te installeren, moet u de oude versie verwijderen uit Programma's toevoegen voordat u de nieuwste versie installeert.

Een lokaal functieproject maken

In Azure Functions is een functieproject een container voor een of meer afzonderlijke functies die elk op een bepaalde trigger reageren. Alle functies in een project delen dezelfde lokale configuratie en hostingconfiguratie. In deze sectie maakt u een functieproject dat één functie bevat.

  1. Voer in een lege map de volgende opdracht uit om het Functions-project te genereren op basis van een Maven-archetype.

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

    Belangrijk

    • Gebruik -DjavaVersion=11 als u uw functies wilt uitvoeren in Java 11. Zie Java-versies voor meer informatie.
    • De omgevingsvariabele JAVA_HOME moet zijn ingesteld op de installatielocatie van de juiste versie van de JDK om dit artikel te kunnen voltooien.
  2. U wordt door Maven gevraagd om de waarden die nodig zijn om het project op het moment van implementatie te kunnen genereren.
    Geef de volgende waarden op als daarom wordt gevraagd:

    Prompt Weergegeven als Beschrijving
    groupId com.fabrikam Een waarde die uw project uniek identificeert binnen alle projecten, overeenkomstig de regels voor de naamgeving van pakketten voor Java.
    artifactId fabrikam-functions Een waarde die bestaat uit de naam van het JAR-bestand, zonder een versienummer.
    version 1.0-SNAPSHOT Kies de standaardwaarde.
    package com.fabrikam Een waarde die het Java-pakket aangeeft voor de gegenereerde functiecode. Gebruik de standaard.
  3. Typ Y of druk op Enter om te bevestigen.

    Maven maakt de projectbestanden in een nieuwe map met de naam van artifactId; in dit voorbeeld is dat fabrikam-functions.

  4. Navigeer naar de projectmap:

    cd fabrikam-functions
    

    Deze map bevat verschillende bestanden voor het project,waaronder configuratiebestanden met de naam local.settings.json en host.json. Omdat local.settings.json geheimen kan bevatten die zijn gedownload vanuit Azure, wordt het bestand standaard uitgesloten van broncodebeheer in het bestand .gitignore.

(Optioneel) De inhoud van het bestand bekijken

Desgewenst kunt u doorgaan naar De functie lokaal uitvoeren en de inhoud van het bestand later bekijken.

Function.java

Function.java bevat een run-methode waarmee aanvraaggegevens in de request-variabele worden ontvangen. Dit is een HttpRequestMessage die is gedecoreerd met de aantekening HttpTrigger, waarmee het gedrag van de trigger wordt gedefinieerd.

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

Het antwoordbericht wordt gegenereerd door de API HttpResponseMessage.Builder.

pom.xml

Instellingen voor de Azure-resources die zijn gemaakt voor het hosten van uw app, worden gedefinieerd in het element Configuratie van de invoegtoepassing met een groupId van com.microsoft.azure in het gegenereerde bestand pom.xml. Het configuratie-element hieronder geeft bijvoorbeeld een Maven-implementatie de instructie om een functie-app te maken in de resourcegroep java-functions-group in de regio westus. De functie-app zelf wordt uitgevoerd in Windows binnen het java-functions-app-service-plan-plan. Dit is standaard een serverloos verbruiksabonnement.

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

U kunt deze instellingen wijzigen om te bepalen hoe resources worden gemaakt in Azure, zoals door runtime.os van windows te wijzigen in linux vóór de eerste implementatie. Zie de Configuratiedetailsvoor een volledige lijst met instellingen die worden ondersteund door de Maven-invoegtoepassing.

FunctionTest.java

Het archetype genereert ook een moduletest voor uw functie. Wanneer u de functie wijzigt om bindingen of nieuwe functies aan het project toe te voegen, moet u ook de tests in het bestand FunctionTest.java wijzigen.

De functie lokaal uitvoeren

  1. Voer uw functie uit door de lokale Azure Functions runtime host te starten vanuit de map LocalFunctionProj:

    mvn clean package
    mvn azure-functions:run
    

    Naar het einde van de uitvoer moeten de volgende regels worden weergegeven:

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

    Notitie

    Als HttpExample niet verschijnt zoals hierboven weergegeven, hebt u waarschijnlijk de host gestart van buiten de hoofdmap van het project. In dat geval gebruikt u Ctrl+C om de host te stoppen, gaat u naar de hoofdmap van het project en voert u de vorige opdracht opnieuw uit.

  2. Kopieer de URL van uw HttpExample-functie van deze uitvoer naar een browser en voeg de query tekenreeks toe ?name=<YOUR_NAME>, waardoor de volledige URL verschijnt, zoals http://localhost:7071/api/HttpExample?name=Functions. In de browser wordt een bericht weergegeven dat de waarde van de querytekenreeks weergeeft. De terminal waarin u uw project hebt gestart, toont ook de logboek uitvoer wanneer u aanvragen doet.

  3. Wanneer u klaar bent, gebruikt u Ctrl+C en kiest u y om de functiehost te stoppen.

Het functieproject implementeren in Azure

Er worden een functie-app en gerelateerde resources in Azure gemaakt wanneer u uw functieproject voor het eerst implementeert. De instellingen voor de Azure-resources die zijn gemaakt om uw app te hosten, worden gedefinieerd in het pom.xml-bestand. In dit artikel gaat u akkoord met de standaardinstellingen.

Tip

Als u een functie-app wilt maken die wordt uitgevoerd op Linux in plaats van Windows, wijzigt u het runtime.os-element in het pom.xml-bestand van windows in linux. Het uitvoeren van Linux in een verbruiksplan wordt ondersteund in deze regio's. U kunt apps die worden uitgevoerd op Linux en apps die worden uitgevoerd in Windows niet dezelfde resourcegroep gebruiken.

  1. Voordat u kunt implementeren, meldt u zich aan bij uw Azure-abonnement met behulp van Azure CLI of Azure PowerShell.

    az login
    

    Met de opdracht az login meldt u zich aan bij uw Azure-account.

  2. Gebruik de volgende opdracht om uw project te implementeren in een nieuwe functie-app.

    mvn azure-functions:deploy
    

    Hiermee maakt u de volgende resources in Azure:

    • Resourcegroep. Met de naam java-functions-group.
    • Opslagaccount. Vereist door Funtions. De naam wordt willekeurig gegenereerd op basis van de vereisten van het opslagaccount.
    • Hostingabonnement. Serverloze hosting voor uw functie-app in de regio westus. De naam is java-functions-app-service-plan.
    • Functie-app. Een functie-app is de implementatie- en uitvoeringseenheid voor uw functies. De naam wordt willekeurig gegenereerd op basis van uw artifactId,waaraan een willekeurig gegenereerd nummer wordt toegevoegd.

    De implementatie verpakt de projectbestanden en implementeert deze in de nieuwe functie-app met behulp van zip implementation. De code wordt uitgevoerd vanuit het implementatiepakket in Azure.

Belangrijk

Het opslagaccount wordt gebruikt voor het opslaan van belangrijke app-gegevens, soms inclusief de toepassingscode zelf. U moet de toegang van andere apps en gebruikers tot het opslagaccount beperken.

De functie aanroepen in Azure

Omdat uw functie gebruikmaakt van een HTTP-trigger, roept u deze aan door een HTTP-aanvraag naar de URL in de browser of met een hulpprogramma zoals curl.

Kopieer de volledige Aanroep-URL die wordt weergegeven in de uitvoer van de publicatieopdracht naar de adresbalk van een browser en voeg de queryparameter ?name=Functions toe. De browser moet vergelijkbare uitvoer weergeven als u de functie lokaal hebt uitgevoerd.

The output of the function run on Azure in a browser

Voer de volgende opdracht uit om bijna in realtime stroomlogboeken weer te geven:

func azure functionapp logstream <APP_NAME> 

Roep in een afzonderlijk terminalvenster of in de browser opnieuw de externe functie aan. In de terminal wordt een uitgebreid logboek weergegeven van de uitvoering van de functie in Azure.

Resources opschonen

Als u verdergaat met de volgende stap en een uitvoerbinding voor een Azure Storage-wachtrij toevoegt, kunt u alle resources het beste op dezelfde plaats laten staan. U gaat ze namelijk gebruiken in deze stap.

Gebruik anders de volgende opdracht om de resourcegroep en alle bijbehorende resources te verwijderen om te voorkomen dat er verdere kosten in rekening worden gebracht.

az group delete --name java-functions-group

Volgende stappen