Esercitazione: Introduzione a trigger e associazioni Funzioni di Azure in Azure Redis
Questa esercitazione illustra come implementare trigger di base con Funzioni di Azure e Redis gestito di Azure (anteprima) o cache di Azure per Redis. Illustra l'uso di Visual Studio Code (VS Code) per scrivere e distribuire una funzione di Azure in C#.
In questa esercitazione apprenderai a:
- Configurare gli strumenti necessari.
- Configurare e connettersi a una cache.
- Creare una funzione di Azure e distribuirvi codice.
- Confermare la registrazione dei trigger.
Prerequisiti
- Una sottoscrizione di Azure. Se non hai una sottoscrizione di Azure, crea un account gratuito.
- Visual Studio Code.
- Configurare un'istanza di Redis gestita di Azure (anteprima)
- Configurare un'istanza di cache di Azure per Redis
Creare una nuova istanza della cache di Azure per Redis usando il portale di Azure o lo strumento dell'interfaccia della riga di comando preferito. Questa esercitazione usa un'istanza di Balanced B1 , che rappresenta un buon punto di partenza. Assicurarsi di selezionare questa istanza quando si usa la guida introduttiva per iniziare.
Le impostazioni predefinite dovrebbero essere sufficienti. Questa esercitazione usa un endpoint pubblico per la dimostrazione, ma è consigliabile usare un endpoint privato per l'ambiente di produzione.
La creazione della cache può richiedere alcuni minuti. È possibile proseguire con la sezione successiva mentre il processo viene completato.
Configurare Visual Studio Code
Se non è ancora stata installata l'estensione Funzioni di Azure per VS Code, cercare Funzioni di Azure nel menu ESTENSIONI e quindi selezionare Installa. Se non è installata l'estensione C#, installare anche questa.
Passare alla scheda Azure. Accedere all'account Azure.
Per archiviare il progetto che si sta sviluppando, creare una nuova cartella locale nel computer. Questa esercitazione usa RedisAzureFunctionDemo come esempio.
Nella scheda Azure creare una nuova app per le funzioni selezionando l'icona a forma di fulmine in alto a destra della scheda Area di lavoro.
Selezionare Crea funzione.
Selezionare la cartella creata per avviare la creazione di un nuovo progetto di Funzioni di Azure. Vengono visualizzati diversi prompt sullo schermo. Selezionare:
- C# come linguaggio.
- .NET 8.0 Isolated LTS come runtime .NET.
- Ignora per ora come modello di progetto.
Se non è installato .NET Core SDK, viene richiesto di farlo.
Importante
Per le funzioni .NET, è consigliabile usare il modello di lavoro isolato nel modello di In-Process. Per un confronto tra il modello In-Process e il modello di lavoro isolato, vedere Differenze tra il modello di lavoro isolato e il modello In-Process per .NET in Funzioni di Azure. Questo esempio usa il modello di lavoro isolato.
Confermare che il nuovo progetto venga visualizzato nel riquadro EXPLORER.
Installare il pacchetto NuGet necessario
È necessario installare Microsoft.Azure.Functions.Worker.Extensions.Redis
, il pacchetto NuGet per l'estensione Redis che consente di usare le notifiche del keyspace Redis come trigger in Funzioni di Azure.
Installare questo pacchetto passando alla scheda Terminale in VS Code e immettendo il comando seguente:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease
Nota
Il pacchetto Microsoft.Azure.Functions.Worker.Extensions.Redis
viene usato per le funzioni del processo di lavoro isolato .NET. Le funzioni In-Process .NET e tutti gli altri linguaggi useranno invece il pacchetto Microsoft.Azure.WebJobs.Extensions.Redis
.
Passare all'istanza di Redis gestita di Azure appena creata.
Passare alla cache nel portale di Azure e individuare Chiavi di accesso nel menu Risorsa. Annotare o copiare il contenuto della casella Primaria . Verrà usato per creare il stringa di connessione.
Compilare una stringa di connessione usando il formato seguente:
{your-cache-hostname}:10000,password={your-access-key},ssl=True,abortConnect=False
. Se tls/SSL è stato disabilitato, usaressl=False
invece.Connettersi all'istanza di Redis usando il metodo scelto, ad esempio l'interfaccia della riga di comando di Redis o Redis Insights. Per istruzioni su come connettersi all'istanza di Redis usando l'interfaccia della riga di comando di Redis, vedere Usare lo strumento da riga di comando redis di Redis con Azure Managed Redis.
Configurare le notifiche keyspace usando il comando CONFIG SET :
CONFIG SET notify-keyspace-events KEA
KEA è una stringa di configurazione che abilita le notifiche del keyspace per tutte le chiavi e gli eventi. Per altre informazioni sulle stringhe di configurazione del keyspace, vedere la documentazione di Redis.
Configurare il codice di esempio per i trigger Redis
In VS Code aggiungere un file denominato Common.cs al progetto. Questa classe viene usata per analizzare la risposta serializzata JSON per PubSubTrigger.
Copiare e incollare il codice seguente nel file Common.cs:
public class Common { public const string connectionString = "redisConnectionString"; public class ChannelMessage { public string SubscriptionChannel { get; set; } public string Channel { get; set; } public string Message { get; set; } } }
Aggiungere un file denominato RedisTriggers.cs al progetto.
Copiare e incollare il codice di esempio seguente nel nuovo file:
using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Redis; public class RedisTriggers { private readonly ILogger<RedisTriggers> logger; public RedisTriggers(ILogger<RedisTriggers> logger) { this.logger = logger; } // PubSubTrigger function listens to messages from the 'pubsubTest' channel. [Function("PubSubTrigger")] public void PubSub( [RedisPubSubTrigger(Common.connectionString, "pubsubTest")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Function triggered on pub/sub message '{channelMessage.Message}' from channel '{channelMessage.Channel}'."); } // KeyeventTrigger function listens to key events from the 'del' operation. [Function("KeyeventTrigger")] public void Keyevent( [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:del")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key '{channelMessage.Message}' deleted."); } // KeyspaceTrigger function listens to key events on the 'keyspaceTest' key. [Function("KeyspaceTrigger")] public void Keyspace( [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:keyspaceTest")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key 'keyspaceTest' was updated with operation '{channelMessage.Message}'"); } // ListTrigger function listens to changes to the 'listTest' list. [Function("ListTrigger")] public void List( [RedisListTrigger(Common.connectionString, "listTest")] string response) { logger.LogInformation(response); } // StreamTrigger function listens to changes to the 'streamTest' stream. [Function("StreamTrigger")] public void Stream( [RedisStreamTrigger(Common.connectionString, "streamTest")] string response) { logger.LogInformation(response); } }
Questa esercitazione illustra diversi modi per attivare l'attività Redis:
PubSubTrigger
, che viene attivato quando un'attività viene pubblicata nel canale di pubblicazione/sottoscrizione denominatopubsubTest
.KeyspaceTrigger
, che è basato sul trigger di pubblicazione/sottoscrizione. Usarlo per cercare le modifiche apportate alla chiavekeyspaceTest
.KeyeventTrigger
, che è anch'esso basato sul trigger di pubblicazione/sottoscrizione. Usarlo per cercare qualsiasi utilizzo del comandoDEL
.ListTrigger
, che cerca le modifiche apportate all'elencolistTest
.StreamTrigger
, che cerca le modifiche apportate al flussostreamTest
.
Connettersi alla cache
Per attivare l'attività Redis, è necessario passare la stringa di connessione dell'istanza della cache. Queste informazioni sono archiviate nel file local.settings.json creato automaticamente nella cartella. Usare il file di impostazioni locali come procedura consigliata per la sicurezza.
Per connettersi alla cache, aggiungere una sezione
ConnectionStrings
nel file local.settings.json e quindi aggiungere la stringa di connessione usando il parametroredisConnectionString
. La sezione dovrà essere simile a questo esempio:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "redisConnectionString": "<your-connection-string>" } }
Il codice in Common.cs cerca questo valore quando è in esecuzione in locale:
public const string connectionString = "redisConnectionString";
Importante
Questo esempio è stato semplificato per i fini dell’esercitazione. Per l'uso in produzione, è consigliabile usare Azure Key Vault per archiviare stringa di connessione informazioni o eseguire l'autenticazione nell'istanza di Redis usando l'ID Microsoft Entra.
Compilare ed eseguire il codice in locale
Passare alla scheda Esegui con debug in VS Code e selezionare la freccia verde per eseguire il debug del codice in locale. Se il toolset Azure Functions Core Tools non è installato, viene richiesto di farlo. In tal caso, sarà necessario riavviare VS Code dopo l'installazione.
Il codice dovrebbe essere compilato correttamente. È possibile tenere traccia dello stato di avanzamento nell'output del terminale.
Per testare la funzionalità del trigger, provare a creare ed eliminare la chiave
keyspaceTest
.È possibile usare qualsiasi metodo per connettersi alla cache. Un modo semplice consiste nell'usare lo strumento console predefinito nel portale della cache di Azure per Redis. Passare all'istanza della cache nel portale di Azure e quindi selezionare Console per aprirla.
Importante
Lo strumento console non è ancora disponibile per Redis gestito di Azure. Prendere invece in considerazione l'uso dell'interfaccia della riga di comando redis o di uno strumento come Redis Insight per eseguire comandi direttamente nell'istanza di Redis.
Dopo aver aperto la console, provare i comandi seguenti:
SET keyspaceTest 1
SET keyspaceTest 2
DEL keyspaceTest
PUBLISH pubsubTest testMessage
LPUSH listTest test
XADD streamTest * name Clippy
Verificare che i trigger siano attivati nel terminale.
Aggiungere le associazioni Redis
Le associazioni aggiungono un modo semplificato per leggere o scrivere i dati archiviati nell'istanza di Redis. Per illustrare il vantaggio delle associazioni, vengono aggiunte altre due funzioni. Una, denominata SetGetter
, si attiva ogni volta che viene impostata una chiave e restituisce il nuovo valore della chiave usando un'associazione di input. L'altra, denominataStreamSetter
, si attiva quando un nuovo elemento viene aggiunto al flusso myStream
e usa un'associazione di output per scrivere il valore true
nella chiave newStreamEntry
.
Aggiungere un file denominato RedisBindings.cs al progetto.
Copiare e incollare il codice di esempio seguente nel nuovo file:
using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Redis; public class RedisBindings { private readonly ILogger<RedisBindings> logger; public RedisBindings(ILogger<RedisBindings> logger) { this.logger = logger; } //This example uses the PubSub trigger to listen to key events on the 'set' operation. A Redis Input binding is used to get the value of the key being set. [Function("SetGetter")] public void SetGetter( [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] Common.ChannelMessage channelMessage, [RedisInput(Common.connectionString, "GET {Message}")] string value) { logger.LogInformation($"Key '{channelMessage.Message}' was set to value '{value}'"); } //This example uses the PubSub trigger to listen to key events to the key 'key1'. When key1 is modified, a Redis Output binding is used to set the value of the 'key1modified' key to 'true'. [Function("SetSetter")] [RedisOutput(Common.connectionString, "SET")] public string SetSetter( [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:key1")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key '{channelMessage.Message}' was updated. Setting the value of 'key1modified' to 'true'"); return $"key1modified true"; } }
Passare alla scheda Esegui con debug in VS Code e selezionare la freccia verde per eseguire il debug del codice in locale. Il codice dovrebbe essere compilato correttamente. È possibile tenere traccia dello stato di avanzamento nell'output del terminale.
Per testare la funzionalità di associazione di input, provare a impostare un nuovo valore per qualsiasi chiave, ad esempio usando il comando
SET hello world
. Si noterà che la funzioneSetGetter
viene attivata e restituisce il valore aggiornato.Per testare la funzionalità di associazione di output, provare ad aggiungere un nuovo elemento al flusso
myStream
usando il comandoXADD myStream * item Order1
. Si noti che la funzioneStreamSetter
viene attivata nella nuova voce del flusso e imposta il valoretrue
su un'altra chiave denominatanewStreamEntry
. Questo comandoset
attiva anche la funzioneSetGetter
.
Distribuire il codice in una funzione di Azure
Creare una nuova funzione di Azure:
Tornare nella scheda Azure ed espandere la sottoscrizione.
Fare clic con il pulsante destro del mouse su App per le funzioni e quindi scegliere Crea app per le funzioni in Azure (Avanzate).
Vengono visualizzate diverse richieste di informazioni per configurare la nuova app per le funzioni:
- Immettere un nome univoco.
- Selezionare .NET 8 Isolated come stack di runtime.
- Selezionare Linux o Windows (funzionano entrambi).
- Selezionare un gruppo di risorse nuovo o esistente in cui contenere l'app per le funzioni.
- Selezionare la stessa area dell'istanza della cache.
- Selezionare Premium come piano di hosting.
- Creare un nuovo piano di servizio app di Azure.
- Selezionare il piano tariffario EP1.
- selezionare un account di archiviazione esistente o crearne uno nuovo.
- Creare una nuova risorsa di Application Insights. Usare la risorsa per verificare che il trigger funzioni.
Importante
I trigger Redis non sono attualmente supportati nelle funzioni a consumo.
Attendere alcuni minuti che venga creata la nuova app per le funzioni. Viene visualizzata in App per le funzioni nella sottoscrizione. Fare clic con il pulsante destro del mouse sulla nuova app per le funzioni e quindi scegliere Distribuisci in app per le funzioni.
L'app viene compilata e viene avviata la distribuzione. È possibile tenere traccia dello stato di avanzamento nella finestra di output.
Aggiungere le informazioni della stringa di connessione
Importante
Questo esempio è stato semplificato per i fini dell’esercitazione. Per l'uso in produzione, è consigliabile usare Azure Key Vault per archiviare stringa di connessione informazioni o eseguire l'autenticazione nell'istanza di Redis usando l'ID Microsoft Entra.
Nel portale di Azure passare alla nuova app per le funzioni e selezionare Variabili di ambiente nel menu della risorsa.
Nel riquadro di lavoro passare a Impostazioni app.
Per Nome immettere redisConnectionString.
Per Valore immettere la stringa di connessione.
Selezionare Applica nella pagina per confermare.
Passare al riquadro Panoramica e selezionare Riavvia per riavviare l'app delle funzioni con le informazioni della stringa di connessione.
Testare trigger e associazioni
Al termine della distribuzione e dopo aver aggiunto le informazioni della stringa di connessione, aprire l'app per le funzioni nel portale di Azure. Selezionare quindi Flusso di log nel menu della risorsa.
Attendere che Log Analytics si connetta e quindi usare la console Redis per attivare uno dei trigger. Verificare che i trigger vengano registrati.
Pulire le risorse
Per continuare a usare le risorse create in questo articolo, mantenere il gruppo di risorse.
In caso contrario, se le risorse sono state completate, per evitare addebiti è possibile eliminare il gruppo di risorse di Azure creato.
Importante
L'eliminazione di un gruppo di risorse è irreversibile. Quando si elimina un gruppo di risorse, tutte le risorse in esso contenute vengono eliminate in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse sbagliato o le risorse errate. Se le risorse sono state create all'interno di un gruppo di risorse esistente che contiene anche elementi da mantenere, è possibile eliminare ogni singolo elemento a sinistra anziché eliminare il gruppo di risorse.
Per eliminare un gruppo di risorse
Accedere al portale di Azure e selezionare Gruppi di risorse.
Scegliere il gruppo di risorse da eliminare.
Se sono presenti molti gruppi di risorse, usare la casella Filtro per qualsiasi campo... e digitare il nome del gruppo di risorse creato per questo articolo. Nell’elenco dei risultati selezionare il gruppo di risorse.
Selezionare Elimina gruppo di risorse.
Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Digitare il nome del gruppo di risorse per confermare e quindi selezionare Elimina.
Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.