Delen via


Zelfstudie: Aan de slag met Azure Functions-triggers en -bindingen in Azure Cache voor Redis

Deze zelfstudie laat zien hoe u basistriggers implementeert met Azure Cache voor Redis en Azure Functions. U wordt begeleid bij het gebruik van Visual Studio Code (VS Code) voor het schrijven en implementeren van een Azure-functie in C#.

In deze zelfstudie leert u het volgende:

  • Stel de benodigde hulpprogramma's in.
  • Configureer en maak verbinding met een cache.
  • Maak een Azure-functie en implementeer er code in.
  • Bevestig de logboekregistratie van triggers.

Vereisten

Een Azure Cache voor Redis-exemplaar instellen

Maak een nieuw Azure Cache voor Redis exemplaar met behulp van Azure Portal of het CLI-hulpprogramma van uw voorkeur. In deze zelfstudie wordt gebruikgemaakt van een Standard C1-exemplaar . Dit is een goed uitgangspunt. Gebruik de snelstartgids om aan de slag te gaan.

Schermopname van het maken van een cache in Azure Portal.

De standaardinstellingen moeten voldoende zijn. In deze zelfstudie wordt een openbaar eindpunt gebruikt voor demonstratie, maar we raden u aan een privé-eindpunt te gebruiken voor alles in productie.

Het maken van de cache kan enkele minuten duren. U kunt naar de volgende sectie gaan terwijl het proces is voltooid.

Visual Studio Code instellen

  1. Als u de Azure Functions-extensie voor VS Code nog niet hebt geïnstalleerd, zoekt u naar Azure Functions in het menu EXTENSIONS en selecteert u Installeren. Als u de C#-extensie niet hebt geïnstalleerd, installeert u deze ook.

    Schermopname van de vereiste extensies die zijn geïnstalleerd in VS Code.

  2. Ga naar het tabblad Azure . Meld u aan bij uw Azure-account.

  3. Als u het project wilt opslaan dat u bouwt, maakt u een nieuwe lokale map op uw computer. In deze zelfstudie wordt RedisAzureFunctionDemo gebruikt als voorbeeld.

  4. Maak op het tabblad Azure een nieuwe functie-app door het bliksemschichtpictogram in de rechterbovenhoek van het tabblad Werkruimte te selecteren.

  5. Selecteer De functie Maken....

    Schermopname van het pictogram voor het toevoegen van een nieuwe functie vanuit VS Code.

  6. Selecteer de map die u hebt gemaakt om een nieuw Azure Functions-project te maken. U krijgt verschillende aanwijzingen op het scherm. Selecteer:

    • C# als taal.
    • .NET 8.0 Geïsoleerde LTS als .NET-runtime.
    • Sla voorlopig over als de projectsjabloon.

    Als u de .NET Core SDK niet hebt geïnstalleerd, wordt u gevraagd dit te doen.

    Belangrijk

    Voor .NET-functies wordt het gebruik van het geïsoleerde werkrolmodel aanbevolen via het procesmodel. Zie de verschillen tussen het geïsoleerde werkrolmodel en het in-procesmodel voor .NET in Azure Functions voor een vergelijking van de in-proces- en geïsoleerde werkrolmodellen. In dit voorbeeld wordt het geïsoleerde werkrolmodel gebruikt.

  7. Controleer of het nieuwe project wordt weergegeven in het deelvenster EXPLORER .

    Schermopname van een werkruimte in VS Code.

Het benodigde NuGet-pakket installeren

U moet het NuGet-pakket voor de Redis-extensie installeren Microsoft.Azure.Functions.Worker.Extensions.Rediswaarmee Redis keyspace-meldingen kunnen worden gebruikt als triggers in Azure Functions.

Installeer dit pakket door naar het tabblad Terminal in VS Code te gaan en de volgende opdracht in te voeren:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease

Notitie

Het Microsoft.Azure.Functions.Worker.Extensions.Redis pakket wordt gebruikt voor .NET geïsoleerde werkprocesfuncties. .NET in-process-functies en alle andere talen gebruiken in plaats daarvan het Microsoft.Azure.WebJobs.Extensions.Redis pakket.

De cache configureren

  1. Ga naar het zojuist gemaakte Azure Cache voor Redis-exemplaar.

  2. Ga naar uw cache in Azure Portal en ga vervolgens naar:

    1. Selecteer Geavanceerde instellingen in het resourcemenu.

    2. Schuif omlaag naar het vak notify-keyspace-events en voer KEA in.

      KEA is een configuratiereeks waarmee keyspacemeldingen voor alle sleutels en gebeurtenissen worden ingeschakeld. Zie de Redis-documentatie voor meer informatie over keyspace-configuratiereeksen.

    3. Selecteer Opslaan boven aan het venster.

    Schermopname van geavanceerde instellingen voor Azure Cache voor Redis in de portal.

  3. Zoek toegangssleutels in het menu Resource en noteer of kopieer de inhoud van het vak Primaire verbindingsreeks. Deze tekenreeks wordt gebruikt om verbinding te maken met de cache.

    Schermopname van de primaire verbindingsreeks voor een toegangssleutel.

De voorbeeldcode voor Redis-triggers instellen

  1. Voeg in VS Code een bestand met de naam Common.cs toe aan het project. Deze klasse wordt gebruikt om het geserialiseerde JSON-antwoord voor de PubSubTrigger te parseren.

  2. Kopieer en plak de volgende code in het Common.cs-bestand :

    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. Voeg een bestand met de naam RedisTriggers.cs toe aan het project.

  4. Kopieer en plak het volgende codevoorbeeld in het nieuwe bestand:

    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 deze zelfstudie ziet u meerdere manieren om redis-activiteiten te activeren:

    • PubSubTrigger, die wordt geactiveerd wanneer een activiteit wordt gepubliceerd naar het kanaal Pub/Sub met de naam pubsubTest.
    • KeyspaceTrigger, dat is gebaseerd op de pub-/subtrigger. Gebruik deze om te zoeken naar wijzigingen in de keyspaceTest sleutel.
    • KeyeventTrigger, dat ook is gebouwd op de Pub/Sub-trigger. Gebruik deze om te zoeken naar elk gebruik van de DEL opdracht.
    • ListTrigger, waarmee wordt gezocht naar wijzigingen in de listTest lijst.
    • StreamTrigger, waarmee wordt gezocht naar wijzigingen in de streamTest stream.

Verbinding maken naar uw cache

  1. Als u redis-activiteit wilt activeren, moet u de verbindingsreeks van uw cache-exemplaar doorgeven. Deze informatie wordt opgeslagen in het local.settings.json-bestand dat automatisch in uw map is gemaakt. U wordt aangeraden het bestand met lokale instellingen te gebruiken als aanbevolen beveiligingsprocedures.

  2. Als u verbinding wilt maken met uw cache, voegt u een ConnectionStrings sectie toe in het local.settings.json-bestand en voegt u vervolgens uw verbindingsreeks toe met behulp van de redisConnectionString parameter. De sectie moet er als volgt uitzien:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "redisConnectionString": "<your-connection-string>"
      }
    }
    

    De code in Common.cs kijkt naar deze waarde wanneer deze lokaal wordt uitgevoerd:

    public const string connectionString = "redisConnectionString";
    

Belangrijk

Dit voorbeeld is vereenvoudigd voor de zelfstudie. Voor productiegebruik raden we u aan Azure Key Vault te gebruiken om verbindingsreeks informatie op te slaan of om te verifiëren bij het Redis-exemplaar met behulp van EntraID.

De code lokaal bouwen en uitvoeren

  1. Ga naar het tabblad Uitvoeren en foutopsporing in VS Code en selecteer de groene pijl om lokaal fouten in de code op te sporen. Als u geen Azure Functions-kernhulpprogramma's hebt geïnstalleerd, wordt u gevraagd dit te doen. In dat geval moet u VS Code opnieuw starten na de installatie.

  2. De code moet goed worden gebouwd. U kunt de voortgang bijhouden in de terminaluitvoer.

  3. Als u de triggerfunctionaliteit wilt testen, probeert u de keyspaceTest sleutel te maken en te verwijderen.

    U kunt elke gewenste manier gebruiken om verbinding te maken met de cache. Een eenvoudige manier is het gebruik van het ingebouwde consolehulpprogramma in de Azure Cache voor Redis-portal. Ga naar het cache-exemplaar in Azure Portal en selecteer vervolgens Console om het te openen.

    Schermopname van C-Sharp-code en een verbindingsreeks.

    Nadat de console is geopend, voert u de volgende opdrachten uit:

    • SET keyspaceTest 1
    • SET keyspaceTest 2
    • DEL keyspaceTest
    • PUBLISH pubsubTest testMessage
    • LPUSH listTest test
    • XADD streamTest * name Clippy

    Schermopname van een console en enkele Redis-opdrachten en -resultaten.

  4. Controleer of de triggers worden geactiveerd in de terminal.

    Schermopname van de VS Code-editor met code die wordt uitgevoerd.

Redis-bindingen toevoegen

Met bindingen kunt u gestroomlijnde gegevens lezen of schrijven die zijn opgeslagen op uw Redis-exemplaar. Om het voordeel van bindingen te demonstreren, voegen we twee andere functies toe. Een wordt aangeroepen SetGetter, die wordt geactiveerd telkens wanneer een sleutel wordt ingesteld en retourneert de nieuwe waarde van de sleutel met behulp van een invoerbinding. De andere wordt aangeroepen StreamSetter, die wordt geactiveerd wanneer een nieuw item wordt toegevoegd aan de stroom myStream en een uitvoerbinding gebruikt om de waarde true naar de sleutel newStreamEntryte schrijven.

  1. Voeg een bestand met de naam RedisBindings.cs toe aan het project.

  2. Kopieer en plak het volgende codevoorbeeld in het nieuwe bestand:

    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. Ga naar het tabblad Uitvoeren en foutopsporing in VS Code en selecteer de groene pijl om lokaal fouten in de code op te sporen. De code moet goed worden gebouwd. U kunt de voortgang bijhouden in de terminaluitvoer.

  4. Als u de functionaliteit van de invoerbinding wilt testen, probeert u een nieuwe waarde in te stellen voor een sleutel, bijvoorbeeld met behulp van de opdracht SET hello world . U ziet dat de SetGetter functie wordt geactiveerd en de bijgewerkte waarde retourneert.

  5. Als u de functionaliteit van de uitvoerbinding wilt testen, voegt u een nieuw item toe aan de stream myStream met behulp van de opdracht XADD myStream * item Order1. U ziet dat de StreamSetter functie die is geactiveerd voor de nieuwe stroomvermelding en de waarde true instelt op een andere sleutel met de naam newStreamEntry. Met deze set opdracht wordt ook de SetGetter functie geactiveerd.

Code implementeren in een Azure-functie

  1. Maak een nieuwe Azure-functie:

    1. Ga terug naar het tabblad Azure en vouw uw abonnement uit.

    2. Klik met de rechtermuisknop op Functie-app en selecteer Vervolgens Functie-app maken in Azure (geavanceerd).

    Schermopname van selecties voor het maken van een functie-app in VS Code.

  2. U krijgt verschillende aanwijzingen voor informatie om de nieuwe functie-app te configureren:

    • Voer een unieke naam in.
    • Selecteer .NET 8 Geïsoleerd als runtimestack.
    • Selecteer Linux of Windows (beide werken).
    • Selecteer een bestaande of nieuwe resourcegroep om de functie-app te bewaren.
    • Selecteer dezelfde regio als uw cache-exemplaar.
    • Selecteer Premium als hostingabonnement.
    • Maak een nieuw Azure-app Service-plan.
    • Selecteer de EP1-prijscategorie.
    • Selecteer een bestaand opslagaccount of maak een nieuw opslagaccount.
    • Maak een nieuwe Application Insights-resource. U gebruikt de resource om te bevestigen dat de trigger werkt.

    Belangrijk

    Redis-triggers worden momenteel niet ondersteund voor verbruiksfuncties.

  3. Wacht enkele minuten totdat de nieuwe functie-app is gemaakt. Deze wordt weergegeven onder Functie-app in uw abonnement. Klik met de rechtermuisknop op de nieuwe functie-app en selecteer vervolgens Implementeren in functie-app.

    Schermopname van selecties voor implementatie in een functie-app in VS Code.

  4. De app bouwt en begint met implementeren. U kunt de voortgang bijhouden in het uitvoervenster.

Verbindingsreeks-informatie toevoegen

  1. Ga in Azure Portal naar uw nieuwe functie-app en selecteer Omgevingsvariabelen in het resourcemenu.

  2. Ga in het werkvenster naar App-instellingen.

  3. Voer bij Naam redis Verbinding maken ionString in.

  4. Voer bij Waarde uw verbindingsreeks in.

  5. Selecteer Toepassen op de pagina om te bevestigen.

  6. Ga naar het deelvenster Overzicht en selecteer Opnieuw opstarten om de functie-app opnieuw op te starten met de verbindingsreeks informatie.

Uw triggers en bindingen testen

  1. Nadat de implementatie is voltooid en de verbindingsreeks informatie is toegevoegd, opent u uw functie-app in Azure Portal. Selecteer Vervolgens Log Stream in het resourcemenu.

  2. Wacht totdat Log Analytics verbinding maakt en gebruik vervolgens de Redis-console om een van de triggers te activeren. Controleer of triggers hier worden geregistreerd.

    Schermopname van een logboekstream voor een functie-app-resource in het resourcemenu.

Resources opschonen

Als u de resources wilt blijven gebruiken die u in dit artikel hebt gemaakt, moet u de resourcegroep behouden.

Als u klaar bent met de resources, kunt u de Azure-resourcegroep verwijderen die u hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. Wanneer u een resourcegroep verwijdert, worden alle resources in de groep definitief verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de resources in een bestaande resourcegroep hebt gemaakt die resources bevat die u wilt behouden, kunt u elke resource afzonderlijk verwijderen in plaats van de resourcegroep te verwijderen.

Een resourcegroep verwijderen

  1. Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.

  2. Selecteer de resourcegroep die u wilt verwijderen.

    Als er veel resourcegroepen zijn, gebruikt u het vak Filter voor een veld... en typt u de naam van de resourcegroep die u voor dit artikel hebt gemaakt. Selecteer de resourcegroep in de lijst met resultaten.

    Schermopname van een lijst met resourcegroepen die u wilt verwijderen in het werkvenster.

  3. Selecteer Resourcegroep verwijderen.

  4. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Typ ter bevestiging de naam van de resourcegroep. Selecteer vervolgens Verwijderen.

    Schermopname van een formulier waarvoor de resourcenaam is vereist om het verwijderen te bevestigen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.