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

В этой статье показано, как сделать следующее:

  • создать домен в Сетке событий;
  • Подписка на разделы "Сетка событий"
  • Отобразить ключи
  • опубликовать события в домен.

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

Создание Домена событий

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

az eventgrid domain create \
  -g <my-resource-group> \
  --name <my-domain-name> \
  -l <location>

После успешного создания возвращаются следующие значения:

{
  "endpoint": "https://<my-domain-name>.westus2-1.eventgrid.azure.net/api/events",
  "id": "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>",
  "inputSchema": "EventGridSchema",
  "inputSchemaMapping": null,
  "location": "westus2",
  "name": "<my-domain-name>",
  "provisioningState": "Succeeded",
  "resourceGroup": "<my-resource-group>",
  "tags": null,
  "type": "Microsoft.EventGrid/domains"
}

Запишите значения endpoint и id, так как они необходимы для управления доменом и публикации событий.

Управление доступом к разделам

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

Сетка событий имеет две встроенные роли, которые можно использовать для назначения определенным пользователям доступа к различным разделам в пределах домена. Это роль EventGrid EventSubscription Contributor (Preview), которая позволяет создавать и удалять подписки, и роль EventGrid EventSubscription Reader (Preview), которая позволяет только перечислять подписки на события.

Следующая команда интерфейса командной строки Azure ограничивает alice@contoso.com созданием и удалением подписок на события только в разделе demotopic1:

az role assignment create \
  --assignee alice@contoso.com \
  --role "EventGrid EventSubscription Contributor (Preview)" \
  --scope /subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1

Дополнительные сведения об управлении доступом для операций службы "Сетка событий" см. в статье Сетка событий: безопасность и проверка подлинности.

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

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

Подписка на раздел в домене совпадает с подпиской на любой другой ресурс Azure. Для идентификатора исходного ресурса укажите идентификатор домена событий, возвращенный при создании домена ранее. Чтобы указать раздел, на который вы хотите подписаться, добавьте /topics/<my-topic> в конец идентификатора исходного ресурса. Чтобы создать подписку на события в области домена, которая принимает все события в домене, укажите идентификатор домена событий без указания каких-либо разделов.

Как правило, пользователь, которому вы предоставили доступ в предыдущем разделе, создаст подписку. Для упрощения этой статьи создайте подписку.

az eventgrid event-subscription create \
  --name <event-subscription> \
  --source-resource-id "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1" \
  --endpoint https://contoso.azurewebsites.net/api/updates

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

Button to deploy the Resource Manager template to Azure.

Разрешения, заданные для раздела, хранятся в идентификаторе Microsoft Entra и должны быть удалены явным образом. Удаление подписки на события не отменяет пользователям доступ к созданию подписок на события, если у них есть доступ на запись в разделе.

Публикация событий в домене сетки событий

Публикация событий в домен совпадает с публикацией в настраиваемый раздел. Тем не менее вместо публикации в пользовательском разделе публикуйте все события на конечную точку домена. В данных события JSON укажите раздел, к которому вы хотите добавить события. Следующий массив событий приведет к публикации события с идентификатором "id": "1111" в раздел demotopic1, а событие с идентификатором "id": "2222" будет отправлено в раздел demotopic2:

[{
  "topic": "demotopic1",
  "id": "1111",
  "eventType": "maintenanceRequested",
  "subject": "myapp/vehicles/diggers",
  "eventTime": "2018-10-30T21:03:07+00:00",
  "data": {
    "make": "Contoso",
    "model": "Small Digger"
  },
  "dataVersion": "1.0"
},
{
  "topic": "demotopic2",
  "id": "2222",
  "eventType": "maintenanceCompleted",
  "subject": "myapp/vehicles/tractors",
  "eventTime": "2018-10-30T21:04:12+00:00",
  "data": {
    "make": "Contoso",
    "model": "Big Tractor"
  },
  "dataVersion": "1.0"
}]

Чтобы получить конечную точку домена с помощью Azure CLI, выполните следующую команду:

az eventgrid domain show \
  -g <my-resource-group> \
  -n <my-domain>

Чтобы получить ключи, которые будет использовать домен, выполните команду ниже:

az eventgrid domain key list \
  -g <my-resource-group> \
  -n <my-domain>

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

Примечание.

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

Поиск списков разделов или подписок

Для поиска и администрирования большого числа разделов или подписок API-интерфейсы Сетки событий поддерживают вывод списков и разбивку на страницы.

Использование интерфейса командной строки

Например, следующая команда выводит все разделы с именем, содержащим mytopic.

az eventgrid topic list --odata-query "contains(name, 'mytopic')"

Дополнительные сведения об этой команде см. в разделе az eventgrid topic list.

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

  • Общие понятия, касающиеся доменов событий, и сведения об их эффективности см. в этой статье.