Självstudie: Kom igång med Azure Functions-utlösare och bindningar i Azure Redis
Den här självstudien visar hur du implementerar grundläggande utlösare med Azure Functions och antingen Azure Managed Redis (förhandsversion) eller Azure Cache for Redis. Den vägleder dig genom att använda Visual Studio Code (VS Code) för att skriva och distribuera en Azure-funktion i C#.
I den här självstudien lär du dig att:
- Konfigurera nödvändiga verktyg.
- Konfigurera och ansluta till en cache.
- Skapa en Azure-funktion och distribuera kod till den.
- Bekräfta loggningen av utlösare.
Förutsättningar
- En Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
- Visual Studio Code.
- Konfigurera en Azure Managed Redis-instans (förhandsversion)
- Konfigurera en Azure Cache for Redis-instans
Skapa en ny Azure Cache for Redis-instans med hjälp av Azure Portal eller ditt önskade CLI-verktyg. I den här självstudien används en balanced B1-instans , vilket är en bra startpunkt. Se till att välja den här instansen när du använder snabbstartsguiden för att komma igång.
Standardinställningarna bör räcka. I den här självstudien används en offentlig slutpunkt för demonstration, men vi rekommenderar att du använder en privat slutpunkt för allt i produktion.
Det kan ta några minuter att skapa cacheminnet. Du kan gå vidare till nästa avsnitt medan processen är klar.
Konfigurera Visual Studio Code
Om du inte har installerat Azure Functions-tillägget för VS Code ännu söker du efter Azure Functions på MENYN EXTENSIONS och väljer sedan Installera. Om du inte har C#-tillägget installerat installerar du det också.
Gå till fliken Azure . Logga in på ditt Azure-konto.
Om du vill lagra projektet som du skapar skapar du en ny lokal mapp på datorn. I den här självstudien används RedisAzureFunctionDemo som exempel.
På fliken Azure skapar du en ny funktionsapp genom att välja blixtikonen längst upp till höger på fliken Arbetsyta .
Välj Skapa funktion....
Välj den mapp som du skapade för att börja skapa ett nytt Azure Functions-projekt. Du får flera frågor på skärmen. Välj:
- C# som språk.
- .NET 8.0 Isolerad LTS som .NET-körning.
- Hoppa över för tillfället som projektmall.
Om du inte har installerat .NET Core SDK uppmanas du att göra det.
Viktigt!
För .NET-funktioner rekommenderas användning av den isolerade arbetsmodellen över den pågående modellen. En jämförelse av de processbaserade och isolerade arbetsmodellerna finns i skillnader mellan den isolerade arbetsmodellen och den processbaserade modellen för .NET på Azure Functions. Det här exemplet använder den isolerade arbetsmodellen.
Bekräfta att det nya projektet visas i explorer-fönstret.
Installera det nödvändiga NuGet-paketet
Du måste installera Microsoft.Azure.Functions.Worker.Extensions.Redis
NuGet-paketet för Redis-tillägget som gör att Redis-nyckelområdesmeddelanden kan användas som utlösare i Azure Functions.
Installera det här paketet genom att gå till fliken Terminal i VS Code och ange följande kommando:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease
Kommentar
Paketet Microsoft.Azure.Functions.Worker.Extensions.Redis
används för .NET-isolerade arbetsprocessfunktioner. .NET-in-processfunktioner och alla andra språk använder paketet Microsoft.Azure.WebJobs.Extensions.Redis
i stället.
Gå till din nyligen skapade Azure Managed Redis-instans.
Gå till din cache i Azure Portal och leta reda på Åtkomstnycklar på resursmenyn. Skriv ned eller kopiera innehållet i rutan Primär . Du använder detta för att skapa dina anslutningssträng.
Skapa en anslutningssträng med följande format:
{your-cache-hostname}:10000,password={your-access-key},ssl=True,abortConnect=False
. Om du har inaktiverat TLS/SSL använder dussl=False
i stället.Anslut till Redis-instansen med valfri metod, till exempel Redis CLI eller Redis Insights. Anvisningar om hur du ansluter till redis-instansen med Redis CLI finns i Använda redis-kommandoradsverktyget med Azure Managed Redis.
Konfigurera keyspace-meddelanden med kommandot CONFIG SET :
CONFIG SET notify-keyspace-events KEA
KEA är en konfigurationssträng som aktiverar keyspace-meddelanden för alla nycklar och händelser. Mer information om konfigurationssträngar för nyckelrymder finns i Redis-dokumentationen.
Konfigurera exempelkoden för Redis-utlösare
I VS Code lägger du till en fil med namnet Common.cs i projektet. Den här klassen används för att parsa det serialiserade JSON-svaret för PubSubTrigger.
Kopiera och klistra in följande kod i filen 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; } } }
Lägg till en fil med namnet RedisTriggers.cs i projektet.
Kopiera och klistra in följande kodexempel i den nya filen:
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); } }
Den här självstudien visar flera sätt att utlösa redis-aktivitet:
PubSubTrigger
, som utlöses när en aktivitet publiceras till pub-/underkanalen med namnetpubsubTest
.KeyspaceTrigger
, som bygger på pub-/underutlösaren. Använd den för att leta efter ändringar ikeyspaceTest
nyckeln.KeyeventTrigger
, som också bygger på Pub/Sub-utlösaren. Använd den för att söka efter all användning avDEL
kommandot.ListTrigger
, som söker efter ändringar ilistTest
listan.StreamTrigger
, som söker efter ändringar istreamTest
strömmen.
Ansluta till cacheminnet
Om du vill utlösa Redis-aktivitet måste du skicka in anslutningssträng för cacheinstansen. Den här informationen lagras i den local.settings.json fil som skapades automatiskt i mappen. Vi rekommenderar att du använder filen med lokala inställningar som bästa praxis för säkerhet.
Om du vill ansluta till cacheminnet lägger du till ett
ConnectionStrings
avsnitt i local.settings.json-filen och lägger sedan till din anslutningssträng med hjälp av parameternredisConnectionString
. Avsnittet bör se ut så här:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "redisConnectionString": "<your-connection-string>" } }
Koden i Common.cs ser till det här värdet när den körs lokalt:
public const string connectionString = "redisConnectionString";
Viktigt!
Det här exemplet är förenklat för självstudien. För produktionsanvändning rekommenderar vi att du använder Azure Key Vault för att lagra anslutningssträng information eller autentisera till Redis-instansen med hjälp av Microsoft Entra-ID.
Skapa och kör koden lokalt
Växla till fliken Kör och felsök i VS Code och välj den gröna pilen för att felsöka koden lokalt. Om du inte har installerat Azure Functions-kärnverktyg uppmanas du att göra det. I så fall måste du starta om VS Code efter installationen.
Koden bör skapas. Du kan spåra dess förlopp i terminalutdata.
Testa utlösarfunktionen genom att försöka skapa och ta
keyspaceTest
bort nyckeln.Du kan använda alla sätt som du föredrar att ansluta till cachen. Ett enkelt sätt är att använda det inbyggda konsolverktyget i Azure Cache for Redis-portalen. Gå till cacheinstansen i Azure Portal och välj sedan Konsol för att öppna den.
Viktigt!
Konsolverktyget är ännu inte tillgängligt för Azure Managed Redis. Överväg i stället att använda redis-cli eller ett verktyg som Redis Insight för att köra kommandon direkt på Redis-instansen.
När konsolen är öppen kan du prova följande kommandon:
SET keyspaceTest 1
SET keyspaceTest 2
DEL keyspaceTest
PUBLISH pubsubTest testMessage
LPUSH listTest test
XADD streamTest * name Clippy
Bekräfta att utlösarna aktiveras i terminalen.
Lägga till Redis-bindningar
Bindningar lägger till ett effektivt sätt att läsa eller skriva data som lagras på din Redis-instans. För att visa fördelarna med bindningar lägger vi till två andra funktioner. En kallas SetGetter
, som utlöses varje gång en nyckel anges och returnerar det nya värdet för nyckeln med hjälp av en indatabindning. Den andra kallas StreamSetter
, som utlöses när ett nytt objekt läggs till i dataströmmen myStream
och använder en utdatabindning för att skriva värdet true
till nyckeln newStreamEntry
.
Lägg till en fil med namnet RedisBindings.cs i projektet.
Kopiera och klistra in följande kodexempel i den nya filen:
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"; } }
Växla till fliken Kör och felsök i VS Code och välj den gröna pilen för att felsöka koden lokalt. Koden bör skapas. Du kan spåra dess förlopp i terminalutdata.
Testa indatabindningsfunktionen genom att prova att ange ett nytt värde för valfri nyckel, till exempel med kommandot
SET hello world
Du bör se attSetGetter
funktionen utlöses och returnerar det uppdaterade värdet.Testa utdatabindningsfunktionen genom att prova att lägga till ett nytt objekt i strömmen
myStream
med kommandotXADD myStream * item Order1
. Observera attStreamSetter
funktionen som utlöstes på den nya dataströmposten och anger värdettrue
till en annan nyckel som heternewStreamEntry
. Det härset
kommandot utlöserSetGetter
också funktionen.
Distribuera kod till en Azure-funktion
Skapa en ny Azure-funktion:
Gå tillbaka till Fliken Azure och expandera din prenumeration.
Högerklicka på Funktionsapp och välj sedan Skapa funktionsapp i Azure (Avancerat).
Du får flera frågor om information för att konfigurera den nya funktionsappen:
- Ange ett unikt namn.
- Välj .NET 8 Isolerad som körningsstack.
- Välj antingen Linux eller Windows (fungerar antingen).
- Välj en befintlig eller ny resursgrupp som ska innehålla funktionsappen.
- Välj samma region som cacheinstansen.
- Välj Premium som värdplan.
- Skapa en ny Azure App Service-plan.
- Välj prisnivån EP1.
- Välj ett befintligt lagringskonto eller skapa ett nytt.
- Skapa en ny Application Insights-resurs. Du använder resursen för att bekräfta att utlösaren fungerar.
Viktigt!
Redis-utlösare stöds för närvarande inte i förbrukningsfunktioner.
Vänta några minuter tills den nya funktionsappen har skapats. Den visas under Funktionsapp i din prenumeration. Högerklicka på den nya funktionsappen och välj sedan Distribuera till funktionsapp.
Appen skapar och börjar distribuera. Du kan spåra förloppet i utdatafönstret.
Lägg till anslutningssträng information
Viktigt!
Det här exemplet är förenklat för självstudien. För produktionsanvändning rekommenderar vi att du använder Azure Key Vault för att lagra anslutningssträng information eller autentisera till Redis-instansen med hjälp av Microsoft Entra-ID.
I Azure Portal går du till din nya funktionsapp och väljer Miljövariabler på resursmenyn.
Gå till Appinställningar i arbetsfönstret.
Som Namn anger du redisConnectionString.
Ange din anslutningssträng som Värde.
Välj Använd på sidan för att bekräfta.
Gå till fönstret Översikt och välj Starta om för att starta om funktionsappen med anslutningssträng information.
Testa utlösare och bindningar
När distributionen är klar och anslutningssträng informationen har lagts till öppnar du funktionsappen i Azure Portal. Välj sedan Log Stream på resursmenyn.
Vänta tills Log Analytics ansluter och använd sedan Redis-konsolen för att aktivera någon av utlösarna. Bekräfta att utlösare loggas här.
Rensa resurser
Om du vill fortsätta att använda de resurser som du skapade i den här artikeln behåller du resursgruppen.
Om du är klar med resurserna kan du ta bort den Azure-resursgrupp som du skapade för att undvika avgifter.
Viktigt!
Att ta bort en resursgrupp kan inte ångras. När du tar bort en resursgrupp tas alla resurser som ingår i den bort permanent. Kontrollera att du inte av misstag tar bort fel resursgrupp eller resurser. Om du har skapat resurserna i en befintlig resursgrupp som innehåller resurser som du vill behålla kan du ta bort varje resurs individuellt i stället för att ta bort resursgruppen.
Ta bort en resursgrupp
Logga in på Azure-portalen och välj Resursgrupper.
Välj den resursgrupp som du vill ta bort.
Om det finns många resursgrupper använder du rutan Filter för alla fält... och skriver namnet på resursgruppen som du skapade för den här artikeln. Välj resursgruppen i resultatlistan.
Välj Ta bort resursgrupp.
Du blir ombedd att bekräfta borttagningen av resursgruppen. Skriv namnet på din resursgrupp för att bekräfta och välj sedan Ta bort.
Efter en liten stund tas resursgruppen och de resurser som finns i den bort.