Tutorial: Erste Schritte mit Azure Functions-Triggern und -Bindungen in Azure Redis
In diesem Tutorial wird gezeigt, wie Sie grundlegende Trigger mit Azure Functions und entweder Azure Managed Redis (Vorschau) oder Azure Cache for Redis implementieren. Im Tutorial wird die Verwendung von Visual Studio Code (VS Code) zum Schreiben und Bereitstellen einer Azure-Funktion in C# erläutert.
In diesem Tutorial lernen Sie Folgendes:
- Einrichten der erforderlichen Tools
- Konfigurieren eines Cache und Herstellen einer Verbindung mit diesem
- Erstellen einer Azure-Funktion und Bereitstellen von Code
- Überprüfen der Protokollierung von Triggern
Voraussetzungen
- Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen.
- Visual Studio Code
- Einrichten einer Azure Managed Redis-Instanz (Vorschau)
- Einrichten einer Azure Cache for Redis-Instanz
Erstellen Sie mithilfe des Azure-Portals oder Ihres bevorzugten CLI-Tools eine neue Azure Cache for Redis-Instanz. In diesem Tutorial wird eine Balanced B1-Instanz verwendet, was ein guter Ausgangspunkt ist. Stellen Sie sicher, dass Sie diese Instanz auswählen, wenn Sie die Schnellstartanleitung für die ersten Schritte verwenden.
Die Standardeinstellungen sollten ausreichen. In diesem Tutorial wird zu Demozwecken ein öffentlicher Endpunkt verwendet, aber es wird empfohlen, für die Produktion einen privaten Endpunkt zu verwenden.
Das Erstellen des Cache kann einige Minuten dauern. Sie können zum nächsten Abschnitt wechseln, während der Prozess abgeschlossen wird.
Einrichten von Visual Studio Code
Wenn Sie die Azure Functions-Erweiterung für VS Code noch nicht installiert haben, suchen Sie im Menü ERWEITERUNGEN nach Azure Functions, und wählen Sie dann Installieren aus. Wenn Sie die C#-Erweiterung nicht installiert haben, installieren Sie sie ebenfalls.
Navigieren Sie zur Registerkarte Azure. Melden Sie sich bei Ihrem Azure-Konto an.
Um das Projekt zu speichern, das Sie erstellen, erstellen Sie auf ihrem Computer einen neuen lokalen Ordner. In diesem Tutorial wird RedisAzureFunctionDemo als Beispiel verwendet.
Erstellen Sie auf der Registerkarte Azure eine neue Funktions-App, indem Sie auf der Registerkarte Arbeitsbereich oben rechts auf das Blitzsymbol klicken.
Wählen Sie Funktion erstellen aus.
Wählen Sie den von Ihnen erstellten Ordner aus, um mit der Erstellung eines neuen Azure Functions-Projekts zu beginnen. Auf dem Bildschirm werden mehrere Eingabeaufforderungen angezeigt. Wählen Sie Folgendes aus:
- C# als Sprache
- .NET 8.0 Isolated (LTS) als .NET-Runtime.
- Vorerst überspringen als Projektvorlage
Wenn Sie das .NET Core SDK nicht installiert haben, werden Sie dazu aufgefordert.
Wichtig
Für .NET-Funktionen wird die Verwendung des isolierten Workermodells gegenüber dem In-Process-Modell empfohlen. Einen Vergleich der In-Process-Modelle und isolierten Workermodelle finden Sie unter Unterschiede zwischen dem isolierten Workermodell und dem In-Process-Modell für .NET in Azure Functions. In diesem Beispiel wird das isolierte Workermodell verwendet.
Vergewissern Sie sich, dass das neue Projekt im Bereich EXPLORER angezeigt wird.
Installieren des erforderlichen NuGet-Pakets
Sie müssen Microsoft.Azure.Functions.Worker.Extensions.Redis
, das NuGet-Paket für die Redis-Erweiterung, installieren, mit dem Redis-Keyspacebenachrichtigungen als Trigger in Azure Functions verwendet werden können.
Installieren Sie dieses Paket, indem Sie zur Registerkarte Terminal in VS Code wechseln und die folgenden Befehle eingeben:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease
Hinweis
Das Microsoft.Azure.Functions.Worker.Extensions.Redis
-Paket wird für isolierte .NET-Workerprozessfunktionen verwendet. .NET-In-Process-Funktionen und alle anderen Sprachen verwenden stattdessen das Microsoft.Azure.WebJobs.Extensions.Redis
-Paket.
Wechseln Sie zu Ihrer neu erstellten Azure Managed Redis-Instanz.
Wechseln Sie zum Cache im Azure-Portal, und suchen Sie nach Zugriffsschlüssel im Menü „Ressource“. Notieren oder kopieren Sie den Inhalt des Felds Primär. Diesen verwenden Sie zum Erstellen der Verbindungszeichenfolge.
Erstellen Sie eine Verbindungszeichenfolge mit dem folgenden Format:
{your-cache-hostname}:10000,password={your-access-key},ssl=True,abortConnect=False
. Wenn Sie TLS/SSL deaktiviert haben, verwenden Sie stattdessenssl=False
.Stellen Sie mit der Methode Ihrer Wahl eine Verbindung mit der Redis-Instanz her, z. B. über die Redis CLI oder Redis Insights. Eine Anleitung zum Herstellen einer Verbindung mit Ihrer Redis-Instanz mithilfe der Redis CLI finden Sie unter Verwenden des Befehlszeilentools „Redis“ mit Azure Managed Redis.
Konfigurieren Sie Keyspace-Benachrichtigungen mithilfe des Befehls CONFIG SET:
CONFIG SET notify-keyspace-events KEA
KEA ist eine Konfigurationszeichenfolge, die Keyspace-Benachrichtigungen für alle Schlüssel und Ereignisse aktiviert. Weitere Informationen zu Keyspace-Konfigurationszeichenfolgen finden Sie in der Redis-Dokumentation.
Einrichten des Beispielcodes für Redis-Trigger
Fügen Sie in VS Code eine Datei mit dem Namen Common.cs zum Projekt hinzu. Diese Klasse wird verwendet, um die serialisierte JSON-Antwort für den PubSubTrigger zu parsen.
Kopieren Sie den folgenden Code, und fügen Sie ihn in die Datei Common.cs ein:
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; } } }
Fügen Sie dem Projekt eine Datei mit dem Namen RedisTriggers.cs hinzu.
Kopieren Sie das folgende Codebeispiel, und fügen Sie es in die neue Datei ein:
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); } }
In diesem Tutorial werden verschiedene Möglichkeiten zum Auslösen von Redis-Aktivitäten gezeigt:
PubSubTrigger
, der ausgelöst wird, wenn eine Aktivität im Pub/Subkanal mit dem NamenpubsubTest
veröffentlicht wirdKeyspaceTrigger
, das auf dem Pub/Sub-Trigger basiert. Verwenden Sie ihn, um nach Änderungen am SchlüsselkeyspaceTest
zu suchen.KeyeventTrigger
, das auch auf dem Pub/Sub-Trigger basiert. Verwenden Sie ihn, um nach einer beliebigen Verwendung des BefehlsDEL
zu suchen.ListTrigger
, der nach Änderungen an der ListelistTest
suchtStreamTrigger
, der nach Änderungen am StreamstreamTest
sucht
Verbindung mit Ihrem Cache herstellen
Um die Redis-Aktivität auszulösen, müssen Sie die Verbindungszeichenfolge Ihres Cache-Instanz übergeben. Diese Informationen werden in der Datei local.settings.json gespeichert, die automatisch in Ihrem Ordner erstellt wurde. Es wird empfohlen, die Datei für lokale Einstellungen als bewährte Sicherheitsmethode zu verwenden.
Um eine Verbindung mit Ihrem Cache herzustellen, fügen Sie der Datei local.settings.json einen
ConnectionStrings
-Abschnitt hinzu, und fügen Sie dann Ihre Verbindungszeichenfolge mithilfe des ParametersredisConnectionString
hinzu. Der Abschnitt sollte wie im folgenden Beispiel aussehen:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "redisConnectionString": "<your-connection-string>" } }
Der Code in Common.cs sucht nach diesem Wert, wenn er lokal ausgeführt wird:
public const string connectionString = "redisConnectionString";
Wichtig
Dieses Beispiel wurde für das Tutorial vereinfacht. Für die Verwendung in der Produktion wird empfohlen, Azure Key Vault zum Speichern von Verbindungszeichenfolgeninformationen oder Microsoft Entra ID für die Authentifizierung bei der Redis-Instanz zu verwenden.
Lokales Erstellen und Ausführen des Codes
Wechseln Sie in VS Code zur Registerkarte Ausführen und Debuggen, und wählen Sie den grünen Pfeil aus, um den Code lokal zu debuggen. Wenn Sie Azure Functions Core Tools nicht installiert haben, werden Sie dazu aufgefordert. In diesem Fall müssen Sie VS Code nach der Installation neu starten.
Der Code sollte erfolgreich erstellt werden. Sie können den Fortschritt in der Terminalausgabe nachverfolgen.
Um die Triggerfunktion zu testen, versuchen Sie, den
keyspaceTest
-Schlüssel zu erstellen und zu löschen.Sie können eine beliebige Möglichkeit verwenden, um eine Verbindung mit dem Cache herzustellen. Eine einfache Möglichkeit besteht darin, das integrierte Konsolentool im Azure Cache for Redis-Portal zu verwenden. Navigieren Sie zur Cache-Instanz im Azure-Portal, und wählen Sie Konsole aus, um sie zu öffnen.
Wichtig
Das Konsolentool ist für Azure Managed Redis noch nicht verfügbar. Verwenden Sie stattdessen die Redis CLI oder ein Tool wie Redis Insights, um Befehle direkt in der Redis-Instanz auszuführen.
Nachdem die Konsole geöffnet wurde, probieren Sie die folgenden Befehle aus:
SET keyspaceTest 1
SET keyspaceTest 2
DEL keyspaceTest
PUBLISH pubsubTest testMessage
LPUSH listTest test
XADD streamTest * name Clippy
Vergewissern Sie sich, dass die Trigger im Terminal aktiviert werden.
Hinzufügen von Redis-Bindungen
Bindungen bieten eine optimierte Möglichkeit zum Lesen oder Schreiben von Daten, die in Ihrer Redis-Instanz gespeichert sind. Um den Vorteil von Bindungen zu veranschaulichen, werden zwei weitere Funktionen hinzugefügt. Eine trägt den Namen SetGetter
. Sie wird jedes Mal ausgelöst, wenn ein Schlüssel festgelegt wird, und gibt den neuen Wert des Schlüssels mithilfe einer Eingabebindung zurück. Die andere trägt den Namen StreamSetter
. Sie wird ausgelöst, wenn ein neues Element dem Datenstrom myStream
hinzugefügt wird, und verwendet eine Ausgabebindung, um den Wert true
in den Schlüssel newStreamEntry
zu schreiben.
Fügen Sie dem Projekt eine Datei mit dem Namen RedisBindings.cs hinzu.
Kopieren Sie das folgende Codebeispiel, und fügen Sie es in die neue Datei ein:
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"; } }
Wechseln Sie in VS Code zur Registerkarte Ausführen und Debuggen, und wählen Sie den grünen Pfeil aus, um den Code lokal zu debuggen. Der Code sollte erfolgreich erstellt werden. Sie können den Fortschritt in der Terminalausgabe nachverfolgen.
Um die Funktionsweise der Eingabebindung zu testen, versuchen Sie, einen neuen Wert für einen beliebigen Schlüssel festzulegen, z. B. mithilfe des Befehls
SET hello world
. Ihnen sollte angezeigt werden, dass dieSetGetter
-Funktion auslöst und den aktualisierten Wert zurückgibt.Um die Funktionsweise der Ausgabebindung zu testen, versuchen Sie mithilfe des Befehls
XADD myStream * item Order1
dem DatenstrommyStream
ein neues Element hinzuzufügen. Beachten Sie, dass dieStreamSetter
-Funktion durch den neuen Datenstromeintrag ausgelöst wurde und den Werttrue
auf einen anderen Schlüssel mit dem NamennewStreamEntry
festlegt hat. Dieserset
-Befehl löst auch dieSetGetter
-Funktion aus.
Bereitstellen von Code in einer Azure-Funktion
Erstellen Sie eine neue Azure-Funktion:
Navigieren Sie zurück zur Registerkarte Azure, und erweitern Sie Ihr Abonnement.
Klicken Sie mit der rechten Maustaste auf Funktions-App, und wählen Sie dann Funktions-App in Azure erstellen (Erweitert) aus.
Es werden mehrere Eingabeaufforderungen zu Informationen zum Konfigurieren der neuen Funktions-App angezeigt:
- Geben Sie einen eindeutigen Namen ein.
- Wählen Sie .NET 8 Isolated als Laufzeitstapel aus.
- Wählen Sie entweder Linux oder Windows (beides funktioniert) aus.
- Wählen Sie eine vorhandene oder neue Ressourcengruppe für die Funktions-App aus.
- Wählen Sie dieselbe Region wie für Ihre Cache-Instanz aus.
- Wählen Sie Premium als Hostingplan aus.
- Erstellen Sie einen neuen Azure App Service-Plan.
- Wählen Sie den EP1-Tarif aus.
- Wählen Sie ein vorhandenes Speicherkonto aus, oder erstellen Sie ein neues.
- Erstellen Sie eine neue Application Insights-Ressource. Sie verwenden die Ressource, um zu bestätigen, dass der Trigger funktioniert.
Wichtig
Redis-Trigger werden derzeit nicht für Verbrauchsfunktionen unterstützt.
Warten Sie einige Minuten, bis die neue Funktions-App erstellt wurde. Sie wird unter Funktions-App in Ihrem Abonnement angezeigt. Klicken Sie mit der rechten Maustaste auf die neue Funktions-App, und wählen Sie In Funktions-App bereitstellen aus.
Die App wird erstellt und beginnt mit der Bereitstellung. Sie können den Status im Ausgabefenster anzeigen.
Informationen zur Verbindungszeichenfolge hinzufügen
Wichtig
Dieses Beispiel wurde für das Tutorial vereinfacht. Für die Verwendung in der Produktion wird empfohlen, Azure Key Vault zum Speichern von Verbindungszeichenfolgeninformationen oder Microsoft Entra ID für die Authentifizierung bei der Redis-Instanz zu verwenden.
Wechseln Sie im Azure-Portal zu Ihrer neuen Funktions-App, und wählen Sie im Ressourcenmenü die Option Umgebungsvariablen aus.
Wechseln Sie im Arbeitsbereich zu App-Einstellungen.
Geben Sie unter Name den Namen redisConnectionString ein.
Geben Sie unter Wert Ihre Verbindungszeichenfolge an.
Wählen Sie zum Bestätigen auf der Seite Anwenden aus.
Navigieren Sie zum Bereich Übersicht, und wählen Sie Neustarten aus, um die Funktions-App mit den Verbindungszeichenfolgeninformationen neu zu starten.
Testen von Triggern und Bindungen
Nachdem die Bereitstellung abgeschlossen und die Informationen zur Verbindungszeichenfolge hinzugefügt wurden, öffnen Sie Ihre Funktions-App im Azure-Portal. Wählen Sie dann im Ressourcenmenü Protokollstream aus.
Warten Sie, bis Log Analytics eine Verbindung hergestellt hat, und aktivieren Sie dann mithilfe der Redis-Konsole einen der Trigger. Vergewissern Sie sich, dass Trigger hier protokolliert werden.
Bereinigen von Ressourcen
Wenn Sie die in diesem Artikel erstellten Ressourcen weiterhin verwenden möchten, behalten Sie die Ressourcengruppe bei.
Wenn Sie die Ressourcen nicht mehr benötigen, können Sie die erstellte Azure-Ressourcengruppe ansonsten löschen, um Kosten zu vermeiden.
Wichtig
Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Beim Löschen einer Ressourcengruppe werden alle darin enthaltenen Ressourcen unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Falls Sie die Ressourcen in einer vorhandenen Ressourcengruppe erstellt haben, die Ressourcen enthält, die Sie behalten wollen, können Sie jede Ressource einzeln löschen, statt die Ressourcengruppe zu löschen.
So löschen Sie eine Ressourcengruppe
Melden Sie sich beim Azure-Portal an, und wählen Sie anschließend Ressourcengruppen aus.
Wählen Sie die Ressourcengruppe aus, die Sie löschen möchten.
Wenn viele Ressourcengruppen vorhanden sind, verwenden Sie das Feld Nach einem beliebigen Feld filtern..., und geben Sie den Namen Ihrer Ressourcengruppe ein, die Sie für diesen Artikel erstellt haben. Wählen Sie die Ressourcengruppe in der Ergebnisliste aus.
Wählen Sie die Option Ressourcengruppe löschen.
Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie den Namen Ihrer Ressourcengruppe ein, und wählen Sie Löschen aus.
Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.