Rövid útmutató: Java-függvény létrehozása az Azure-ban a parancssorból
Ebben a cikkben parancssori eszközökkel hoz létre egy Java-függvényt, amely a HTTP-kérelmekre válaszol. A kódot a helyi tesztelését követően az Azure Functions kiszolgáló nélküli környezetében helyezheti üzembe.
Ha nem a Maven az előnyben részesített fejlesztési eszköz, tekintse meg a Java-fejlesztőknek készült hasonló oktatóanyagokat:
A rövid útmutató elvégzése néhány cent (USD) vagy még kevesebb költséggel jár az Azure-fiókját illetően.
A helyi környezet konfigurálása
Mielőtt hozzákezdene, a következőkre van szüksége:
Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
Az Azure CLI 2.4-es vagy újabb verziója.
A Java Developer Kit, 8-es, 11-es, 17-es és 21-es verzió (csak Linuxon). A
JAVA_HOME
környezeti változót a JDK megfelelő verziójának telepítési helyére kell állítani.Az Apache Maven 3.0-s vagy újabb verziója.
Az Azure Functions Core Tools telepítése
A Core Tools telepítésének ajánlott módja a helyi fejlesztőszámítógép operációs rendszerétől függ.
Az alábbi lépések windowsos telepítővel (MSI) telepítik a Core Tools v4.x-et. További információ a csomagalapú telepítőkről: Core Tools readme.
Töltse le és futtassa a Core Tools telepítőt a Windows-verzió alapján:
- v4.x – Windows 64 bites (ajánlott. A Visual Studio Code hibakereséséhez 64 bitesre van szükség.)
- v4.x – Windows 32 bites
Ha korábban windowsos telepítőt (MSI) használt a Core Tools windowsos telepítéséhez, a legújabb verzió telepítése előtt el kell távolítania a régi verziót a Programok eltávolítása bővítményből.
Helyi függvényprojekt létrehozása
Az Azure Functionsben a függvényprojekt egy tároló egy vagy több egyedi függvény számára, amelyek mindegyike egy adott eseményindítóra válaszol. A projekt összes függvénye ugyanazokkal a helyi és üzemeltetési konfigurációkkal rendelkezik. Ebben a szakaszban egy függvényprojektet hoz létre, amely egyetlen függvényt tartalmaz.
Egy üres mappában futtassa a következő parancsot a Functions-projekt Maven archetype-ból való létrehozásához.
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
A Maven a projekt üzembe helyezéshez szükséges értékeit kéri.
Amikor a rendszer kéri, adja meg a következő értékeket:Felszólítás Érték Leírás groupId com.fabrikam
Olyan érték, amely egyedileg azonosítja a projektet az összes projektben, a Java csomagelnevezési szabályait követve. artifactId fabrikam-functions
Olyan érték, amely a jar neve, verziószám nélkül. verzió 1.0-SNAPSHOT
Válassza ki az alapértelmezett értéket. csomag com.fabrikam
Egy érték, amely a létrehozott függvénykód Java-csomagja. Használja az alapértelmezettet. Írja be
Y
vagy nyomja le az Enter billentyűt a megerősítéshez.A Maven egy új mappában hozza létre a projektfájlokat az artifactId nevű mappában, amely ebben a példában az
fabrikam-functions
.Navigáljon a projektmappába:
cd fabrikam-functions
Ez a mappa különböző fájlokat tartalmaz a projekthez, beleértve a local.settings.json és host.json nevű konfigurációs fájlokat. Mivel local.settings.json tartalmazhat az Azure-ból letöltött titkos kulcsokat, a fájl alapértelmezés szerint ki van zárva a .gitignore fájlból a forrásvezérlőből.
(Nem kötelező) A fájl tartalmának vizsgálata
Ha szükséges, továbbléphet a függvény helyi futtatására, és később megvizsgálhatja a fájl tartalmát.
Function.java
Function.java olyan metódust run
tartalmaz, amely kérésadatokat fogad a request
változóban, egy HttpRequestMessage, amely a HttpTrigger széljegyzetével van díszítve, amely meghatározza az eseményindító viselkedését.
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();
}
}
}
A válaszüzenetet a HttpResponseMessage.Builder API hozza létre.
pom.xml
Az alkalmazás üzemeltetéséhez létrehozott Azure-erőforrások beállításait a beépülő modul konfigurációs eleme határozza meg a létrehozott pom.xml fájl groupId azonosítójávalcom.microsoft.azure
. Az alábbi konfigurációs elem például arra utasít egy Maven-alapú üzembe helyezést, hogy hozzon létre egy függvényalkalmazást a java-functions-group
régió erőforráscsoportjában westus
. Maga a függvényalkalmazás a java-functions-app-service-plan
csomagban üzemeltetett Windows rendszeren fut, amely alapértelmezés szerint kiszolgáló nélküli használati csomag.
<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>
Ezeket a beállításokat úgy módosíthatja, hogy szabályozhassa az erőforrások létrehozását az Azure-ban, például a kezdeti üzembe helyezés előttire linux
váltással.runtime.os
windows
A Maven beépülő modul által támogatott beállítások teljes listájáért tekintse meg a konfiguráció részleteit.
FunctionTest.java
Az archetípus egy egységtesztet is létrehoz a függvényhez. Amikor módosítja a függvényt kötések hozzáadására vagy új függvények hozzáadására a projekthez, a teszteket is módosítania kell a FunctionTest.java fájlban.
Függvény helyi futtatása
Futtassa a függvényt úgy, hogy elindítja a helyi Azure Functions futtatókörnyezet-gazdagépet a LocalFunctionProj mappából:
mvn clean package mvn azure-functions:run
A kimenet vége felé a következő soroknak kell megjelennie:
... 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 ...
Feljegyzés
Ha a HttpExample nem jelenik meg a fent látható módon, valószínűleg a projekt gyökérmappájából indította el a gazdagépet. Ebben az esetben a Ctrl C billentyűkombinációval +állítsa le a gazdagépet, keresse meg a projekt gyökérmappáját, és futtassa újra az előző parancsot.
Másolja a függvény URL-címét
HttpExample
ebből a kimenetből egy böngészőbe, és fűzze hozzá a lekérdezési sztringet?name=<YOUR_NAME>
, így a teljes URL-cím hasonlóhttp://localhost:7071/api/HttpExample?name=Functions
lesz. A böngészőnek egy olyan üzenetet kell megjelenítenie, amely visszaadja a lekérdezési sztring értékét. Az a terminál, amelyben elindította a projektet, a naplókimenetet is megjeleníti a kérések során.Ha elkészült, használja a Ctrl C billentyűkombinációt+, és állítsa
y
le a függvény gazdagépet.
A függvényprojekt üzembe helyezése az Azure-ban
A függvényalkalmazás és a kapcsolódó erőforrások az Azure-ban jönnek létre a függvényprojekt első üzembe helyezésekor. Az alkalmazás üzemeltetéséhez létrehozott Azure-erőforrások beállításait a pom.xml fájl határozza meg. Ebben a cikkben elfogadja az alapértelmezett értékeket.
Tipp.
Ha Windows helyett Linux rendszeren futó függvényalkalmazást szeretne létrehozni, módosítsa a runtime.os
pom.xml fájl elemét a következőre windows
linux
. Ezekben a régiókban támogatott a Linux használata használatalapú csomagban. Nem rendelkezhet Linuxon futó alkalmazásokkal és windowsos alkalmazásokkal ugyanabban az erőforráscsoportban.
Az üzembe helyezés előtt jelentkezzen be az Azure-előfizetésbe az Azure CLI vagy az Azure PowerShell használatával.
az login
Az az login parancs bejelentkezteti Az Azure-fiókjába.
A következő paranccsal helyezze üzembe a projektet egy új függvényalkalmazásban.
mvn azure-functions:deploy
Ez a következő erőforrásokat hozza létre az Azure-ban:
- Erőforráscsoport. Java-functions-group néven elnevezve.
- Storage-fiók. A Függvények megkövetelik. A rendszer véletlenszerűen hozza létre a nevet a Tárfiók nevének követelményei alapján.
- Üzemeltetési terv. Kiszolgáló nélküli üzemeltetés a függvényalkalmazáshoz a westus régióban. A név java-functions-app-service-plan.
- Függvényalkalmazás. A függvényalkalmazás a függvények üzembe helyezési és végrehajtási egysége. A név véletlenszerűen jön létre az artifactId alapján, véletlenszerűen generált számmal kiegészítve.
Az üzembe helyezés tömöríti a projektfájlokat, és zip-alapú üzembe helyezéssel telepíti őket az új függvényalkalmazásba. A kód az Azure-beli üzembehelyezési csomagból fut.
Fontos
A tárfiók fontos alkalmazásadatok tárolására szolgál, néha magában az alkalmazáskódban is. Korlátoznia kell a hozzáférést más alkalmazásoktól és felhasználóktól a tárfiókhoz.
A függvény meghívása az Azure-ban
Mivel a függvény HTTP-eseményindítót használ, http-kérést küld az URL-címére a böngészőben, vagy egy olyan eszközzel, mint a curl.
Másolja a közzétételi parancs kimenetében látható teljes meghívási URL-címet egy böngészőcímsávra a lekérdezési paraméter ?name=Functions
hozzáfűzésével. A böngészőnek hasonló kimenetet kell megjelenítenie, mint amikor helyileg futtatta a függvényt.
Futtassa a következő parancsot a közel valós idejű streamelési naplók megtekintéséhez:
func azure functionapp logstream <APP_NAME>
Egy külön terminálablakban vagy a böngészőben hívja újra a távoli függvényt. Az Azure-beli függvényvégrehajtás részletes naplója jelenik meg a terminálban.
Az erőforrások eltávolítása
Ha folytatja a következő lépést , és hozzáad egy Azure Storage-üzenetsor kimeneti kötését, tartsa a helyén az összes erőforrást, miközben a már elvégzett feladatokra épít.
Ellenkező esetben a következő paranccsal törölje az erőforráscsoportot és annak összes benne foglalt erőforrását, hogy elkerülje a további költségek felmerülését.
az group delete --name java-functions-group