Краткое руководство. Маршрутизация пользовательских событий в функцию Azure с помощью сетки событий

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

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Создание приложения-функции Azure

  1. Войдите на портал Azure.

  2. В меню навигации слева выберите "Все службы".

  3. Выберите "Вычисления " в списке категорий.

  4. Наведите указатель мыши на приложение-функцию и выберите .+

    Снимок экрана: выбор ссылки

  5. На странице "Основы" мастера создания приложения-функции выполните следующие действия:

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

    2. Создайте новую группу ресурсов или выберите имеющуюся.

    3. Укажите имя приложения-функции.

    4. Выберите .NET для стека среды выполнения.

    5. Для версии выберите 6 (LTS), внутрипроцессную модель.

    6. Выберите ближайший к вам регион .

    7. Нажмите кнопку Далее: служба хранилища в нижней части страницы.

      Снимок экрана: вкладка

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

    Снимок экрана: вкладка служба хранилища страницы

  7. На странице "Просмотр и создание" проверьте параметры и нажмите кнопку "Создать" в нижней части страницы, чтобы создать приложение-функцию.

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

Создание функции

Перед подпиской на пользовательский раздел необходимо создать функцию для обработки событий.

  1. На странице приложения-функции в разделе "Создать в портал Azure" выберите "Создать функцию" в правой области.

    Снимок экрана: выбор ссылки

  2. На странице Создать функцию выполните следующие действия.

    1. В разделе "Выбор шаблона" в поле фильтра или поиска введите триггер Сетка событий Azure.

    2. Выберите шаблон триггера Сетка событий Azure в списке шаблонов.

    3. Выберите Далее в нижней части страницы.

      Снимок экрана: выбор триггера сетки событий.

    4. На странице сведений о шаблоне введите имя функции. В нашем примере это HandleEventsFunc.

    5. Нажмите кнопку создания.

      Снимок экрана: страница сведений о шаблоне.

  3. На странице "Функция" для HandleEventsFunc выберите Code + Test в меню навигации слева, замените код следующим кодом и нажмите кнопку "Сохранить" на панели команд.

    #r "Azure.Messaging.EventGrid"
    #r "System.Memory.Data"
    
    using Azure.Messaging.EventGrid;
    using System;
    
    public static void Run(EventGridEvent eventGridEvent, ILogger log)
    {
        log.LogInformation(eventGridEvent.Data.ToString());
    }        
    

    Иллюстрация: меню

  4. Выберите "Монитор " в меню слева и перейдите на вкладку "Журналы ". Сохраните это окно или вкладку браузера, чтобы просмотреть полученные сведения о событии.

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

Создание пользовательской темы

Раздел сетки событий содержит определяемую пользователем конечную точку, в которой можно размещать свои события.

  1. На новой вкладке окна веб-браузера войдите в портал Azure.

  2. В строке поиска в разделе найдите разделы сетки событий и выберите разделы сетки событий.

    Изображение, показывающее выбор разделов сетки событий.

  3. На странице "Разделы сетки событий" нажмите кнопку "+ Создать" на панели команд.

    Снимок экрана: кнопка

  4. На странице Создать раздел выполните следующие действия:

    1. Выберите свою подписку Azure.

    2. Выберите группу ресурсов, использованную для предыдущих шагов.

    3. Укажите уникальное имя для пользовательского раздела. Имя раздела должно быть уникальным, так как оно представлено записью службы доменных имен (DNS). Не используйте имя, указанное на изображении. Вместо этого создайте собственное имя длиной от 3 до 50 символов, которое может содержать только буквы (a–z, A–Z), цифры (0–9) и дефисы (-).

    4. Выберите расположение для раздела "Сетка событий".

    5. Выберите Review + create (Просмотреть и создать).

      Снимок экрана: страница

    6. На странице Проверить и создать проверьте параметры и нажмите кнопку Создать.

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

    Иллюстрация: домашняя страница для пользовательского раздела Сетки событий

Подписка на события пользовательского раздела

Вы подписываетесь на раздел "Сетка событий", чтобы сообщить сетке событий, какие события нужно отслеживать и куда отправлять события.

  1. Теперь на странице Раздел сетки событий выберите для пользовательского раздела + Подписка на события на панели инструментов.

    Иллюстрация: пункт

  2. На странице Создать подписку на событие выполните следующие действия:

    1. Укажите имя для подписки на событие.

    2. Выберите Функции Azure в качестве типа конечной точки.

    3. Выберите " Настроить конечную точку".

      Иллюстрация: значения подписки на события

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

      Иллюстрация: страница

    5. Этот шаг не является обязательным, но рекомендуется для рабочих сценариев. На странице Создать подписку на события перейдите на вкладку Дополнительные параметры и задайте значения для параметров Максимальное число событий на пакет и Предпочтительный размер пакета в килобайтах.

      Пакетная обработка может обеспечить высокую пропускную способность. Для параметра Максимальное число событий на пакет задайте максимальное количество событий, которые подписка будет включать в пакет. Параметр предпочтительного размера пакета задает нужное верхнее ограничение размера пакета в килобайтах, но допускает превышение, если одно событие больше этого порогового значения.

      Иллюстрация: параметры пакетной обработки для подписки на события

    6. Вернитесь на страницу Создать подписку на события и выберите Создать.

Отправка события в тему

Теперь необходимо активировать событие, чтобы увидеть, как Сетка событий Azure распределяет сообщение к вашей конечной точке. Отправьте тестовое событие в пользовательский раздел с помощью PowerShell или Azure CLI. Как правило, приложение или служба Azure отправит данные события.

В первом примере используется Azure CLI. Он возвращает URL-адрес, ключ пользовательского раздела и пример данных события. Используйте имя пользовательского раздела для <topic name>. Будет создан пример данных событий. Элемент data JSON отображает полезные данные события. Любое значение JSON с правильным форматом может быть в этом поле. Кроме того, можно использовать поле темы для дополнительной маршрутизации и фильтрации. CURL — это служебная программа, которая отправляет HTTP-запросы.

Azure CLI

  1. На портале Azure выберите Cloud Shell. Выберите Bash в левом верхнем углу окна Cloud Shell.

    Иллюстрация: окно Cloud Shell — Bash

  2. topicname Задайте переменные, resourcegroupname которые будут использоваться в командах.

    Замените TOPICNAME именем раздела "Сетка событий".

    topicname="TOPICNAME"
    

    Замените RESOURCEGROUPNAME именем группы ресурсов Azure, содержащей раздел "Сетка событий".

    resourcegroupname="RESOURCEGROUPNAME"
    
  3. Выполните следующую команду, чтобы получить конечную точку раздела: после копирования и вставки команды обновите имя раздела и имя группы ресурсов перед выполнением команды.

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  4. Выполните следующую команду, чтобы получить ключ для пользовательского раздела: после копирования и вставки команды обновите имя раздела и имя группы ресурсов перед выполнением команды.

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. Скопируйте следующую инструкцию с определением события и нажмите клавишу ВВОД.

    event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
    
  6. Выполните следующую команду Curl, чтобы отправить событие:

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    

Azure PowerShell

Во втором примере для выполнения аналогичных действий используется PowerShell.

  1. На портале Azure выберите Cloud Shell (или перейдите по адресу https://shell.azure.com/). Выберите PowerShell в левом верхнем углу окна Cloud Shell. Пример того, как выглядит окно Cloud Shell, приведен в разделе "Инфраструктура CLI Azure".

  2. Задайте следующие переменные. После копирования и вставки команды перед ее выполнением измените соответствующим образом имя раздела и имя группы ресурсов.

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  3. Выполните следующую команду, чтобы получить конечную точку и ключи для раздела:

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  4. Подготовьте событие. Скопируйте и выполните инструкции в окне Cloud Shell.

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert event body from Hashtable to JSON Object
    #Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  5. Используйте командлет Invoke-WebRequest для отправки события.

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    

Убедитесь, что функция получила событие.

Вы активировали событие, а служба "Сетка событий" отправила сообщение в конечную точку, настроенную вами при оформлении подписки.

  1. На странице "Монитор" для функции Azure отображается вызов.

    Снимок экрана: вкладка

  2. Выберите вызов, чтобы просмотреть сведения.

    Снимок экрана: сведения о вызове.

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

    Иллюстрация: представление монитора функции Azure с журналом

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

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

  1. Выберите Группы ресурсов в меню слева. Если этот параметр не отображается, выберите Все службы в меню слева и выберите Группы ресурсов.

  2. Выберите группу ресурсов, чтобы открыть страницу Группа ресурсов.

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

  4. Подтвердите удаление. Для этого введите имя группы ресурсов и выберите Удалить.

    Группы ресурсов

    Другая группа ресурсов, показанная на рисунке, создана и используется в окне Cloud Shell. Удалите ее, если вы не планируете использовать окно Cloud Shell в дальнейшем.

Следующие шаги

Теперь, когда вы знаете, как создавать темы и подписки на события, ознакомьтесь с дополнительными сведениями о сетке событий, которые могут помочь вам:

Чтобы узнать, как публиковать события в Сетке событий и получать события из нее с использованием разных языков программирования, ознакомьтесь с приведенными ниже примерами.