Share via


Tutorial: Erste Schritte mit Azure Functions-Triggern und -Bindungen in Azure Cache for Redis

In diesem Tutorial wird gezeigt, wie Sie grundlegende Trigger mit Azure Cache for Redis und Azure Functions 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

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 Standard C1-Instanz verwendet, was ein guter Ausgangspunkt ist. Verwenden Sie die Schnellstartanleitung für den Einstieg.

Screenshot: Erstellen eines Cache im Azure-Portal

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

  1. 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.

    Screenshot: Installierte erforderliche Erweiterungen in VS Code

  2. Navigieren Sie zur Registerkarte Azure. Melden Sie sich bei Ihrem Azure-Konto an.

  3. 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.

  4. Erstellen Sie auf der Registerkarte Azure eine neue Funktions-App, indem Sie auf der Registerkarte Arbeitsbereich oben rechts auf das Blitzsymbol klicken.

  5. Wählen Sie Funktion erstellen aus.

    Screenshot: Symbol zum Hinzufügen einer neuen Funktion über VS Code

  6. 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.

  7. Vergewissern Sie sich, dass das neue Projekt im Bereich EXPLORER angezeigt wird.

    Screenshot: Arbeitsbereich in VS Code

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.

Konfigurieren des Caches

  1. Wechseln Sie zu Ihrer neu erstellten Azure Cache for Redis-Instanz.

  2. Wechseln Sie im Azure-Portal zu Ihrem Cache, und gehen Sie dann wie folgt vor:

    1. Wählen Sie im Menü „Ressource“ die Option Erweiterte Einstellungen aus.

    2. Scrollen Sie nach unten zum Feld notify-keyspace-events, und geben Sie KEA ein.

      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.

    3. Wählen Sie oben im Fenster Speichern aus.

    Screenshot: Erweiterte Einstellungen für Azure Cache for Redis im Portal

  3. Wählen Sie im Ressourcenmenü die Option Zugriffsschlüssel aus, und notieren oder kopieren Sie den Inhalt des Felds Primäre Verbindungszeichenfolge. Diese Zeichenfolge wird zum Herstellen einer Verbindung mit dem Cache verwendet.

    Screenshot: Primäre Verbindungszeichenfolge für einen Zugriffsschlüssel

Einrichten des Beispielcodes für Redis-Trigger

  1. 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.

  2. 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; }
        }
    }
    
  3. Fügen Sie dem Projekt eine Datei mit dem Namen RedisTriggers.cs hinzu.

  4. 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);
        }
    }
    
  5. 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 Namen pubsubTest veröffentlicht wird
    • KeyspaceTrigger, das auf dem Pub/Sub-Trigger basiert. Verwenden Sie ihn, um nach Änderungen am Schlüssel keyspaceTest zu suchen.
    • KeyeventTrigger, das auch auf dem Pub/Sub-Trigger basiert. Verwenden Sie ihn, um nach einer beliebigen Verwendung des Befehls DEL zu suchen.
    • ListTrigger, der nach Änderungen an der Liste listTest sucht
    • StreamTrigger, der nach Änderungen am Stream streamTest sucht

Verbindung mit Ihrem Cache herstellen

  1. 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.

  2. 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 Parameters redisConnectionString 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 EntraID für die Authentifizierung bei der Redis-Instanz zu verwenden.

Lokales Erstellen und Ausführen des Codes

  1. 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.

  2. Der Code sollte erfolgreich erstellt werden. Sie können den Fortschritt in der Terminalausgabe nachverfolgen.

  3. 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.

    Screenshot: C#-Code und Verbindungszeichenfolge

    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

    Screenshot: Konsole und einige Redis-Befehle und -Ergebnisse

  4. Vergewissern Sie sich, dass die Trigger im Terminal aktiviert werden.

    Screenshot: VS Code-Editor mit ausgeführtem Code

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.

  1. Fügen Sie dem Projekt eine Datei mit dem Namen RedisBindings.cs hinzu.

  2. 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";
        }
    }
    
  3. 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.

  4. 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 die SetGetter-Funktion auslöst und den aktualisierten Wert zurückgibt.

  5. Um die Funktionsweise der Ausgabebindung zu testen, versuchen Sie mithilfe des Befehls XADD myStream * item Order1 dem Datenstrom myStream ein neues Element hinzuzufügen. Beachten Sie, dass die StreamSetter-Funktion durch den neuen Datenstromeintrag ausgelöst wurde und den Wert true auf einen anderen Schlüssel mit dem Namen newStreamEntry festlegt hat. Dieser set-Befehl löst auch die SetGetter-Funktion aus.

Bereitstellen von Code in einer Azure-Funktion

  1. Erstellen Sie eine neue Azure-Funktion:

    1. Navigieren Sie zurück zur Registerkarte Azure, und erweitern Sie Ihr Abonnement.

    2. Klicken Sie mit der rechten Maustaste auf Funktions-App, und wählen Sie dann Funktions-App in Azure erstellen (Erweitert) aus.

    Screenshot: Optionen zum Erstellen einer Funktions-App in VS Code

  2. 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.

  3. 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.

    Screenshot: Optionen zum Bereitstellen einer Funktions-App in VS Code

  4. Die App wird erstellt und beginnt mit der Bereitstellung. Sie können den Status im Ausgabefenster anzeigen.

Informationen zur Verbindungszeichenfolge hinzufügen

  1. Wechseln Sie im Azure-Portal zu Ihrer neuen Funktions-App, und wählen Sie im Ressourcenmenü die Option Umgebungsvariablen aus.

  2. Wechseln Sie im Arbeitsbereich zu App-Einstellungen.

  3. Geben Sie unter Name den Namen redisConnectionString ein.

  4. Geben Sie unter Wert Ihre Verbindungszeichenfolge an.

  5. Wählen Sie zum Bestätigen auf der Seite Anwenden aus.

  6. 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

  1. 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.

  2. 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.

    Screenshot: Protokollstream für eine Funktions-App-Ressource im Ressourcenmenü

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

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie anschließend Ressourcengruppen aus.

  2. 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.

    Screenshot: Liste mit zu löschenden Ressourcengruppen im Arbeitsbereich

  3. Wählen Sie die Option Ressourcengruppe löschen.

  4. 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.

    Screenshot: Formular, in das der Ressourcenname eingegeben werden muss, um den Löschvorgang zu bestätigen

Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.