Wdrażanie bezserwerowych aplikacji Java za pomocą aplikacji Quarkus w usłudze Azure Functions
W tym artykule utworzysz, skompilujesz i wdrożysz bezserwerową aplikację Java w usłudze Azure Functions przy użyciu aplikacji Quarkus. W tym artykule użyto biblioteki Quarkus Funqy i wbudowanej obsługi wyzwalacza HTTP usługi Azure Functions dla języka Java. Korzystanie z aplikacji Quarkus z usługą Azure Functions zapewnia możliwości modelu programowania Quarkus z skalowaniem i elastycznością usługi Azure Functions. Po zakończeniu uruchomisz bezserwerowe aplikacje Quarkus w usłudze Azure Functions i będziesz nadal monitorować aplikację na platformie Azure.
Wymagania wstępne
- Interfejs wiersza polecenia platformy Azure zainstalowany na własnym komputerze.
- Konto platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
- Zestaw Java JDK 17 ze
JAVA_HOME
skonfigurowanym odpowiednio. Ten artykuł został napisany z myślą o języku Java 17, ale usługi Azure Functions i Quarkus obsługują również starsze wersje języka Java. - Apache Maven 3.8.1+.
Tworzenie projektu aplikacji
Użyj następującego polecenia, aby sklonować przykładowy projekt Java dla tego artykułu. Przykład znajduje się w witrynie GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Jeśli zostanie wyświetlony komunikat o odłączeniu stanu HEAD , ten komunikat jest bezpieczny do zignorowania. Ponieważ ten artykuł nie wymaga żadnych zatwierdzeń, odłączony stan HEAD jest odpowiedni.
Zapoznaj się z przykładową funkcją. Otwórz plik functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java.
Uruchom następujące polecenie. Adnotacja @Funq
powoduje, że metoda (w tym przypadku funqyHello
) jest funkcją bezserwerową.
@Funq
public String funqyHello() {
return "hello funqy";
}
Język Java usługi Azure Functions ma własny zestaw adnotacji specyficznych dla platformy Azure, ale te adnotacje nie są konieczne, gdy używasz aplikacji Quarkus w usłudze Azure Functions w prostej pojemności, ponieważ robimy to tutaj. Aby uzyskać więcej informacji na temat adnotacji języka Java usługi Azure Functions, zobacz Przewodnik dla deweloperów języka Java usługi Azure Functions.
Jeśli nie określisz inaczej, nazwa funkcji jest taka sama jak nazwa metody. Możesz również użyć następującego polecenia, aby zdefiniować nazwę funkcji z parametrem adnotacji:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Nazwa jest ważna. Staje się częścią identyfikatora URI REST w celu wywołania funkcji, jak pokazano w dalszej części artykułu.
Lokalne testowanie funkcji
Użyj mvn
polecenia , aby uruchomić tryb deweloperski Quarkus w lokalnym terminalu. Uruchamianie aplikacji Quarkus w ten sposób umożliwia ponowne ładowanie na żywo przy użyciu kompilacji w tle. Podczas modyfikowania plików Java i/lub plików zasobów i odświeżania przeglądarki te zmiany zostaną automatycznie zastosowane.
Odświeżanie przeglądarki wyzwala skanowanie obszaru roboczego. Jeśli skanowanie wykryje jakiekolwiek zmiany, pliki Java zostaną ponownie skompilowane, a aplikacja zostanie ponownie wdrożona. Ponownie wdrożono usługi aplikacji w żądaniu. Jeśli występują problemy z kompilacją lub wdrożeniem, zostanie wyświetlona strona błędu.
W poniższej procedurze zastąp ciąg yourResourceGroupName
nazwą grupy zasobów. Nazwy aplikacji funkcji muszą być globalnie unikatowe na całej platformie Azure. Nazwy grup zasobów muszą być globalnie unikatowe w ramach subskrypcji. W tym artykule osiągnięto niezbędną unikatowość, poprzedzając nazwę grupy zasobów nazwą funkcji. Rozważ utworzenie unikatowego identyfikatora dla wszystkich utworzonych nazw, które muszą być unikatowe. Przydatną techniką jest użycie inicjałów, po których następuje dzisiejsza data w mmdd
formacie.
Grupa zasobów nie jest konieczna w tej części instrukcji, ale jest wymagana później. Dla uproszczenia projekt Maven wymaga zdefiniowania właściwości .
Wywołaj tryb deweloperski Quarkus:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
Dane wyjściowe powinny wyglądać podobnie do poniższych:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 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>
Uzyskaj dostęp do funkcji przy użyciu polecenia w terminalu
CURL
lokalnym:curl localhost:8080/api/funqyHello
Dane wyjściowe powinny wyglądać podobnie do poniższych:
"hello funqy"
Dodawanie wstrzykiwania zależności do funkcji
Technologia open-standard Jakarta EE Contexts and Dependency Injection (CDI) zapewnia wstrzykiwanie zależności w Quarkus. Aby zapoznać się z ogólnym omówieniem iniekcji, a w szczególności z cdi, zobacz samouczek Jakarta EE.
Dodaj nową funkcję, która używa wstrzykiwania zależności.
Utwórz plik GreetingService.java w katalogu functions-quarkus/src/main/java/io/quarkus. Użyj następującego kodu jako kodu źródłowego pliku:
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; } }
Zapisz plik.
GreetingService
jest fasolą, która implementuje metodęgreeting()
. Metoda zwracaWelcome...
komunikat ciągu z parametremname
.Otwórz istniejący plik functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java . Zastąp klasę następującym kodem, aby dodać nowe
gService
pole i metodęgreeting
: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"; } }
Zapisz plik.
Uzyskaj dostęp do nowej
greeting
funkcji przy użyciu polecenia w terminalucurl
lokalnym:curl -d '"Dan"' -X POST localhost:8080/api/greeting
Dane wyjściowe powinny wyglądać podobnie do poniższych:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Ważne
Kodowanie na żywo (nazywane również trybem deweloperskim) umożliwia uruchamianie aplikacji i wprowadzanie zmian na bieżąco. Funkcja Quarkus automatycznie ponownie skompiluje i ponownie załaduje aplikację po wprowadzeniu zmian. Jest to zaawansowany i wydajny styl opracowywania, którego będziesz używać w tym artykule.
Przed przejściem do przodu do następnego kroku zatrzymaj tryb deweloperski Quarkus, wybierając Ctrl+C.
Wdrażanie aplikacji na platformie Azure
Jeśli jeszcze tego nie zrobiono, zaloguj się do subskrypcji platformy Azure przy użyciu następującego polecenia az login i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie:
az login
Uwaga
Jeśli wiele dzierżaw platformy Azure jest skojarzonych z poświadczeniami platformy Azure, musisz określić dzierżawę, do której chcesz się zalogować. Można to zrobić przy użyciu
--tenant
opcji . Na przykład:az login --tenant contoso.onmicrosoft.com
.Kontynuuj proces w przeglądarce internetowej. Jeśli żadna przeglądarka internetowa nie jest dostępna lub nie można otworzyć przeglądarki internetowej, użyj przepływu kodu urządzenia z
az login --use-device-code
programem .Po pomyślnym zalogowaniu dane wyjściowe w terminalu lokalnym powinny wyglądać podobnie do następujących:
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" } } ]
Kompilowanie i wdrażanie funkcji na platformie Azure.
Plik pom.xml wygenerowany w poprzednim kroku używa polecenia
azure-functions-maven-plugin
. Uruchomieniemvn install
generuje pliki konfiguracji i katalog przejściowy, któryazure-functions-maven-plugin
wymaga. W przypadkuyourResourceGroupName
elementu użyj wcześniej użytej wartości.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Podczas wdrażania zaloguj się na platformie Azure. Wtyczka
azure-functions-maven-plugin
jest skonfigurowana do monitowania o logowanie do platformy Azure przy każdym wdrożeniu projektu. Podczas kompilacji są wyświetlane dane wyjściowe podobne do następujących:[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.
W danych wyjściowych jest wyświetlany komunikat i uwierzytelnij się na platformie Azure przy użyciu przeglądarki i podanego kodu urządzenia. Dostępnych jest wiele innych opcji uwierzytelniania i konfiguracji. Pełną dokumentację referencyjną dla
azure-functions-maven-plugin
programu można znaleźć w temacie Azure Functions: Configuration Details (Szczegóły konfiguracji usługi Azure Functions: Szczegóły konfiguracji).Po uwierzytelnieniu kompilacja powinna kontynuować i zakończyć. Upewnij się, że dane wyjściowe znajdują
BUILD SUCCESS
się w pobliżu końca.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
Adres URL wyzwalający funkcję na platformie Azure można również znaleźć w dzienniku danych wyjściowych:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Ukończenie wdrożenia zajmie trochę czasu. W międzyczasie przyjrzyjmy się usłudze Azure Functions w witrynie Azure Portal.
Uzyskiwanie dostępu do funkcji bezserwerowej i monitorowanie jej na platformie Azure
Zaloguj się do portalu i upewnij się, że wybrano tę samą dzierżawę i subskrypcję używaną w interfejsie wiersza polecenia platformy Azure.
Wpisz aplikację funkcji na pasku wyszukiwania w górnej części witryny Azure Portal i wybierz Enter. Aplikacja funkcji powinna zostać wdrożona i wyświetlona z nazwą
<yourResourceGroupName>-function-quarkus
.Wybierz aplikację funkcji, aby wyświetlić szczegółowe informacje, takie jak lokalizacja, subskrypcja, adres URL, metryki i plan usługi App Service. Następnie wybierz wartość adresu URL .
Upewnij się, że strona powitalna wskazuje, że aplikacja funkcji jest "uruchomiona".
Wywołaj
greeting
funkcję przy użyciu następującegocurl
polecenia w terminalu lokalnym.Ważne
Zastąp
YOUR_HTTP_TRIGGER_URL
ciąg własnym adresem URL funkcji, który znajdziesz w witrynie Azure Portal lub danych wyjściowych.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
Dane wyjściowe powinny wyglądać mniej więcej tak:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
Dostęp do drugiej funkcji (
funqyHello
) można również uzyskać przy użyciu następującegocurl
polecenia:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
Dane wyjściowe powinny być takie same jak obserwowane wcześniej:
"hello funqy"
Jeśli chcesz wykonać podstawową funkcję metryk w witrynie Azure Portal, spróbuj wywołać funkcję w pętli powłoki
for
:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Po pewnym czasie w portalu zostaną wyświetlone dane metryk.
Teraz, po otwarciu funkcji platformy Azure w portalu, poniżej przedstawiono więcej funkcji, do których możesz uzyskać dostęp z portalu:
- Monitoruj wydajność funkcji platformy Azure. Aby uzyskać więcej informacji, zobacz Monitorowanie usługi Azure Functions.
- Eksplorowanie danych telemetrycznych. Aby uzyskać więcej informacji, zobacz Analizowanie danych telemetrycznych usługi Azure Functions w usłudze Application Insights.
- Konfigurowanie rejestrowania. Aby uzyskać więcej informacji, zobacz Włączanie dzienników wykonywania przesyłania strumieniowego w usłudze Azure Functions.
Czyszczenie zasobów
Jeśli te zasoby nie są potrzebne, możesz je usunąć, uruchamiając następujące polecenie:
az group delete --name <yourResourceGroupName> --yes
Następne kroki
W tym artykule zawarto informacje na temat wykonywania następujących czynności:
- Uruchom tryb deweloperski Quarkus.
- Wdróż aplikację Funqy w usłudze Azure Functions przy użyciu polecenia
azure-functions-maven-plugin
. - Sprawdź wydajność funkcji w portalu.
Aby dowiedzieć się więcej na temat usług Azure Functions i Quarkus, zobacz następujące artykuły i odwołania: