Udostępnij za pośrednictwem


Samouczek: rozpoczynanie pracy z wyzwalaczami i powiązaniami usługi Azure Functions w usłudze Azure Redis

W tym samouczku pokazano, jak zaimplementować podstawowe wyzwalacze za pomocą usługi Azure Functions i usługi Azure Managed Redis (wersja zapoznawcza) lub Azure Cache for Redis. Przeprowadzi Cię przez proces pisania i wdrażania funkcji platformy Azure w języku C#przy użyciu programu Visual Studio Code (VS Code).

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Skonfiguruj niezbędne narzędzia.
  • Konfigurowanie pamięci podręcznej i nawiązywanie z nią połączenia.
  • Utwórz funkcję platformy Azure i wdróż w niej kod.
  • Potwierdź rejestrowanie wyzwalaczy.

Wymagania wstępne

Utwórz nowe wystąpienie usługi Azure Cache for Redis przy użyciu witryny Azure Portal lub preferowanego narzędzia interfejsu wiersza polecenia. W tym samouczku jest używane wystąpienie Zrównoważone B1 , które jest dobrym punktem wyjścia. Pamiętaj, aby wybrać to wystąpienie podczas korzystania z przewodnika Szybki start, aby rozpocząć pracę.

Ustawienia domyślne powinny wystarczyć. W tym samouczku używany jest publiczny punkt końcowy na potrzeby pokazu, ale zalecamy użycie prywatnego punktu końcowego dla wszystkich elementów w środowisku produkcyjnym.

Tworzenie pamięci podręcznej może potrwać kilka minut. Po zakończeniu procesu możesz przejść do następnej sekcji.

Konfigurowanie programu Visual Studio Code

  1. Jeśli rozszerzenie usługi Azure Functions dla programu VS Code nie zostało jeszcze zainstalowane, wyszukaj usługę Azure Functions w menu ROZSZERZENIA , a następnie wybierz pozycję Zainstaluj. Jeśli nie masz zainstalowanego rozszerzenia języka C#, zainstaluj je również.

    Zrzut ekranu przedstawiający wymagane rozszerzenia zainstalowane w programie VS Code.

  2. Przejdź do karty Azure . Zaloguj się do konta platformy Azure.

  3. Aby zapisać projekt, który tworzysz, utwórz nowy folder lokalny na komputerze. W tym samouczku użyto usługi RedisAzureFunctionDemo jako przykładu.

  4. Na karcie Azure utwórz nową aplikację funkcji, wybierając ikonę błyskawicy w prawym górnym rogu karty Obszar roboczy.

  5. Wybierz pozycję Utwórz funkcję....

    Zrzut ekranu przedstawiający ikonę dodawania nowej funkcji z programu VS Code.

  6. Wybierz utworzony folder, aby rozpocząć tworzenie nowego projektu usługi Azure Functions. Zostanie wyświetlonych kilka monitów na ekranie. Wybierz pozycję:

    • Język C# jako język.
    • Program .NET 8.0 Isolated LTS jako środowisko uruchomieniowe platformy .NET.
    • Pomiń teraz jako szablon projektu.

    Jeśli nie masz zainstalowanego zestawu .NET Core SDK, zostanie wyświetlony monit o to.

    Ważne

    W przypadku funkcji platformy .NET używanie izolowanego modelu procesu roboczego jest zalecane w modelu w procesie. Aby zapoznać się z porównaniem modeli procesów procesowych i izolowanych procesów roboczych, zobacz różnice między izolowanym modelem procesu roboczego a modelem procesu dla platformy .NET w usłudze Azure Functions. W tym przykładzie użyto izolowanego modelu procesu roboczego.

  7. Upewnij się, że nowy projekt pojawi się w okienku EKSPLORATOR .

    Zrzut ekranu przedstawiający obszar roboczy w programie VS Code.

Instalowanie niezbędnego pakietu NuGet

Należy zainstalować Microsoft.Azure.Functions.Worker.Extensions.Redispakiet NuGet dla rozszerzenia Redis, który umożliwia używanie powiadomień o przestrzeni kluczy Redis jako wyzwalaczy w usłudze Azure Functions.

Zainstaluj ten pakiet, przechodząc do karty Terminal w programie VS Code i wprowadzając następujące polecenie:

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

Uwaga

Pakiet Microsoft.Azure.Functions.Worker.Extensions.Redis jest używany dla funkcji procesów izolowanych na platformie .NET. Funkcje w procesie platformy .NET i wszystkie inne języki będą używać Microsoft.Azure.WebJobs.Extensions.Redis pakietu.

  1. Przejdź do nowo utworzonego wystąpienia usługi Azure Managed Redis.

  2. Przejdź do pamięci podręcznej w witrynie Azure Portal i znajdź klucze dostępu w menu Zasób. Zapisz lub skopiuj zawartość pola podstawowego. Użyjesz go do utworzenia parametry połączenia.

  3. Skompiluj parametry połączenia przy użyciu następującego formatu: {your-cache-hostname}:10000,password={your-access-key},ssl=True,abortConnect=False. Jeśli wyłączono protokół TLS/SSL, użyj ssl=False zamiast tego.

  4. Połącz się z wystąpieniem usługi Redis przy użyciu wybranej metody, takiej jak interfejs wiersza polecenia usługi Redis lub usługa Redis Insights. Aby uzyskać instrukcje dotyczące nawiązywania połączenia z wystąpieniem usługi Redis przy użyciu interfejsu wiersza polecenia usługi Redis, zobacz Używanie narzędzia wiersza polecenia Redis z usługą Azure Managed Redis.

  5. Skonfiguruj powiadomienia dotyczące przestrzeni kluczy przy użyciu polecenia CONFIG SET :

    CONFIG SET notify-keyspace-events KEA
    

    KEA to ciąg konfiguracji, który umożliwia powiadomienia dotyczące przestrzeni kluczy dla wszystkich kluczy i zdarzeń. Aby uzyskać więcej informacji na temat ciągów konfiguracji przestrzeni kluczy, zobacz dokumentację usługi Redis.

Konfigurowanie przykładowego kodu dla wyzwalaczy usługi Redis

  1. W programie VS Code dodaj plik o nazwie Common.cs do projektu. Ta klasa służy do analizowania serializowanej odpowiedzi JSON dla pubSubTrigger.

  2. Skopiuj i wklej następujący kod do pliku 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; }
        }
    }
    
  3. Dodaj plik o nazwie RedisTriggers.cs do projektu.

  4. Skopiuj i wklej następujący przykładowy kod do nowego pliku:

    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. W tym samouczku przedstawiono wiele sposobów wyzwalania działania usługi Redis:

    • PubSubTrigger, który jest wyzwalany po opublikowaniu działania w kanale Pub/Sub o nazwie pubsubTest.
    • KeyspaceTrigger, który jest oparty na wyzwalaczu Pub/Sub. Użyj go, aby wyszukać zmiany keyspaceTest klucza.
    • KeyeventTrigger, który jest również oparty na wyzwalaczu Pub/Sub. Użyj go, aby wyszukać dowolne użycie DEL polecenia.
    • ListTrigger, który wyszukuje zmiany na listTest liście.
    • StreamTrigger, który wyszukuje zmiany w strumieniu streamTest .

Nawiązywanie połączenia z pamięcią podręczną

  1. Aby wyzwolić działanie usługi Redis, należy przekazać parametry połączenia wystąpienia pamięci podręcznej. Te informacje są przechowywane w pliku local.settings.json , który został automatycznie utworzony w folderze. Zalecamy użycie pliku ustawień lokalnych jako najlepszych rozwiązań w zakresie zabezpieczeń.

  2. Aby nawiązać połączenie z pamięcią podręczną, dodaj sekcję ConnectionStrings w pliku local.settings.json, a następnie dodaj parametry połączenia przy użyciu parametru redisConnectionString . Sekcja powinna wyglądać następująco:

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

    Kod w Common.cs szuka tej wartości, gdy jest uruchomiony lokalnie:

    public const string connectionString = "redisConnectionString";
    

Ważne

Ten przykład jest uproszczony dla tego samouczka. W przypadku użycia w środowisku produkcyjnym zalecamy używanie usługi Azure Key Vault do przechowywania parametry połączenia informacji lub uwierzytelniania w wystąpieniu usługi Redis przy użyciu identyfikatora Entra firmy Microsoft.

Kompilowanie i uruchamianie kodu lokalnie

  1. Przejdź do karty Uruchamianie i debugowanie w programie VS Code i wybierz zieloną strzałkę, aby debugować kod lokalnie. Jeśli nie masz zainstalowanych podstawowych narzędzi usługi Azure Functions, zostanie wyświetlony monit o to. W takim przypadku należy ponownie uruchomić program VS Code po zainstalowaniu.

  2. Kod powinien zostać skompilować pomyślnie. Postęp można śledzić w danych wyjściowych terminalu.

  3. Aby przetestować funkcję wyzwalacza, spróbuj utworzyć i usunąć keyspaceTest klucz.

    Możesz użyć dowolnego sposobu, w jaki wolisz nawiązać połączenie z pamięcią podręczną. Łatwym sposobem jest użycie wbudowanego narzędzia konsolowego w portalu usługi Azure Cache for Redis. Przejdź do wystąpienia pamięci podręcznej w witrynie Azure Portal, a następnie wybierz pozycję Konsola , aby ją otworzyć.

    Ważne

    Narzędzie konsoli nie jest jeszcze dostępne dla usługi Azure Managed Redis. Zamiast tego rozważ użycie interfejsu wiersza polecenia redis lub narzędzia, takiego jak Redis Insight , aby uruchamiać polecenia bezpośrednio w wystąpieniu usługi Redis.

    Zrzut ekranu przedstawiający kod C-Sharp i parametry połączenia.

    Po otwarciu konsoli spróbuj wykonać następujące polecenia:

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

    Zrzut ekranu przedstawiający konsolę i niektóre polecenia i wyniki usługi Redis.

  4. Upewnij się, że wyzwalacze są aktywowane w terminalu.

    Zrzut ekranu edytora programu VS Code z uruchomionym kodem.

Dodawanie powiązań usługi Redis

Powiązania dodają usprawniony sposób odczytywania lub zapisywania danych przechowywanych w wystąpieniu usługi Redis. Aby zademonstrować korzyść z powiązań, dodamy dwie inne funkcje. Jeden jest nazywany SetGetter, który wyzwala za każdym razem, gdy klucz jest ustawiony i zwraca nową wartość klucza przy użyciu powiązania wejściowego. Druga jest nazywana StreamSetter, która wyzwala, gdy nowy element jest dodawany do strumienia myStream i używa powiązania wyjściowego do zapisania wartości true w kluczu newStreamEntry.

  1. Dodaj plik o nazwie RedisBindings.cs do projektu.

  2. Skopiuj i wklej następujący przykładowy kod do nowego pliku:

    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. Przejdź do karty Uruchamianie i debugowanie w programie VS Code i wybierz zieloną strzałkę, aby debugować kod lokalnie. Kod powinien zostać skompilować pomyślnie. Postęp można śledzić w danych wyjściowych terminalu.

  4. Aby przetestować funkcjonalność powiązania wejściowego, spróbuj ustawić nową wartość dla dowolnego klucza, na przykład przy użyciu polecenia SET hello world Powinno być widoczne, że SetGetter funkcja wyzwala i zwraca zaktualizowaną wartość.

  5. Aby przetestować funkcję powiązania danych wyjściowych, spróbuj dodać nowy element do strumienia myStream przy użyciu polecenia XADD myStream * item Order1. Zwróć uwagę, że StreamSetter funkcja wyzwolona we wpisie nowego strumienia i ustawiła wartość true na inny klucz o nazwie newStreamEntry. To set polecenie wyzwala SetGetter również funkcję .

Wdrażanie kodu w funkcji platformy Azure

  1. Utwórz nową funkcję platformy Azure:

    1. Wróć do karty Platformy Azure i rozwiń swoją subskrypcję.

    2. Kliknij prawym przyciskiem myszy pozycję Aplikacja funkcji, a następnie wybierz pozycję Utwórz aplikację funkcji na platformie Azure (zaawansowane).

    Zrzut ekranu przedstawiający opcje tworzenia aplikacji funkcji w programie VS Code.

  2. Zostanie wyświetlonych kilka monitów o podanie informacji w celu skonfigurowania nowej aplikacji funkcji:

    • Wprowadź unikatową nazwę.
    • Wybierz pozycję .NET 8 Isolated jako stos środowiska uruchomieniowego.
    • Wybierz pozycję Linux lub Windows (działa).
    • Wybierz istniejącą lub nową grupę zasobów do przechowywania aplikacji funkcji.
    • Wybierz ten sam region co wystąpienie pamięci podręcznej.
    • Wybierz pozycję Premium jako plan hostingu.
    • Utwórz nowy plan usługi aplikacja systemu Azure.
    • Wybierz warstwę cenową EP1 .
    • Wybierz istniejące konto magazynu lub utwórz nowe.
    • Utwórz nowy zasób usługi Application Insights. Za pomocą zasobu można potwierdzić, że wyzwalacz działa.

    Ważne

    Wyzwalacze usługi Redis nie są obecnie obsługiwane w funkcjach użycia.

  3. Poczekaj kilka minut na utworzenie nowej aplikacji funkcji. Zostanie ona wyświetlona w obszarze Aplikacja funkcji w ramach subskrypcji. Kliknij prawym przyciskiem myszy nową aplikację funkcji, a następnie wybierz polecenie Wdróż w aplikacji funkcji.

    Zrzut ekranu przedstawiający opcje wdrażania w aplikacji funkcji w programie VS Code.

  4. Aplikacja kompiluje i rozpoczyna wdrażanie. Możesz śledzić jego postęp w oknie danych wyjściowych.

Dodawanie informacji o parametry połączenia

Ważne

Ten przykład jest uproszczony dla tego samouczka. W przypadku użycia w środowisku produkcyjnym zalecamy używanie usługi Azure Key Vault do przechowywania parametry połączenia informacji lub uwierzytelniania w wystąpieniu usługi Redis przy użyciu identyfikatora Entra firmy Microsoft.

  1. W witrynie Azure Portal przejdź do nowej aplikacji funkcji i wybierz pozycję Zmienne środowiskowe z menu zasobów.

  2. W okienku roboczym przejdź do pozycji Ustawienia aplikacji.

  3. W polu Nazwa wprowadź ciąg redisConnectionString.

  4. W polu Wartość wprowadź parametry połączenia.

  5. Wybierz pozycję Zastosuj na stronie, aby potwierdzić.

  6. Przejdź do okienka Przegląd i wybierz pozycję Uruchom ponownie, aby ponownie uruchomić aplikację funkcji przy użyciu parametry połączenia informacji.

Testowanie wyzwalaczy i powiązań

  1. Po zakończeniu wdrażania i dodaniu parametry połączenia informacji otwórz aplikację funkcji w witrynie Azure Portal. Następnie wybierz pozycję Strumień dziennika z menu zasobów.

  2. Poczekaj na nawiązanie połączenia z usługą Log Analytics, a następnie użyj konsoli usługi Redis, aby aktywować dowolny z wyzwalaczy. Upewnij się, że wyzwalacze są rejestrowane tutaj.

    Zrzut ekranu przedstawiający strumień dziennika zasobu aplikacji funkcji w menu zasobów.

Czyszczenie zasobów

Jeśli chcesz nadal korzystać z zasobów utworzonych w tym artykule, zachowaj grupę zasobów.

W przeciwnym razie, jeśli skończysz z zasobami, możesz usunąć utworzoną grupę zasobów platformy Azure, aby uniknąć naliczania opłat.

Ważne

Usunięcie grupy zasobów jest nieodwracalne. Jeśli usuniesz grupę zasobów, wszystkie zawarte w niej zasoby zostaną trwale usunięte. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub grupy zasobów. Jeśli zasoby zostały utworzone w istniejącej grupie zasobów zawierającej zasoby, które chcesz zachować, możesz usunąć każdy zasób indywidualnie zamiast usuwać grupę zasobów.

Aby usunąć grupę zasobów

  1. Zaloguj się do witryny Azure Portal, a następnie wybierz pozycję Grupy zasobów.

  2. Wybierz grupę zasobów, którą chcesz usunąć.

    Jeśli istnieje wiele grup zasobów, użyj pola Filtruj dla dowolnego pola... wpisz nazwę grupy zasobów utworzonej dla tego artykułu. Wybierz grupę zasobów na liście wyników.

    Zrzut ekranu przedstawiający listę grup zasobów do usunięcia w okienku roboczym.

  3. Wybierz pozycję Usuń grupę zasobów.

  4. Zobaczysz prośbę o potwierdzenie usunięcia grupy zasobów. Wpisz nazwę grupy zasobów w celu potwierdzenia, a następnie wybierz pozycję Usuń.

    Zrzut ekranu przedstawiający formularz, który wymaga nazwy zasobu w celu potwierdzenia usunięcia.

Po krótkim czasie grupa zasobów i wszystkie jej zasoby zostaną usunięte.