Eseguire il codice su richiesta con Funzioni di Azure

Completato

Ora che è stata creata un'app per le funzioni, verrà descritto come creare, configurare ed eseguire una funzione. L'esecuzione della funzione verrà eseguita nell'esercizio successivo, quindi non è necessario completare nessuna attività in questa unità.

Trigger

Le funzioni sono basate sugli eventi, ovvero vengono eseguite in risposta a un evento. Il tipo di evento che avvia una funzione viene chiamato trigger. Ogni funzione deve essere configurata con esattamente un trigger.

È possibile attivare l'esecuzione delle funzioni usando richieste HTTP, un timer pianificato ed eventi dai servizi di Azure seguenti:

Servizio di Azure Descrizione del trigger
Archiviazione BLOB Avvia una funzione quando viene rilevato un BLOB nuovo o aggiornato.
Azure Cosmos DB Avvia una funzione quando vengono rilevati inserimenti e aggiornamenti.
Griglia di eventi Avvia una funzione quando viene ricevuto un evento da Griglia di eventi.
Hub eventi Avvia una funzione quando viene ricevuto un evento da Hub eventi.
Archiviazione code Avvia una funzione quando viene ricevuto un nuovo elemento in una coda. Il messaggio in coda viene inviato come input alla funzione.
Bus di servizio Avvia una funzione in risposta ai messaggi di una coda del bus di servizio.

Bindings

Un'associazione è una modalità dichiarativa per connettere dati e servizi alla funzione. Interagiscono con diverse origini dati, pertanto non è necessario scrivere il codice nella funzione per connettersi alle origini dati e gestire le connessioni. La piattaforma gestisce automaticamente questa complessità nell'ambito del codice di associazione. Ogni associazione ha una direzione: Il codice legge i dati dalle associazioni di input e scrive i dati nelle associazioni di output. Ogni funzione può avere zero o più associazioni per gestire i dati di input e output elaborati dalla funzione.

Un trigger è un tipo di associazione di input che ha la possibilità di avviare l'esecuzione di un codice.

Azure offre numerose associazioni per connettersi a diversi servizi di archiviazione e messaggistica.

Definire un'associazione di esempio

L'esempio che segue illustra la configurazione di una funzione con un'associazione di input (trigger) e un'associazione di output. Si supponga di voler scrivere una nuova riga in Archiviazione tabelle di Azure ogni volta che viene visualizzato un nuovo messaggio in Archiviazione code di Azure. Questo scenario può essere implementato tramite un trigger di archiviazione code di Azure e un'associazione di output di archiviazione tabelle di Azure.

Il frammento di codice seguente corrisponde al file function.json per questo scenario.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

La configurazione JSON specifica che la funzione si attiva quando viene aggiunto un messaggio a una coda denominata myqueue-items. Il valore restituito della funzione viene quindi scritto nella tabella outTable nell'archiviazione tabelle di Azure.

Per le funzioni di PowerShell, le associazioni di output vengono scritte in modo esplicito con il cmdlet Push-OutputBinding.

Questo esempio è una semplice dimostrazione del modo in cui vengono configurate le associazioni per una funzione. È possibile sostituire l'output con un messaggio di posta elettronica usando un'associazione SendGrid, inserire un evento in un bus di servizio per inviare notifiche a un altro componente dell'architettura. È anche possibile avere più associazioni di output per eseguire il push dei dati in vari servizi.

Suggerimento

Per visualizzare e modificare il contenuto di function.json, selezionare l'app per le funzioni nella home page nel portale di Azure e nel riquadro destro selezionare Visualizzazione JSON. La visualizzazione JSON risorsa visualizza l'ID risorsa e il codice JSON modificabile. Per chiudere la visualizzazione JSON, selezionare la X nell'angolo superiore destro del riquadro.

Non tutti i linguaggi supportati da Funzioni usano il file function.json per definire le funzioni.

Creare una funzione nel portale di Azure

Funzioni di Azure include modelli di funzione predefiniti, basati su un tipo specifico di trigger. Questi modelli, nel linguaggio scelto, semplificano la creazione della prima funzione.

Questo modulo non è compatibile con tutti i linguaggi supportati da Funzioni e il portale non permette la creazione di funzioni in tutte i linguaggi che Funzioni supporta.

Per i linguaggi supportati che usano il file function.json per definire le funzioni, è possibile creare e modificare le funzioni direttamente nel portale di Azure. I linguaggi supportati dal portale includono: JavaScript, PowerShell, Python e C# Script (.csx). I linguaggi che definiscono le funzioni direttamente nel codice devono essere sviluppati all'esterno del portale e distribuiti in Azure. I linguaggi non supportati dal portale includono: C#, Java, Python (modello di programmazione v2) e JavaScript/TypeScript (modello di programmazione Node.js v4).

Modelli di funzione

Quando si crea la prima funzione nel portale, è possibile selezionare un trigger predefinito per la funzione. In base alle selezioni, Azure genera informazioni di configurazione e codice predefiniti, ad esempio la creazione di una voce del registro eventi quando vengono ricevuti i dati di input.

La selezione di un modello nel riquadro Aggiungi funzione consente di accedere facilmente agli ambienti di sviluppo, ai trigger e alle dipendenze più comuni. Quando si crea una funzione nel portale di Azure, è possibile scegliere tra più di 20 modelli. Dopo averlo creato, è possibile personalizzare ulteriormente il codice.

Quando si crea una funzione da un modello, vengono creati diversi file, tra cui un file di configurazione, function.json e un file di codice sorgente, index.js.

È possibile creare o modificare funzioni per l'app per le funzioni selezionando Funzioni nella categoria Funzioni dal menu App per le funzioni.

Quando si seleziona una funzione creata nell'app per le funzioni, si apre il riquadro Funzione. Selezionando Code + Test (Codice e test) dal menu Funzione, è possibile accedere alle azioni nella barra dei comandi per testare ed eseguire il codice, per salvare o eliminare le modifiche apportate o per ottenere l'URL pubblicato. Selezionando Test/Run (Testa/Esegui) dalla barra dei comandi, è possibile eseguire casi d'uso per le richieste che includono stringhe di query e valori. Il percorso della funzione sopra la casella del codice visualizza il nome del file aperto. È possibile selezionare un file specifico dall'elenco a discesa da testare o modificare, ad esempio function.json.

Screenshot of the function code and test editor showing the expanded Test/Run view, with menu options highlighted.

Nell'immagine precedente, il riquadro a destra contiene le schede Input e Output. Selezionando la scheda Input è possibile compilare e testare la funzione aggiungendo parametri di query e fornendo valori per la stringa di query. Nella scheda Output vengono visualizzati i risultati della richiesta.

Testare la funzione di Azure

Dopo aver creato una funzione nel portale, è opportuno testarla. Esistono due approcci:

  • Test nel portale
  • Esecuzione manuale

Test nel portale di Azure

Il portale offre un altro modo pratico per testare le funzioni. Come descritto in precedenza, nello screenshot precedente. Quando si seleziona Esegui in questo riquadro, i risultati vengono visualizzati automaticamente nella scheda Output e viene visualizzato il riquadro Log per visualizzare lo stato.

Eseguire manualmente la funzione

È possibile avviare una funzione attivando manualmente il trigger configurato. Se ad esempio si usa un trigger HTTP, è possibile usare uno strumento come Postman o cURL per avviare una richiesta HTTP all'URL dell'endpoint della funzione, disponibile nella definizione della funzione (Recupera URL della funzione).

Dashboard di monitoraggio e Application Insights

La possibilità di monitorare le funzioni è fondamentale durante lo sviluppo e nell'ambiente di produzione. Nel portale di Azure è disponibile un dashboard di monitoraggio che si attiva abilitando l'integrazione di Application Insights. Nel menu App per le funzioni, in Impostazioni selezionare Application Insights, selezionare Attiva Application Insights e quindi selezionare Applica. Nella finestra di dialogo selezionare . Il dashboard di Application Insights offre un modo rapido per visualizzare la cronologia delle operazioni della funzione mostrando il timestamp, il codice di risultato, la durata e l'ID operazione inseriti da Application Insights.

Screenshot showing the HTTP function Application Insights dashboard with function results, corresponding HTTP status codes, and the Monitoring menu items highlighted.

Riquadro Log in streaming

Dopo aver abilitato Application Insights nel portale di Azure, è possibile aggiungere istruzioni di registrazione alla funzione per il debug. I metodi chiamati per ogni linguaggio vengono passati a un oggetto di "registrazione" che può essere usato per aggiungere le informazioni di log nel riquadro Log, che si trova nel riquadro Codice e test quando viene eseguito un test.

Scrivere nei log dal codice usando il metodo log nell'oggetto context, che viene passato al gestore. L'esempio seguente scrive nel livello di log predefinito (informazioni):

context.log('Enter your logging statement here');

Scrivere nei log dal codice usando il cmdlet Write-Host, come mostrato nell’esempio seguente:

Write-Host "Enter your logging statement here"

Errori, guasti, avvisi e anomalie

È possibile usare le metriche o le opzioni della categoria Ricerca causa nel menu Funzione per monitorare le prestazioni, diagnosticare gli errori o configurare decine di cartelle di lavoro predefinite per gestire l'app per le funzioni,. Questo include aspetti come gli errori di compilazione, gli avvisi nel codice e le statistiche di utilizzo per ruolo.