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í:
Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
Azure CLI verze 2.4 nebo novější.
Sada Java Developer Kit verze 8, 11, 17, 21 (jenom Linux). Proměnná
JAVA_HOME
prostředí musí být nastavena na umístění instalace správné verze sady JDK.Apache Maven verze 3.0 nebo novější.
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:
- v4.x – Windows 64bitová verze (doporučeno. Ladění editoru Visual Studio Code vyžaduje 64bitovou verzi.)
- v4.x – Windows 32bitová verze
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.
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.
- Pokud chcete funkce spouštět ve verzi Java 11, použijte
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. 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-functions
v tomto příkladu .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
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.
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 jakohttp://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.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ů.
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.
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=Functions
dotazu . Prohlížeč by měl zobrazit podobný výstup jako při místním spuštění funkce.
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