Szybki start: tworzenie funkcji Java na platformie Azure z poziomu wiersza polecenia
W tym artykule użyjesz narzędzi wiersza polecenia, aby utworzyć funkcję Języka Java, która odpowiada na żądania HTTP. Po przetestowaniu kodu lokalnie należy wdrożyć go w środowisku bezserwerowym usługi Azure Functions.
Jeśli narzędzie Maven nie jest preferowanym narzędziem programistycznym, zapoznaj się z naszymi podobnymi samouczkami dla deweloperów języka Java:
- Narzędzie Gradle
- IntelliJ IDEA
- Visual Studio Code
Ukończenie tego przewodnika Szybki start wiąże się z naliczeniem niewielkiej opłaty w wysokości kilku centów USD lub mniej na koncie platformy Azure.
Konfigurowanie środowiska lokalnego
Przed rozpoczęciem musisz mieć następujące elementy:
Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
Interfejs wiersza polecenia platformy Azure w wersji 2.4 lub nowszej.
Zestaw Java Developer Kit, wersja 8, 11, 17, 21 (tylko system Linux). Zmienna
JAVA_HOME
środowiskowa musi być ustawiona na lokalizację instalacji prawidłowej wersji zestawu JDK.Narzędzie Apache Maven, wersja 3.0 lub nowsza.
Instalowanie podstawowych narzędzi usługi Azure Functions
Zalecany sposób instalowania narzędzi Core Tools zależy od systemu operacyjnego lokalnego komputera programistycznego.
Poniższe kroki umożliwiają zainstalowanie narzędzi Core Tools w wersji 4.x za pomocą Instalatora Windows (MSI). Aby uzyskać więcej informacji na temat innych instalatorów opartych na pakietach, zobacz plik readme narzędzi Core Tools.
Pobierz i uruchom instalatora narzędzi Core Tools na podstawie używanej wersji systemu Windows:
- Wersja 4.x — windows 64-bitowy (zalecane. Debugowanie programu Visual Studio Code wymaga 64-bitowej wersji).
- Wersja 4.x — windows 32-bitowy
Jeśli poprzednio użyto instalatora Windows (MSI) do zainstalowania narzędzi Core Tools w systemie Windows, przed zainstalowaniem najnowszej wersji należy odinstalować starą wersję z sekcji Dodaj usuń programy.
Tworzenie projektu funkcji lokalnej
W usłudze Azure Functions projekt funkcji jest kontenerem dla co najmniej jednej pojedynczej funkcji, która odpowiada na określony wyzwalacz. Wszystkie funkcje w projekcie współdzielą te same konfiguracje lokalne i hostujące. W tej sekcji utworzysz projekt funkcji zawierający jedną funkcję.
W pustym folderze uruchom następujące polecenie, aby wygenerować projekt usługi Functions z archetypu narzędzia Maven.
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
Ważne
- Użyj polecenia
-DjavaVersion=11
, jeśli chcesz, aby funkcje działały w języku Java 11. Aby dowiedzieć się więcej, zobacz Wersje języka Java. - Aby ukończyć ten artykuł, zmienna
JAVA_HOME
środowiskowa musi być ustawiona na lokalizację instalacji prawidłowej wersji zestawu JDK.
- Użyj polecenia
Narzędzie Maven prosi o podanie wartości potrzebnych do zakończenia generowania projektu we wdrożeniu.
Po wyświetleniu monitu podaj następujące wartości:Monit Wartość Opis groupId com.fabrikam
Wartość, która jednoznacznie identyfikuje projekt we wszystkich projektach, zgodnie z regułami nazewnictwa pakietów dla języka Java. artifactId fabrikam-functions
Wartość, która jest nazwą pliku jar bez numeru wersji. version 1.0-SNAPSHOT
Wybierz wartość domyślną. pakiet com.fabrikam
Wartość, która jest pakietem Java dla wygenerowanego kodu funkcji. Użyj wartości domyślnej. Wpisz
Y
lub naciśnij Enter, aby potwierdzić.Narzędzie Maven tworzy pliki projektu w nowym folderze o nazwie artifactId, która w tym przykładzie to
fabrikam-functions
.Przejdź do folderu projektu:
cd fabrikam-functions
Ten folder zawiera różne pliki dla projektu, w tym pliki konfiguracji o nazwie local.settings.json i host.json. Ponieważ local.settings.json może zawierać wpisy tajne pobrane z platformy Azure, plik jest domyślnie wykluczony z kontroli źródła w pliku gitignore .
(Opcjonalnie) Sprawdzanie zawartości pliku
W razie potrzeby możesz przejść do sekcji Uruchamianie funkcji lokalnie i później zbadać zawartość pliku.
Function.java
Function.java zawiera metodęrun
, która odbiera dane żądania w request
zmiennej, jest komunikatem HttpRequestMessage, który jest ozdobiony adnotacją HttpTrigger, która definiuje zachowanie wyzwalacza.
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();
}
}
}
Komunikat odpowiedzi jest generowany przez interfejs API HttpResponseMessage.Builder .
pom.xml
Ustawienia zasobów platformy Azure utworzonych do hostowania aplikacji są definiowane w elemecie konfiguracji wtyczki za pomocą identyfikatora com.microsoft.azure
groupId w wygenerowanym pliku pom.xml. Na przykład poniższy element konfiguracji instruuje wdrożenie oparte na narzędziu Maven w celu utworzenia aplikacji funkcji w java-functions-group
grupie zasobów w westus
regionie. Sama aplikacja funkcji działa w systemie Windows hostowanym java-functions-app-service-plan
w planie, który domyślnie jest bezserwerowym planem Zużycie.
<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>
Możesz zmienić te ustawienia, aby kontrolować sposób tworzenia zasobów na platformie Azure, na przykład przez zmianę runtime.os
z windows
na linux
przed początkowym wdrożeniem. Aby uzyskać pełną listę ustawień obsługiwanych przez wtyczkę Maven, zobacz szczegóły konfiguracji.
FunctionTest.java
Archetyp generuje również test jednostkowy dla funkcji. Po zmianie funkcji w celu dodania powiązań lub dodania nowych funkcji do projektu należy również zmodyfikować testy w pliku FunctionTest.java .
Lokalne uruchamianie funkcji
Uruchom funkcję, uruchamiając lokalny host środowiska uruchomieniowego usługi Azure Functions z folderu LocalFunctionProj :
mvn clean package mvn azure-functions:run
Na końcu danych wyjściowych powinny zostać wyświetlone następujące wiersze:
... 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 ...
Uwaga
Jeśli funkcja HttpExample nie jest wyświetlana jak pokazano powyżej, prawdopodobnie uruchomiono hosta spoza folderu głównego projektu. W takim przypadku użyj Ctrl+C, aby zatrzymać hosta, przejść do folderu głównego projektu i ponownie uruchomić poprzednie polecenie.
Skopiuj adres URL funkcji z tych danych wyjściowych
HttpExample
do przeglądarki i dołącz ciąg?name=<YOUR_NAME>
zapytania , tworząc pełny adres URL, taki jakhttp://localhost:7071/api/HttpExample?name=Functions
. W przeglądarce powinien zostać wyświetlony komunikat, który zwraca wartość ciągu zapytania. Terminal, w którym rozpoczęto projekt, pokazuje również dane wyjściowe dziennika podczas wysyłania żądań.Gdy skończysz, użyj Ctrl+C i wybierz,
y
aby zatrzymać hosta funkcji.
Wdrażanie projektu funkcji na platformie Azure
Aplikacja funkcji i powiązane zasoby są tworzone na platformie Azure podczas pierwszego wdrażania projektu funkcji. Ustawienia zasobów platformy Azure utworzonych do hostowania aplikacji są definiowane w pliku pom.xml. W tym artykule zaakceptujesz wartości domyślne.
Napiwek
Aby utworzyć aplikację funkcji uruchomioną w systemie Linux zamiast systemu Windows, zmień runtime.os
element w pliku pom.xml z windows
na linux
. Uruchamianie systemu Linux w planie zużycia jest obsługiwane w tych regionach. Nie można mieć aplikacji uruchamianych w systemie Linux i aplikacjach uruchomionych w systemie Windows w tej samej grupie zasobów.
Przed wdrożeniem zaloguj się do subskrypcji platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.
az login
Polecenie az login powoduje zalogowanie się do konta platformy Azure.
Użyj następującego polecenia, aby wdrożyć projekt w nowej aplikacji funkcji.
mvn azure-functions:deploy
Spowoduje to utworzenie następujących zasobów na platformie Azure:
- Grupa zasobów. Nazwana jako java-functions-group.
- Konto magazynu. Wymagane przez funkcje. Nazwa jest generowana losowo na podstawie wymagań dotyczących nazwy konta magazynu.
- Plan hostingu. Bezserwerowe hostowanie aplikacji funkcji w regionie westus . Nazwa to java-functions-app-service-plan.
- Aplikacja funkcji. Aplikacja funkcji to jednostka wdrażania i wykonywania funkcji. Nazwa jest generowana losowo na podstawie identyfikatora artifactId, dołączana z losowo wygenerowaną liczbą.
Wdrożenie pakuje pliki projektu i wdraża je w nowej aplikacji funkcji przy użyciu wdrożenia zip. Kod jest uruchamiany z pakietu wdrożeniowego na platformie Azure.
Ważne
Konto magazynu służy do przechowywania ważnych danych aplikacji, czasami w tym samego kodu aplikacji. Należy ograniczyć dostęp z innych aplikacji i użytkowników do konta magazynu.
Wywoływanie funkcji na platformie Azure
Ponieważ funkcja używa wyzwalacza HTTP, należy go wywołać, wysyłając żądanie HTTP do jego adresu URL w przeglądarce lub za pomocą narzędzia takiego jak curl.
Skopiuj pełny adres URL wywołania widoczny w danych wyjściowych polecenia publikowania na pasku adresu przeglądarki, dołączając parametr ?name=Functions
zapytania . Przeglądarka powinna wyświetlać podobne dane wyjściowe, jak po uruchomieniu funkcji lokalnie.
Uruchom następujące polecenie, aby wyświetlić dzienniki przesyłania strumieniowego niemal w czasie rzeczywistym:
func azure functionapp logstream <APP_NAME>
W osobnym oknie terminalu lub w przeglądarce ponownie wywołaj funkcję zdalną. Pełny dziennik wykonywania funkcji na platformie Azure jest wyświetlany w terminalu.
Czyszczenie zasobów
Jeśli przejdziesz do następnego kroku i dodasz powiązanie wyjściowe kolejki usługi Azure Storage, zachowaj wszystkie zasoby na miejscu, gdy będziesz opierać się na tym, co zostało już zrobione.
W przeciwnym razie użyj następującego polecenia, aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby, aby uniknąć ponoszenia dalszych kosztów.
az group delete --name java-functions-group