Руководство. Начало работы с триггерами и привязками Функции Azure в Кэш Azure для Redis

В этом руководстве показано, как реализовать базовые триггеры с помощью Кэш Azure для Redis и Функции Azure. В нем описано использование Visual Studio Code (VS Code) для записи и развертывания функции Azure в C#.

В этом руководстве описано следующее:

  • Настройте необходимые средства.
  • Настройте и подключитесь к кэшу.
  • Создайте функцию Azure и разверните в нее код.
  • Подтвердите ведение журнала триггеров.

Необходимые компоненты

Настройка экземпляра Кэш Azure для Redis

Создайте новый экземпляр Кэш Azure для Redis с помощью портал Azure или предпочтительного средства CLI. В этом руководстве используется экземпляр Standard C1 , который является хорошей отправной точкой. Используйте краткое руководство по началу работы.

Снимок экрана: создание кэша в портал Azure.

Параметры по умолчанию должны быть достаточно. В этом руководстве используется общедоступная конечная точка для демонстрации, но мы рекомендуем использовать частную конечную точку для всех рабочих точек.

Создание кэша может занять несколько минут. Вы можете перейти к следующему разделу, пока процесс завершится.

Настройка Visual Studio Code

  1. Если вы еще не установили расширение Функции Azure для VS Code, найдите Функции Azure в меню EXTENSIONS и нажмите кнопку "Установить". Если у вас нет установленного расширения C#, установите его.

    Снимок экрана: необходимые расширения, установленные в VS Code.

  2. Перейдите на вкладку Azure . Войдите в учетную запись Azure.

  3. Чтобы сохранить создаваемый проект, создайте локальную папку на компьютере. В этом руководстве в качестве примера используется RedisAzureFunctionDemo .

  4. На вкладке Azure создайте приложение-функцию, выбрав значок молнии в правом верхнем углу вкладки "Рабочая область ".

  5. Выберите " Создать функцию...".

    Снимок экрана: значок добавления новой функции из VS Code.

  6. Выберите папку, созданную для запуска создания нового проекта Функции Azure. Вы получаете несколько запросов на экране. Выберите

    • C# в качестве языка.
    • .NET 8.0 Изолированные LTS в качестве среды выполнения .NET.
    • Пропустите сейчас в качестве шаблона проекта.

    Если у вас нет установленного пакета SDK для .NET Core, вам будет предложено сделать это.

    Внимание

    Для функций .NET рекомендуется использовать изолированную рабочую модель для модели в процессе . Сравнение внутрипроцессных и изолированных рабочих моделей см. в различиях между изолированной рабочей моделью и внутрипроцессной моделью для .NET на Функции Azure. В этом примере используется изолированная рабочая модель.

  7. Убедитесь, что новый проект появится на панели обозревателя .

    Снимок экрана: рабочая область в VS Code.

Установка необходимого пакета NuGet

Необходимо установить Microsoft.Azure.Functions.Worker.Extensions.Redisпакет NuGet для расширения Redis, который позволяет использовать уведомления пространства ключей Redis в качестве триггеров в Функции Azure.

Установите этот пакет, перейдя на вкладку терминала в VS Code и введя следующую команду:

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

Примечание.

Пакет Microsoft.Azure.Functions.Worker.Extensions.Redis используется для функций изолированного рабочего процесса .NET. Функции в процессе .NET и все остальные языки будут использовать Microsoft.Azure.WebJobs.Extensions.Redis пакет.

Настройка кэша

  1. Перейдите к созданному экземпляру Кэш Azure для Redis.

  2. Перейдите в кэш в портал Azure, а затем:

    1. В меню ресурсов выберите дополнительные параметры.

    2. Прокрутите вниз до поля событий notify-keyspace-events и введите KEA.

      KEA — это строка конфигурации, которая включает уведомления пространства ключей для всех ключей и событий. Дополнительные сведения о строках конфигурации пространства ключей см. в документации Redis.

    3. Нажмите кнопку "Сохранить " в верхней части окна.

    Снимок экрана: дополнительные параметры для Кэш Azure для Redis на портале.

  3. Найдите ключи Access в меню "Ресурс", а затем запишите или скопируйте содержимое поля "Основной строка подключения". Эта строка используется для подключения к кэшу.

    Снимок экрана: первичный строка подключения для ключа доступа.

Настройка примера кода для триггеров Redis

  1. В VS Code добавьте в проект файл с именем Common.cs . Этот класс используется для анализа сериализованного ответа JSON для PubSubTrigger.

  2. Скопируйте и вставьте следующий код в файл 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. Добавьте в проект файл с именем RedisTriggers.cs .

  4. Скопируйте и вставьте следующий пример кода в новый файл:

    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. В этом руководстве показано несколько способов активации действий Redis:

    • PubSubTrigger, который активируется при публикации действия в канале Pub/Sub с именем pubsubTest.
    • KeyspaceTrigger, который основан на триггере Pub/Sub. Используйте его для поиска изменений ключа keyspaceTest .
    • KeyeventTrigger, который также построен на триггере Pub/Sub. Используйте его для поиска любого использования DEL команды.
    • ListTrigger, который ищет изменения в списке listTest .
    • StreamTrigger, который ищет изменения в потоке streamTest .

Подключение в кэш

  1. Чтобы активировать действие Redis, необходимо передать строка подключения экземпляра кэша. Эти сведения хранятся в файле local.settings.json , который был автоматически создан в папке. Рекомендуется использовать локальный файл параметров в качестве рекомендации по обеспечению безопасности.

  2. Чтобы подключиться к кэшу, добавьте раздел в файл local.settings.json, а затем добавьте ConnectionStrings строка подключения с помощью redisConnectionString параметра. Этот пример должен выглядеть следующим образом:

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

    Код в Common.cs выглядит на это значение при локальном запуске:

    public const string connectionString = "redisConnectionString";
    

Внимание

Этот пример упрощен для руководства. Для использования в рабочей среде рекомендуется использовать Azure Key Vault для хранения строка подключения информации или проверки подлинности в экземпляре Redis с помощью EntraID.

Сборка и локальное выполнение кода

  1. Перейдите на вкладку "Запуск и отладка" в VS Code и выберите зеленую стрелку для локальной отладки кода. Если у вас нет Функции Azure основных средств, вам будет предложено сделать это. В этом случае необходимо перезапустить VS Code после установки.

  2. Код должен успешно выполнить сборку. Вы можете отслеживать ход выполнения в выходных данных терминала.

  3. Чтобы проверить функциональные возможности триггера, попробуйте создать и удалить keyspaceTest ключ.

    Вы можете использовать любой способ подключения к кэшу. Простой способ — использовать встроенное консольное средство на портале Кэш Azure для Redis. Перейдите к экземпляру кэша в портал Azure, а затем выберите консоль, чтобы открыть ее.

    Снимок экрана: код C-Sharp и строка подключения.

    После открытия консоли выполните следующие команды:

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

    Снимок экрана: консоль и некоторые команды Redis и результаты.

  4. Убедитесь, что триггеры активируются в терминале.

    Снимок экрана редактора VS Code с запущенным кодом.

Добавление привязок Redis

Привязки добавляют упрощенный способ чтения или записи данных, хранящихся в экземпляре Redis. Чтобы продемонстрировать преимущество привязок, мы добавим две другие функции. Один вызывается SetGetter, который активирует каждый раз, когда ключ задан и возвращает новое значение ключа с помощью входной привязки. Другой вызывается StreamSetter, который активируется при добавлении нового элемента в поток myStream и использует выходную привязку для записи значения true в ключ newStreamEntry.

  1. Добавьте в проект файл с именем RedisBindings.cs .

  2. Скопируйте и вставьте следующий пример кода в новый файл:

    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. Перейдите на вкладку "Запуск и отладка" в VS Code и выберите зеленую стрелку для локальной отладки кода. Код должен успешно выполнить сборку. Вы можете отслеживать ход выполнения в выходных данных терминала.

  4. Чтобы проверить функциональность входной привязки, попробуйте задать новое значение для любого ключа, например с помощью команды SET hello world , необходимо увидеть, что SetGetter функция активирует и возвращает обновленное значение.

  5. Чтобы проверить функциональность выходной привязки, попробуйте добавить новый элемент в поток myStream с помощью команды XADD myStream * item Order1. Обратите внимание, что StreamSetter функция активируется в новой записи потока и задает значение true другому ключу newStreamEntry. Эта set команда также активирует функцию SetGetter .

Развертывание кода в функции Azure

  1. Создайте новую функцию Azure:

    1. Вернитесь на вкладку Azure и разверните подписку.

    2. Щелкните правой кнопкой мыши приложение-функцию и выберите "Создать приложение-функцию" в Azure (дополнительно).

    Снимок экрана: выбор для создания приложения-функции в VS Code.

  2. Вы получите несколько запросов на настройку нового приложения-функции:

    • Введите уникальное имя.
    • Выберите .NET 8 Изолированный в качестве стека среды выполнения.
    • Выберите Linux или Windows (работает).
    • Выберите существующую или новую группу ресурсов для хранения приложения-функции.
    • Выберите тот же регион, что и экземпляр кэша.
    • Выберите "Премиум" в качестве плана размещения.
    • Создайте новый план обслуживания приложение Azure.
    • Выберите ценовую категорию EP1 .
    • Выберите существующую учетную запись хранения или создайте новую.
    • Создайте новый ресурс Application Insights. Ресурс используется для подтверждения работы триггера.

    Внимание

    Триггеры Redis в настоящее время не поддерживаются в функциях потребления.

  3. Подождите несколько минут, пока будет создано новое приложение-функция. Оно отображается в разделе "Приложение-функция " в подписке. Щелкните правой кнопкой мыши новое приложение-функцию и выберите " Развернуть в приложении-функции".

    Снимок экрана: выбор для развертывания в приложении-функции в VS Code.

  4. Приложение создает и начинает развертывание. Ход выполнения можно отслеживать в окне вывода.

Добавление сведений о строка подключения

  1. В портал Azure перейдите в новое приложение-функцию и выберите переменные среды в меню ресурсов.

  2. На рабочей панели перейдите к параметрам приложения.

  3. В поле "Имя" введите redis Подключение ionString.

  4. Введите значение строка подключения.

  5. Нажмите кнопку "Применить" на странице, чтобы подтвердить.

  6. Перейдите в область обзора и выберите "Перезапустить", чтобы перезагрузить приложение функций с помощью строка подключения сведений.

Тестирование триггеров и привязок

  1. После завершения развертывания и добавления сведений строка подключения откройте приложение-функцию в портал Azure. Затем выберите Log Stream в меню ресурсов.

  2. Дождитесь подключения Log Analytics, а затем используйте консоль Redis для активации любого из триггеров. Убедитесь, что триггеры регистрируются здесь.

    Снимок экрана: поток журнала для ресурса приложения-функции в меню ресурсов.

Очистка ресурсов

Если вы хотите продолжить использовать ресурсы, созданные в этой статье, сохраните группу ресурсов.

В противном случае, если вы закончите работу с ресурсами, можно удалить созданную группу ресурсов Azure, чтобы избежать расходов.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали ресурсы внутри существующей группы ресурсов, содержащей ресурсы, которые необходимо сохранить, можно удалить каждый ресурс по отдельности, а не удалить группу ресурсов.

Удаление группы ресурсов

  1. Войдите на портал Azure и щелкните Группы ресурсов.

  2. Выберите группу ресурсов, которую нужно удалить.

    Если существует множество групп ресурсов, используйте фильтр для любого поля... введите имя группы ресурсов, созданной для этой статьи. Выберите группу ресурсов в списке результатов.

    Снимок экрана: список групп ресурсов для удаления в рабочей области.

  3. Выберите команду Удалить группу ресурсов.

  4. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и щелкните Удалить.

    Снимок экрана: форма, для которой требуется имя ресурса для подтверждения удаления.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.