Доставка событий в Центры событий Azure с помощью разделов пространства имен — 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 
    

Создание ресурса Центров событий

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

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

    eventHubsNamespace="<your-event-hubs-namespace-name>"
    
  2. Создание пространства имен Центров событий.

    az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --location $location  
    
  3. Объявите переменную для хранения имени концентратора событий.

    eventHubsEventHub="<your-event-hub-name>"
    
  4. Выполните следующую команду, чтобы создать концентратор событий в пространстве имен.

    az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub 
    

Доставка событий в концентратор событий с помощью управляемого удостоверения

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

  1. Включите управляемое удостоверение, назначаемое системой или назначаемое пользователем: пространства имен. Перейдите к следующему разделу, чтобы узнать, как включить управляемое удостоверение с помощью Azure CLI.
  2. Добавьте удостоверение в роль отправителя данных Центры событий Azure в пространстве имен Центров событий, перейдите к следующему разделу, чтобы узнать, как добавить назначение роли.
  3. Установите флажок Разрешить доверенным службам Майкрософт обходить этот параметр брандмауэра в вашем пространстве имен концентраторов событий.
  4. Настройте подписку на события, использующую центр событий в качестве конечной точки для управляемого удостоверения, назначаемого пользователем или системой.

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

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

az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}

Добавление назначения ролей в Центры событий для управляемого удостоверения сетки событий

  1. Получение идентификатора субъекта-участника управляемого удостоверения в службе "Сетка событий".

    principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
    
  2. Получение идентификатора ресурса концентратора событий Центров событий.

    eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
    
  3. Добавьте назначение ролей в Центры событий для управляемого удостоверения системы сетки событий.

    az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
    

Создание подписки на событие

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

event_subscription="<your_event_subscription_name>"
az resource create --api-version 2023-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventHubResourceId\"}}}}}}"

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

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

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

  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, обновите страницу и убедитесь, что счетчик входящих сообщений на диаграмме указывает, что событие получено.

    Снимок экрана: страница концентратора событий с диаграммой, показывающей, что событие получено.

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

В этой статье вы создали и настроили пространство имен сетки событий и ресурсы Центров событий. Пошаговые инструкции по получению событий из концентратора событий см. в следующих руководствах: