Прочитать на английском

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


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

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

Примечание

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

Если у вас нет аккаунта 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, последняя версия уже установлена.

Включить поставщик ресурсов Event Grid

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

    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

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

  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" с помощью разделов пространства имен.