Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
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.
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.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.
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"
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 eine greeting()
-Methode implementiert. Die Methode gibt die Zeichenfolgennachricht Welcome...
mit dem Parameter name
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 Methode greeting
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 Funktion greeting
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.
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 von mvn install
werden Konfigurationsdateien und ein Stagingverzeichnis generiert, das für azure-functions-maven-plugin
erforderlich ist. Verwenden Sie für yourResourceGroupName
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.
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 folgenden curl
-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:
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
In diesem Artikel haben Sie Folgendes gelernt:
azure-functions-maven-plugin
.Weitere Informationen zu Azure Functions und Quarkus finden Sie in den folgenden Artikeln und Verweisen:
Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenTraining
Modul
Bereitstellen einer Quarkus-Anwendung in Azure Container Apps - Training
Erstellen Sie eine Quarkus-Anwendung, verbinden Sie sie mit einer PostgreSQL-Datenbank, und stellen Sie sie dann in Azure Container Apps bereit.
Zertifizierung
Microsoft Certified: Azure Developer Associate - Certifications
Erstellen von End-to-End-Lösungen in Microsoft Azure zum Erstellen von Azure Functions-Lösungen, Implementieren und Verwalten von Web-Apps, Entwickeln von Lösungen mit Azure Storage u. v. m.
Dokumentation
Java-Entwicklerreferenz zu Azure Functions
Erfahren Sie, wie Sie mithilfe von Java Funktionen entwickeln können.
Erstellen einer Java-Funktion über die Befehlszeile: Azure Functions
Erfahren Sie, wie Sie eine Java-Funktion über die Befehlszeile erstellen und anschließend das lokale Projekt für das serverlose Hosten in Azure Functions veröffentlichen.
Spring Cloud-Funktion in Azure - Java on Azure
Erfahren Sie mehr über die Verwendung der Spring Cloud Function in Azure.