Поделиться через


Доставка событий в веб-перехватчики с помощью разделов пространства имен — Azure CLI (предварительная версия)

В этой статье приводятся пошаговые инструкции по публикации событий для Сетка событий Azure в формате JSON CloudEvents и доставке этих событий с помощью модели принудительной доставки. Чтобы быть конкретным, вы используете Azure CLI и Curl для публикации событий в разделе пространства имен в Сетке событий и отправки этих событий из подписки на событие в назначение обработчика веб-перехватчика. Дополнительные сведения о модели доставки push-уведомлений см. в обзоре доставки push-уведомлений.

Примечание.

Расширение Сетки событий Azure CLI пока не поддерживает пространства имен и какие-либо ресурсы, содержащиеся в ней. Мы будем использовать ресурс Azure CLI для создания ресурсов Сетки событий.

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

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

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, войдите в Azure CLI с помощью az login команды. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этой статьей требуется Azure CLI версии 2.0.70 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

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

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

    az provider register --namespace Microsoft.EventGrid
    
  2. Регистрация может занять некоторое время. Чтобы проверка состояние, выполните следующую команду:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Когда состояние registrationState изменится на Registered, вы сможете продолжить работу.

Создание или изменение группы ресурсов

Создайте группу ресурсов Azure с помощью команды az group create. Эта группа ресурсов используется для хранения всех ресурсов, созданных в этой статье.

Ниже приведены общие действия по использованию Cloud Shell для выполнения команд.

  • Выберите Open Cloud Shell, чтобы увидеть окно Azure Cloud Shell на правой панели.
  • Скопируйте команду и вставьте ее в окно Azure Cloud Shell.
  • Нажмите клавишу ВВОД, чтобы выполнить эту команду.
  1. Объявите переменную для хранения имени группы ресурсов Azure. Укажите имя группы ресурсов, заменив <your-resource-group-name> нужное значение.

    resource_group="<your-resource-group-name>"
    
    location="<your-resource-group-location>"
    
  2. Создать группу ресурсов. Измените расположение по мере соответствия.

    az group create --name $resource_group --location $location
    

Создание пространства имен

Пространство имен Сетки событий предоставляет определяемую пользователем конечную точку, в которую вы публикуете события. В следующем примере создается пространство имен в группе ресурсов с помощью Bash в Azure Cloud Shell. Имя пространства имен должно быть уникальным, так как это часть записи системы доменных имен (DNS). Имя пространства имен должно соответствовать следующим правилам:

  • Он должен находиться в диапазоне от 3 до 50 символов.
  • Он должен быть региональным уникальным.
  • Допустимы только символы a-z, A-Z, 0-9 и -
  • Он не должен начинаться с зарезервированных префиксов ключевого слова, таких как Microsoft, Systemили EventGrid.
  1. Объявите переменную для хранения имени пространства имен Сетки событий. Укажите имя пространства имен, заменив <your-namespace-name> нужное значение.

    namespace="<your-namespace-name>"
    
  2. Создайте пространство имен. Возможно, потребуется изменить расположение, в котором оно развернуто.

    az eventgrid namespace create -g $resource_group -n $namespace -l $location
    

Создание раздела пространства имен

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

  1. Объявите переменную для хранения имени раздела пространства имен. Укажите имя раздела пространства имен, заменив <your-topic-name> нужное значение.

    topic="<your-topic-name>"
    
  2. Создайте раздел пространства имен:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

Создание конечной точки сообщения

Перед подпиской на раздел пространства имен создадим конечную точку для сообщения о событии. Обычно конечная точка выполняет действия на основе данных событий. Чтобы упростить это краткое руководство, вы развернете предварительно созданное веб-приложение , отображающее сообщения о событиях. Развернутое решение содержит план службы приложений, веб-приложение службы приложений и исходный код из GitHub.

  1. Скопируйте следующую команду, укажите имя веб-приложения (пример средства просмотра сетки событий) и нажмите клавишу ВВОД, чтобы выполнить команду. Замените <your-site-name> уникальным именем для вашего веб-приложения. Имя веб-приложения должно быть уникальным, так как оно включается в запись DNS.

    sitename="<your-site-name>"
    
  2. az deployment group create Запустите веб-приложение, используя шаблон Azure Resource Manager.

    az deployment group create \
      --resource-group $resource_group \
      --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
      --parameters siteName=$sitename hostingPlanName=viewerhost
    

Завершение развертывания может занять несколько минут. Когда развертывание успешно завершится, откройте веб-приложение и убедитесь, что оно работает. В веб-браузере перейдите к: https://<your-site-name>.azurewebsites.net Вы увидите сайт, на котором сейчас не отображаются никакие сообщения.

Доставка событий в веб-перехватчик Сетка событий Azure просмотра

Создайте подписку на событие отправки в пространство имен с помощью веб-перехватчика для средства просмотра Сетка событий Azure.

  1. Определите переменную для хранения имени подписки на событие.

    event_subscription="<your_event_subscription_name>"
    
  2. Замените EVENTGRIDWEBSITENAME именем веб-сайта средства просмотра сетки событий. Например: contosoegridviewer.

    az resource create --api-version 2024-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"eventDeliverySchema\": \"CloudEventSchemaV1_0\",\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"destination\":{\"endpointType\":\"WebHook\",\"properties\":{\"endpointUrl\":\"https:\/\/$sitename.azurewebsites.net\/api/updates\"}}}}}"
    

Отправка событий в раздел

Теперь отправьте пример события в раздел пространства имен, выполнив действия, описанные в этом разделе.

Вывод списка ключей доступа к пространству имен

  1. Получите ключи доступа, связанные с созданным пространством имен. Вы используете один из них для проверки подлинности при публикации событий. Чтобы вывести список ключей, сначала потребуется полный идентификатор ресурса пространства имен. Получите его, выполнив следующую команду:

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. Получите первый ключ из пространства имен:

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

Публикация события

  1. Получите имя узла пространства имен. Он используется для создания конечной точки пространства имен HTTP, в которую отправляются события. Следующие операции были впервые доступны в версии 2023-06-01-previewAPI.

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. Создайте пример события, соответствующего требованиям CloudEvents :

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    Элемент data — полезные данные события. Любое значение JSON с правильным форматом может быть в этом поле. Дополнительные сведения о свойствах (также известных как атрибуты контекста), которые могут идти в событии, см . в спецификациях CloudEvents .

  3. Используйте CURL для отправки события в раздел. CURL — это служебная программа, которая отправляет HTTP-запросы.

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

Убедитесь, что средство просмотра Сетка событий Azure получило событие

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

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

В этом кратком руководстве вы использовали веб-перехватчик в качестве обработчика событий. Краткое руководство по использованию концентратора событий Azure в качестве обработчика событий см. в статье "Доставка событий в Центры событий Azure с помощью разделов пространства имен".