Snabbstart: Skapa en Java-funktion i Azure från kommandoraden
I den här artikeln använder du kommandoradsverktyg för att skapa en Java-funktion som svarar på HTTP-begäranden. När du har testat koden lokalt distribuerar du den till den serverlösa miljön i Azure Functions.
Om Maven inte är det utvecklingsverktyg du föredrar kan du läsa våra liknande självstudier för Java-utvecklare:
Slutförande av den här snabbstarten medför en liten kostnad på några USD-cent eller mindre på ditt Azure-konto.
Konfigurera din lokala miljö
Innan du börjar måste du ha följande:
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Azure CLI version 2.4 eller senare.
Java Developer Kit, version 8, 11, 17, 21(endast Linux). Miljövariabeln
JAVA_HOME
måste anges till installationsplatsen för rätt version av JDK: et.Apache Maven, version 3.0 eller senare.
Installera Azure Functions Core Tools
Det rekommenderade sättet att installera Core Tools beror på operativsystemet på din lokala utvecklingsdator.
Följande steg använder ett Windows-installationsprogram (MSI) för att installera Core Tools v4.x. Mer information om andra paketbaserade installationsprogram finns i Core Tools readme.
Ladda ned och kör installationsprogrammet för Core Tools baserat på din version av Windows:
- v4.x – Windows 64-bitars (rekommenderas. Felsökning av Visual Studio Code kräver 64-bitars.)
- v4.x – Windows 32-bitars
Om du tidigare använde Windows-installationsprogrammet (MSI) för att installera Core Tools i Windows bör du avinstallera den gamla versionen från Lägg till Ta bort program innan du installerar den senaste versionen.
Skapa ett lokalt funktionsprojekt
I Azure Functions är ett funktionsprojekt en container för en eller flera enskilda funktioner som var och en svarar på en specifik utlösare. Alla funktioner i ett projekt delar samma lokala konfigurationer och värdkonfigurationer. I det här avsnittet skapar du ett funktionsprojekt som innehåller en enda funktion.
Kör följande kommando i en tom mapp för att skapa ett funktionsprojekt utifrån en Maven-arketyp.
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
Maven ber dig om de värden som behövs för att slutföra genereringen av projektet vid distributionen.
Ange följande värden när du uppmanas att göra det:Prompt Värde beskrivning groupId com.fabrikam
Ett värde som unikt identifierar projektet i alla projekt, enligt namngivningsreglerna för paket för Java. artifactId fabrikam-functions
Ett värde som är namnet på jar-filen, utan ett versionsnummer. version 1.0-SNAPSHOT
Välj standardvärdet. paket com.fabrikam
Ett värde som är Java-paketet för den genererade funktionskoden. Använd standardvärdet. Skriv
Y
eller tryck på Retur för att bekräfta.Maven skapar projektfilerna i en ny mapp med namnet artifactId, som i det här exemplet är
fabrikam-functions
.Navigera till projektmappen:
cd fabrikam-functions
Den här mappen innehåller olika filer för projektet, inklusive konfigurationsfiler med namnet local.settings.json och host.json. Eftersom local.settings.json kan innehålla hemligheter som hämtats från Azure undantas filen som standard från källkontrollen i .gitignore-filen .
(Valfritt) Granska filinnehållet
Om du vill kan du hoppa över till Kör funktionen lokalt och granska filinnehållet senare.
Function.java
Function.java innehåller en run
metod som tar emot begärandedata i variabeln request
är en HttpRequestMessage som är dekorerad med HttpTrigger-kommentaren, som definierar utlösarbeteendet.
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();
}
}
}
Svarsmeddelandet genereras av API:et HttpResponseMessage.Builder .
pom.xml
Inställningar för De Azure-resurser som skapats som värd för din app definieras i konfigurationselementet i plugin-programmet med ett groupId för com.microsoft.azure
i den genererade pom.xml-filen. Konfigurationselementet nedan instruerar till exempel en Maven-baserad distribution att skapa en funktionsapp i java-functions-group
resursgruppen i westus
regionen. Själva funktionsappen java-functions-app-service-plan
körs på Windows som finns i planen, vilket som standard är en serverlös förbrukningsplan.
<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>
Du kan ändra de här inställningarna för att styra hur resurser skapas i Azure, till exempel genom att ändra runtime.os
från windows
till linux
före den första distributionen. En fullständig lista över inställningar som stöds av Maven-plugin-programmet finns i konfigurationsinformationen.
FunctionTest.java
Arketypen genererar också ett enhetstest för din funktion. När du ändrar funktionen för att lägga till bindningar eller lägga till nya funktioner i projektet måste du också ändra testerna i FunctionTest.java-filen.
Kör funktionen lokalt
Kör funktionen genom att starta den lokala Azure Functions-körningsvärden från mappen LocalFunctionProj :
mvn clean package mvn azure-functions:run
Mot slutet av utdata bör följande rader visas:
... 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 ...
Kommentar
Om HttpExample inte visas som ovan startade du förmodligen värden utanför rotmappen i projektet. I så fall kan du använda Ctrl+C för att stoppa värden, navigera till projektets rotmapp och köra föregående kommando igen.
Kopiera URL:en för funktionen
HttpExample
från det här utdata till en webbläsare och lägg till frågesträngen?name=<YOUR_NAME>
, vilket gör den fullständiga URL:en till exempelhttp://localhost:7071/api/HttpExample?name=Functions
. Webbläsaren bör visa ett meddelande som ekar tillbaka frågesträngsvärdet. Terminalen där du startade projektet visar även loggutdata när du gör begäranden.När du är klar använder du Ctrl+C och väljer
y
att stoppa funktionsvärden.
Distribuera funktionsprojektet till Azure
En funktionsapp och relaterade resurser skapas i Azure när du först distribuerar ditt funktionsprojekt. Inställningarna för de Azure-resurser som skapats som värd för din app definieras i filen pom.xml. I den här artikeln accepterar du standardinställningarna.
Dricks
Om du vill skapa en funktionsapp som körs på Linux i stället för Windows ändrar du elementet runtime.os
i pom.xml-filen från windows
till linux
. Det finns stöd för att köra Linux i en förbrukningsplan i dessa regioner. Du kan inte ha appar som körs på Linux och appar som körs i Windows i samma resursgrupp.
Innan du kan distribuera loggar du in på din Azure-prenumeration med antingen Azure CLI eller Azure PowerShell.
az login
Kommandot az login loggar in dig på ditt Azure-konto.
Använd följande kommando för att distribuera projektet till en ny funktionsapp.
mvn azure-functions:deploy
Detta skapar följande resurser i Azure:
- Resursgrupp. Namngiven som java-functions-group.
- Lagringskonto. Krävs av Functions. Namnet genereras slumpmässigt baserat på krav för lagringskontonamn.
- Värdplan. Serverlös värd för funktionsappen i regionen westus . Namnet är java-functions-app-service-plan.
- Funktionsapp. En funktionsapp är distributions- och körningsenheten för dina funktioner. Namnet genereras slumpmässigt baserat på ditt artifactId, som läggs till med ett slumpmässigt genererat tal.
Distributionen paketar projektfilerna och distribuerar dem till den nya funktionsappen med zip-distribution. Koden körs från distributionspaketet i Azure.
Viktigt!
Lagringskontot används för att lagra viktiga appdata, ibland inklusive själva programkoden. Du bör begränsa åtkomsten från andra appar och användare till lagringskontot.
Anropa funktionen i Azure
Eftersom funktionen använder en HTTP-utlösare anropar du den genom att göra en HTTP-begäran till dess URL i webbläsaren eller med ett verktyg som curl.
Kopiera den fullständiga Anropa URL:en som visas i utdata från publiceringskommandot till ett webbläsaradressfält och lägga till frågeparametern ?name=Functions
. Webbläsaren bör visa liknande utdata som när du körde funktionen lokalt.
Kör följande kommando för att visa direktuppspelningsloggar i nära realtid:
func azure functionapp logstream <APP_NAME>
I ett separat terminalfönster eller i webbläsaren anropar du fjärrfunktionen igen. En utförlig logg över funktionskörningen i Azure visas i terminalen.
Rensa resurser
Om du fortsätter till nästa steg och lägger till en Azure Storage-köutdatabindning behåller du alla resurser på plats när du bygger vidare på det du redan har gjort.
Annars använder du följande kommando för att ta bort resursgruppen och alla dess inneslutna resurser för att undvika ytterligare kostnader.
az group delete --name java-functions-group