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 ontwikkelprogramma is, bekijkt 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:
Een Azure-account met een actief abonnement. Gratis een account maken
De Azure Functions Core Tools versie 4.x.
Azure CLI versie 2.4 of hoger.
Java Developer Kit, versie 8 of 11. De omgevingsvariabele
JAVA_HOMEmoet zijn ingesteld op de installatielocatie van de juiste versie van de JDK.Apache Maven, versie 3.0 of hoger.
Controle van vereisten
Voer in een terminal- of opdrachtvenster uit
func --versionom te controleren of Azure Functions Core Tools versie 4.x is.Voer
az --versionuit om te controleren of u versie 2.4 of hoger hebt van de Azure CLI.Voer
az loginuit om u aan te melden bij Azure en te controleren of u een actief abonnement hebt.
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.
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=8Belangrijk
- Gebruik
-DjavaVersion=11als u uw functies wilt uitvoeren in Java 11. Zie Java-versies voor meer informatie. - De omgevingsvariabele
JAVA_HOMEmoet zijn ingesteld op de installatielocatie van de juiste versie van de JDK om dit artikel te kunnen voltooien.
- Gebruik
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:Vraag Waarde Beschrijving groupId com.fabrikamEen waarde die uw project uniek identificeert binnen alle projecten, overeenkomstig de regels voor de naamgeving van pakketten voor Java. artifactId fabrikam-functionsEen waarde die bestaat uit de naam van het JAR-bestand, zonder een versienummer. version 1.0-SNAPSHOTKies de standaardwaarde. package com.fabrikamEen waarde die het Java-pakket aangeeft voor de gegenereerde functiecode. Gebruik de standaard. Typ
Yof 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.Navigeer naar de projectmap:
cd fabrikam-functionsDeze 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.
/**
* 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();
}
}
}
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>${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>
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
Voer uw functie uit door de lokale Azure Functions runtime host te starten vanuit de map LocalFunctionProj:
mvn clean package mvn azure-functions:runNaar 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.
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, zoalshttp://localhost:7071/api/HttpExample?name=Functions. In de browser moet een bericht worden weergegeven dat de waarde van de queryreeks herhaalt. De terminal waarin u uw project hebt gestart, toont ook de logboek uitvoer wanneer u aanvragen doet.Wanneer u klaar bent, gebruikt u Ctrl+C en kiest u
yom 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.
Voordat u kunt implementeren, meldt u zich aan bij uw Azure-abonnement met behulp van Azure CLI of Azure PowerShell.
az loginMet de opdracht az login meldt u zich aan bij uw Azure-account.
Gebruik de volgende opdracht om uw project te implementeren in een nieuwe functie-app.
mvn azure-functions:deployHiermee 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.
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.

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
