Bereitstellen serverloser Java-Apps mit Quarkus auf Azure Functions
In diesem Artikel entwickeln, erstellen und stellen Sie eine serverlose Java-App für Azure Functions bereit und verwenden dafür Quarkus. In diesem Artikel wird Quarkus Funqy und die integrierte Unterstützung für den Azure Functions-HTTP-Trigger für Java verwendet. Wenn Sie Quarkus mit Azure Functions verwenden, erhalten Sie die Leistungsfähigkeit des Quarkus-Programmiermodells mit der Skalierbarkeit und Flexibilität von Azure Functions. Wenn Sie fertig sind, führen Sie serverlose Quarkus-Anwendungen auf Azure Functions aus und überwachen Ihre App weiterhin in Azure.
Voraussetzungen
- Die Azure CLI ist auf Ihrem eigenen Computer installiert.
- Ein Azure-Konto. Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.
- Java JDK 17 mit
JAVA_HOME
ist entsprechend konfiguriert. Dieser Artikel wurde für Benutzer von Java 17 geschrieben, aber Azure Functions und Quarkus unterstützen auch ältere Versionen von Java. - Apache Maven 3.8.1+.
Erstellen des App-Projekts
Verwenden Sie den folgenden Befehl, um das Java-Beispielprojekt für diesen Artikel zu klonen. Das Beispiel befindet sich auf GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Wenn eine Meldung darüber angezeigt wird, dass Sie sich in einem Zustand HEAD getrennt befinden, kann diese Nachricht problemlos ignoriert werden. Da für diesen Artikel keine Commits erforderlich sind, ist der Zustand „HEAD getrennt“ angemessen.
Sehen Sie sich die Beispielfunktion an. Öffnen Sie die Datei functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java.
Führen Sie den folgenden Befehl aus. Die @Funq
-Anmerkung macht Ihre Methode (in diesem Fall funqyHello
) zu einer serverlosen Funktion.
@Funq
public String funqyHello() {
return "hello funqy";
}
Java für Azure Functions verfügt über eigene Azure-spezifische Anmerkungen. Diese Anmerkungen sind jedoch nicht erforderlich, wenn Sie Quarkus in einfacher Funktion auf Azure Functions verwenden, wie wir dies hier tun. Weitere Informationen zu Java-Anmerkungen für Azure Functions finden Sie im Java-Entwicklerhandbuch für Azure Functions.
Sofern Sie nichts anderes angeben, ist der Name der Funktion mit dem Namen der Methode identisch. Sie können auch den folgenden Befehl verwenden, um den Funktionsnamen mit einem Parameter für die Anmerkung zu definieren:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Der Name ist wichtig. Er wird Teil des REST-URI zum Aufrufen der Funktion, wie weiter unten im Artikel gezeigt.
Lokales Testen der Funktion
Verwenden Sie mvn
, um den Quarkus-Entwicklungsmodus auf Ihrem lokalen Terminal auszuführen. Wenn Sie Quarkus auf diese Weise ausführen, wird das erneute Live-Laden mit Hintergrundkompilierung ermöglicht. Wenn Sie Ihre Java-Dateien und/oder Ihre Ressourcendateien ändern und Ihren Browser aktualisieren, werden diese Änderungen automatisch wirksam.
Eine Browseraktualisierung löst eine Überprüfung des Arbeitsbereichs aus. Wenn bei der Überprüfung Änderungen erkannt werden, werden die Java-Dateien neu kompiliert, und die Anwendung wird erneut bereitgestellt. Ihre erneut bereitgestellte Anwendung bearbeitet die Anforderung. Wenn Probleme bei der Kompilierung oder Bereitstellung auftreten, werden Sie über eine Fehlerseite darüber informiert.
Ersetzen Sie yourResourceGroupName
im folgenden Verfahren durch einen Ressourcengruppennamen. Funktions-App-Namen müssen in Azure global eindeutig sein. Ressourcengruppennamen müssen innerhalb eines Abonnements global eindeutig sein. In diesem Artikel wird die erforderliche Eindeutigkeit erreicht, indem der Ressourcengruppenname dem Funktionsnamen vorangestellt wird. Stellen Sie gegebenenfalls einen eindeutigen Bezeichner für alle von Ihnen erstellten Namen voran, die eindeutig sein müssen. Es hat sich bewährt, Ihre Initialen gefolgt vom heutigen Datum im Format mmdd
zu verwenden.
Die Ressourcengruppe ist für diesen Teil der Anweisungen nicht erforderlich, wird jedoch später benötigt. Der Einfachheit halber müssen Sie beim Maven-Projekt die Eigenschaft definieren.
Rufen Sie den Quarkus-Entwicklungsmodus auf:
mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
Die Ausgabe sollte wie folgt aussehen:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] (Quarkus Main Thread) quarkus-azure-function 1.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx.) started in 1.290s. Listening on: http://localhost:8080 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, funqy-http, smallrye-context-propagation, vertx] -- Tests paused Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Greifen Sie mit dem Befehl
CURL
auf Ihrem lokalen Terminal auf die Funktion zu:curl localhost:8080/api/funqyHello
Die Ausgabe sollte wie folgt aussehen:
"hello funqy"
Hinzufügen von Abhängigkeitsinjektionen zur Funktion
Die auf offenen Standards basierende Technologie „Jakarta EE Contexts and Dependency Injection“ (CDI) bietet Abhängigkeitsinjektionen in Quarkus. Eine allgemeine Übersicht über die Injektion im Allgemeinen und CDI speziell finden Sie im Jakarta EE-Tutorial.
Fügen Sie eine neue Funktion hinzu, die Abhängigkeitsinjektionen verwendet.
Erstellen Sie die Datei GreetingService.java im Verzeichnis functions-quarkus/src/main/java/io/quarkus. Verwenden Sie den folgenden Code als Quellcode der Datei:
package io.quarkus; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class GreetingService { public String greeting(String name) { return "Welcome to build Serverless Java with Quarkus on Azure Functions, " + name; } }
Speichern Sie die Datei .
GreetingService
ist ein injizierbares Bean, das einegreeting()
-Methode implementiert. Die Methode gibt die ZeichenfolgennachrichtWelcome...
mit dem Parametername
zurück.Öffnen Sie die vorhandene Datei functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java. Ersetzen Sie die Klasse durch den folgenden Code, um ein neues
gService
-Feld und die Methodegreeting
hinzuzufügen:package io.quarkus; import javax.inject.Inject; import io.quarkus.funqy.Funq; public class GreetingFunction { @Inject GreetingService gService; @Funq public String greeting(String name) { return gService.greeting(name); } @Funq public String funqyHello() { return "hello funqy"; } }
Speichern Sie die Datei .
Greifen Sie mit dem Befehl
curl
auf Ihrem lokalen Terminal auf die Funktiongreeting
zu:curl -d '"Dan"' -X POST localhost:8080/api/greeting
Die Ausgabe sollte wie folgt aussehen:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Wichtig
Mit Live-Coding (auch als Entwicklungsmodus bezeichnet) können Sie die App ausführen und Änderungen in Echtzeit vornehmen. Quarkus kompiliert die App automatisch erneut und lädt sie neu, wenn Änderungen vorgenommen werden. Dies ist ein leistungsstarker und effizienter Entwicklungsstil, den Sie in diesem Artikel einsetzen werden.
Bevor Sie mit dem nächsten Schritt fortfahren, beenden Sie den Quarkus-Entwicklungsmodus, indem Sie STRG+C drücken.
Bereitstellen der Anwendung in Azure
Falls noch nicht geschehen, melden Sie sich mit dem folgenden az login-Befehl bei Ihrem Azure-Abonnement an, und befolgen Sie die Anweisungen auf dem Bildschirm.
az login
Hinweis
Wenn Ihren Azure-Anmeldeinformationen mehrere Azure-Mandanten zugeordnet sind, müssen Sie angeben, bei welchem Mandanten Sie sich anmelden möchten. Hierzu kann die Option
--tenant
verwendet werden. Beispiel:az login --tenant contoso.onmicrosoft.com
.Fahren Sie im Webbrowser mit dem Vorgang fort. Falls kein Webbrowser verfügbar ist oder nicht geöffnet werden kann, verwenden Sie den Gerätecodefluss mit
az login --use-device-code
.Nachdem Sie sich erfolgreich angemeldet haben, sollte die Ausgabe ihres lokalen Terminals wie folgt aussehen:
xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxx 'Microsoft' [ { "cloudName": "AzureCloud", "homeTenantId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx", "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "isDefault": true, "managedByTenants": [], "name": "Contoso account services", "state": "Enabled", "tenantId": "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx", "user": { "name": "user@contoso.com", "type": "user" } } ]
Erstellen sie die Funktionen, und stellen Sie sie in Azure bereit.
Die Datei pom.xml, die Sie im vorherigen Schritt generiert haben, verwendet
azure-functions-maven-plugin
. Durch die Ausführung vonmvn install
werden Konfigurationsdateien und ein Stagingverzeichnis generiert, das fürazure-functions-maven-plugin
erforderlich ist. Verwenden Sie füryourResourceGroupName
den Wert, den Sie zuvor verwendet haben.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Melden Sie sich während der Bereitstellung bei Azure an. Das
azure-functions-maven-plugin
-Plug-In ist so konfiguriert, dass es jedes Mal zur Azure-Anmeldung auffordert, wenn das Projekt bereitgestellt wird. Während des Buildvorgangs wird eine Ausgabe ähnlich der folgenden angezeigt:[INFO] Auth type: DEVICE_CODE To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXCWTLGMP to authenticate.
Gehen Sie entsprechend den Anweisungen in der Ausgabe vor, und authentifizieren Sie sich bei Azure mithilfe des Browsers und des bereitgestellten Gerätecodes. Viele weitere Authentifizierungs- und Konfigurationsoptionen sind verfügbar. Die vollständige Referenzdokumentation für
azure-functions-maven-plugin
finden Sie unter Azure Functions: Konfigurationsdetails.Nach der Authentifizierung sollte der Buildvorgang fortgesetzt und abgeschlossen werden. Stellen Sie sicher, dass die Ausgabe
BUILD SUCCESS
nahe dem Ende enthält.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
Im Ausgabeprotokoll finden Sie auch die URL zum Auslösen Ihrer Funktion in Azure:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Es dauert eine Weile, bis die Bereitstellung abgeschlossen ist. In der Zwischenzeit erkunden wir Azure Functions im Azure-Portal.
Zugreifen auf und Überwachen der serverlosen Funktion in Azure
Melden Sie sich beim Portal an, und stellen Sie sicher, dass Sie denselben Mandanten und dasselbe Abonnement ausgewählt haben, das Sie in der Azure CLI verwendet haben.
Geben Sie Funktions-App oben in der Suchleiste im Azure-Portal ein, und drücken Sie die EINGABETASTE. Ihre Funktions-App sollte bereitgestellt werden und mit dem Namen
<yourResourceGroupName>-function-quarkus
angezeigt werden.Wählen Sie die Funktions-App aus, um detaillierte Informationen anzuzeigen, z. B. Standort, Abonnement, URL, Metriken und App Service-Plan. Wählen Sie dann den URL-Wert aus.
Vergewissern Sie sich, dass auf der Willkommensseite angegeben ist, dass Ihre Funktions-App ausgeführt wird.
Rufen Sie die
greeting
-Funktion auf, indem Sie den folgendencurl
-Befehl in Ihrem lokalen Terminal verwenden.Wichtig
Ersetzen Sie
YOUR_HTTP_TRIGGER_URL
durch Ihre eigene Funktions-URL, die Sie im Azure-Portal oder in der Ausgabe finden.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
Die Ausgabe sollte in etwa wie folgt aussehen:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
Sie können mit dem folgenden
funqyHello
-Befehl auch auf die andere Funktion (curl
) zugreifen:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
Die Ausgabe sollte mit der zuvor beobachteten identisch sein:
"hello funqy"
Wenn Sie die grundlegende Metrikfunktion im Azure-Portal verwenden möchten, versuchen Sie, die Funktion in einer
for
-Shell-Schleife aufzurufen:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Nach einer Weile werden einige Metrikdaten im Portal angezeigt.
Nachdem Sie Ihre Azure-Funktion im Portal geöffnet haben, finden Sie hier weitere Features, auf die Sie über das Portal zugreifen können:
- Überwachen der Leistung Ihrer Azure-Funktion. Weitere Informationen finden Sie unter Überwachen von Azure Functions.
- Untersuchen von Telemetriedaten. Weitere Informationen finden Sie unter Analysieren von Azure Functions-Telemetriedaten in Application Insights.
- Einrichten der Protokollierung. Weitere Informationen finden Sie unter Aktivieren des Streamings von Ausführungsprotokollen in Azure Functions.
Bereinigen von Ressourcen
Wenn Sie diese Ressourcen nicht mehr benötigen, können Sie sie löschen, indem Sie den folgenden Befehl ausführen:
az group delete --name <yourResourceGroupName> --yes
Nächste Schritte
In diesem Artikel haben Sie Folgendes gelernt:
- Führen Sie den Quarkus-Entwicklungsmodus aus.
- Stellen Sie eine Funqy-App in Azure Functions bereit. Verwenden Sie dafür
azure-functions-maven-plugin
. - Untersuchen Sie die Leistung der Funktion im Portal.
Weitere Informationen zu Azure Functions und Quarkus finden Sie in den folgenden Artikeln und Verweisen: