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

Пользовательская тема Event Grid — это конечная точка, куда ваши приложения отправляют свои события, чтобы Event Grid мог направлять эти события заинтересованным подписчикам. В этой статье показано, как публиковать события в пользовательскую тему с помощью ключей доступа, которые аутентифицируют ваши запросы без настройки Microsoft Entra ID. Вы получаете конечную точку темы и ключ доступа, форматируете полезную нагрузку события, отправляете примерное событие и просматриваете ответ.

Соглашение об уровне обслуживания (SLA) применяется только к постам, соответствующим ожидаемому формату.

Необходимые условия

Примечание.

Аутентификация Microsoft Entra обеспечивает лучшую поддержку аутентификации, чем аутентификация с помощью ключей доступа или токенов с использованием общего доступа (SAS). Используя аутентификацию Microsoft Entra, провайдер идентификации Microsoft Entra проверяет личность, поэтому вы не обрабатываете ключи в коде. Вы также получаете выгоду от функций безопасности, встроенных в платформа удостоверений Майкрософт, таких как Conditional Access, которые помогают повысить безопасность вашего приложения. Дополнительные сведения см. в разделе "Проверка подлинности клиентов публикации с помощью идентификатора Microsoft Entra".

Получение конечной точки темы

Чтобы опубликовать события в пользовательскую тему, отправьте запрос HTTP POST с помощью следующего формата URI: https://<topic-endpoint>?api-version=2018-01-01. Например, допустимый URI — https://exampletopic.westus2-1.eventgrid.azure.net/api/events?api-version=2018-01-01. Чтобы получить конечную точку для пользовательской темы, используйте портал Azure, Azure CLI или Azure PowerShell.

Найдите конечную точку темы на вкладке Обзор страницы Event Grid Topic в портале Azure.

Снимок экрана: страница раздела

Получение ключа доступа

Добавьте в запрос значение заголовка aeg-sas-key, содержащее ключ для аутентификации. Например, допустимое значение заголовка — aeg-sas-key: xxxxxxxxxxxxxxxxxxxxxxx. Чтобы получить ключ для пользовательской темы, используйте Azure portal, Azure CLI или Azure PowerShell.

Чтобы получить ключ доступа для пользовательской темы, выберите вкладку «Ключи доступа» на странице «Тема сетки событий» в портале Azure.

Снимок экрана, на котором показана вкладка

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

Форматируйте каждое событие как JSON-объект. Поля верхнего уровня совпадают со стандартными событиями, определяемыми ресурсами, а свойство data содержит свойства, уникальные для вашей пользовательской темы. Как издатель, вы определяете содержимое data объекта. Для описания каждого свойства см. Сетка событий Azure event schema.

[
  {
    "id": string,
    "eventType": string,
    "subject": string,
    "eventTime": string-in-date-time-format,
    "data":{
      object-unique-to-each-publisher
    },
    "dataVersion": string
  }
]

Имейте в виду эти ограничения по размеру при сборке полезной нагрузки:

  • Массив событий может иметь общий размер до 1 МБ.
  • Максимальный размер для одного события — 1 МБ. За события размером более 64 КБ взимается плата блоками по 64 КБ.
  • Одна партия может содержать максимум 5 000 событий.

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

[{
  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2017-08-10T21:03:07+00:00",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0"
}]

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

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

  1. В портал Azure запустите Cloud Shell.

  2. В Cloud Shell выполните команды из Azure PowerShell или Azure CLI в сеансе Bash или PowerShell .

    Снимок экрана, на котором показана Cloud Shell в портале Azure.

Просмотр ответа

После того как вы отправите сообщение в конечную точку темы, вы получите ответ. Ответ — это стандартный код ответа HTTP. Ниже приведены некоторые распространенные ответы:

Результат Ответ
Успех 200 OK (Запрос выполнен успешно)
Неправильный формат данных события 400 — недопустимый запрос
Недопустимый ключ доступа 401 — не авторизовано
Неправильная конечная точка 404 Не найдено
Массив или событие превышает допустимый размер 413 Полезные данные слишком велики

В случае ошибок тело сообщения имеет следующий формат:

{
    "error": {
        "code": "<HTTP status code>",
        "message": "<description>",
        "details": [{
            "code": "<HTTP status code>",
            "message": "<description>"
    }]
  }
}