Distribuire app Java serverless con Quarkus in Funzioni di Azure
Questo articolo illustra come sviluppare, compilare e distribuire un'app Java serverless in Funzioni di Azure usando Quarkus. Questo articolo usa Quarkus Funqy e il supporto predefinito per il trigger HTTP Funzioni di Azure per Java. L'uso di Quarkus con Funzioni di Azure offre la potenza del modello di programmazione Quarkus con la scalabilità e la flessibilità di Funzioni di Azure. Al termine, si eseguiranno applicazioni Quarkus serverless in Funzioni di Azure e si continuerà a monitorare l'app in Azure.
Prerequisiti
- Interfaccia della riga di comando di Azure installata nel proprio computer.
- Un account Azure. Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
- Java JDK 17 con
JAVA_HOME
configurato in modo appropriato. Questo articolo è stato scritto in Java 17, ma Funzioni di Azure e Quarkus supportano anche le versioni precedenti di Java. - Apache Maven 3.8.1+.
Crea il progetto app
Usa il comando seguente per clonare il progetto Java di esempio per questo articolo. L'esempio è disponibile in GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Se visualizzi un messaggio relativo allo stato HEAD scollegato, questo messaggio è sicuro da ignorare. Poiché questo articolo non richiede alcun commit, lo stato HEAD scollegato è appropriato.
Esplorare la funzione di esempio. Aprire il file functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java .
Esegui il comando seguente: L'annotazione @Funq
rende il metodo (in questo caso , funqyHello
) una funzione serverless.
@Funq
public String funqyHello() {
return "hello funqy";
}
Funzioni di Azure Java ha un proprio set di annotazioni specifiche di Azure, ma queste annotazioni non sono necessarie quando si usa Quarkus in Funzioni di Azure in una capacità semplice, come avviene qui. Per altre informazioni sulle annotazioni Java Funzioni di Azure, vedere la guida per sviluppatori Java Funzioni di Azure.
A meno che non si specifichi diversamente, il nome della funzione corrisponde al nome del metodo. È anche possibile usare il comando seguente per definire il nome della funzione con un parametro per l'annotazione:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Il nome è importante. Diventa una parte dell'URI REST per richiamare la funzione, come illustrato più avanti nell'articolo.
Testare la funzione in locale
Usare mvn
per eseguire la modalità di sviluppo Quarkus nel terminale locale. L'esecuzione di Quarkus in questo modo consente il ricaricamento in tempo reale con la compilazione in background. Quando si modificano i file Java e/o i file di risorse e si aggiorna il browser, queste modifiche avranno effetto automaticamente.
Un aggiornamento del browser attiva un'analisi dell'area di lavoro. Se l'analisi rileva modifiche, i file Java vengono ricompilati e l'applicazione viene ridistribuita. L'applicazione ridistribuisce la richiesta. In caso di problemi di compilazione o distribuzione, verrà visualizzata una pagina di errore.
Nella procedura seguente sostituire yourResourceGroupName
con un nome di gruppo di risorse. I nomi delle app per le funzioni devono essere univoci a livello globale in tutto Azure. I nomi dei gruppi di risorse devono essere univoci a livello globale all'interno di una sottoscrizione. Questo articolo consente di ottenere l'univocità necessaria anteponendo il nome del gruppo di risorse al nome della funzione. Prendere in considerazione la pre-attesa di un identificatore univoco per tutti i nomi creati che devono essere univoci. Una tecnica utile consiste nell'usare le iniziali seguite dalla data odierna in mmdd
formato.
Il gruppo di risorse non è necessario per questa parte delle istruzioni, ma è necessario in un secondo momento. Per semplicità, il progetto Maven richiede di definire la proprietà .
Richiamare la modalità di sviluppo Quarkus:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
L'output dovrebbe essere simile al seguente:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 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>
Accedere alla funzione usando il comando nel
CURL
terminale locale:curl localhost:8080/api/funqyHello
L'output dovrebbe essere simile al seguente:
"hello funqy"
Aggiungere l'inserimento delle dipendenze alla funzione
La tecnologia open-standard Jakarta EE Contexts and Dependency Injection (CDI) fornisce l'inserimento delle dipendenze in Quarkus. Per una panoramica generale dell'inserimento in generale e di CDI in modo specifico, vedere l'esercitazione su Jakarta EE.
Aggiungere una nuova funzione che usa l'inserimento delle dipendenze.
Creare un file GreetingService.java nella directory functions-quarkus/src/main/java/io/quarkus . Usare il codice seguente come codice sorgente del file:
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; } }
Salvare il file.
GreetingService
è un bean iniettabile che implementa ungreeting()
metodo. Il metodo restituisce unWelcome...
messaggio stringa con unname
parametro .Aprire il file functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java . Sostituire la classe con il codice seguente per aggiungere un nuovo
gService
campo e ilgreeting
metodo :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"; } }
Salvare il file.
Accedere alla nuova
greeting
funzione usando il comando nelcurl
terminale locale:curl -d '"Dan"' -X POST localhost:8080/api/greeting
L'output dovrebbe essere simile al seguente:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Importante
Live Coding (chiamato anche modalità di sviluppo) consente di eseguire l'app e apportare modifiche in tempo reale. Quarkus ricompila automaticamente e ricarica l'app quando vengono apportate modifiche. Questo è uno stile potente ed efficiente di sviluppo che verrà usato in questo articolo.
Prima di passare al passaggio successivo, arrestare la modalità di sviluppo Quarkus selezionando CTRL+C.
Distribuire l'app in Azure
Se non è già stato fatto, accedere alla sottoscrizione di Azure usando il comando az login seguente e seguire le istruzioni visualizzate:
az login
Nota
Se più tenant di Azure sono associati alle credenziali di Azure, è necessario specificare il tenant a cui si vuole accedere. A tale scopo, usare l'opzione
--tenant
. Ad esempio:az login --tenant contoso.onmicrosoft.com
.Continuare il processo nel Web browser. Se non è disponibile alcun Web browser o se il Web browser non viene aperto, usare il flusso del codice del dispositivo con
az login --use-device-code
.Dopo l'accesso, l'output nel terminale locale dovrebbe essere simile al seguente:
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" } } ]
Compilare e distribuire le funzioni in Azure.
Il file pom.xml generato nel passaggio precedente usa
azure-functions-maven-plugin
. L'esecuzionemvn install
genera file di configurazione e una directory di staging cheazure-functions-maven-plugin
richiede. PeryourResourceGroupName
usare il valore usato in precedenza.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Durante la distribuzione, accedere ad Azure. Il
azure-functions-maven-plugin
plug-in è configurato per richiedere l'accesso ad Azure ogni volta che viene distribuito il progetto. Durante la compilazione viene visualizzato un output simile al seguente:[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.
Eseguire come dice l'output ed eseguire l'autenticazione in Azure usando il browser e il codice del dispositivo fornito. Sono disponibili molte altre opzioni di autenticazione e configurazione. La documentazione di riferimento completa per
azure-functions-maven-plugin
è disponibile in Funzioni di Azure: Dettagli configurazione.Dopo l'autenticazione, la compilazione deve continuare e terminare. Assicurarsi che l'output includa
BUILD SUCCESS
vicino alla fine.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
È anche possibile trovare l'URL per attivare la funzione in Azure nel log di output:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Il completamento della distribuzione richiederà del tempo. Nel frattempo, esaminiamo Funzioni di Azure nel portale di Azure.
Accedere e monitorare la funzione serverless in Azure
Accedere al portale e assicurarsi di aver selezionato lo stesso tenant e la stessa sottoscrizione usata nell'interfaccia della riga di comando di Azure.
Digitare l'app per le funzioni nella barra di ricerca nella parte superiore del portale di Azure e selezionare il tasto INVIO. L'app per le funzioni deve essere distribuita e visualizzata con il nome
<yourResourceGroupName>-function-quarkus
.Selezionare l'app per le funzioni per visualizzare informazioni dettagliate, ad esempio Località, Sottoscrizione, URL, Metriche e servizio app Piano. Selezionare quindi il valore URL.
Verificare che la pagina iniziale indichi che l'app per le funzioni è "operativa".
Richiamare la
greeting
funzione usando il comando seguentecurl
nel terminale locale.Importante
Sostituire
YOUR_HTTP_TRIGGER_URL
con il proprio URL di funzione presente nel portale di Azure o nell'output.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
L'output dovrebbe essere simile al seguente:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
È anche possibile accedere all'altra funzione (
funqyHello
) usando il comando seguentecurl
:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
L'output deve essere identico a quello osservato in precedenza:
"hello funqy"
Se si vuole esercitare la funzionalità delle metriche di base nel portale di Azure, provare a richiamare la funzione all'interno di un ciclo della shell
for
:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Dopo un po' di tempo, nel portale verranno visualizzati alcuni dati delle metriche.
Dopo aver aperto la funzione di Azure nel portale, ecco altre funzionalità a cui è possibile accedere dal portale:
- Monitorare le prestazioni della funzione di Azure. Per altre informazioni, vedere Monitoraggio Funzioni di Azure.
- Esplorare i dati di telemetria. Per altre informazioni, vedere Analizzare Funzioni di Azure dati di telemetria in Application Insights.
- Configurare la registrazione. Per altre informazioni, vedere Abilitare i log di esecuzione di streaming in Funzioni di Azure.
Pulire le risorse
Se queste risorse non sono necessarie, è possibile eliminarle eseguendo il comando seguente:
az group delete --name <yourResourceGroupName> --yes
Passaggi successivi
In questo articolo si è appreso come:
- Eseguire la modalità di sviluppo Quarkus.
- Distribuire un'app Funqy in Funzioni di Azure usando
azure-functions-maven-plugin
. - Esaminare le prestazioni della funzione nel portale.
Per altre informazioni su Funzioni di Azure e Quarkus, vedere gli articoli e i riferimenti seguenti: