Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве показано, как отправлять события в концентратор событий и получать события из него с помощью пакета Python azure-eventhub.
Предварительные требования
Если вы впервые используете Центры событий Azure, ознакомьтесь с общими сведениями о Центрах событий, прежде чем приступить к работе с этим руководством.
Для завершения данного быстрого старта необходимо следующее:
- Подписка Microsoft Azure. Чтобы использовать службы Azure, в том числе Центры событий Azure, потребуется действующая подписка. Если у вас нет существующей учетной записи Azure, зарегистрируйтесь для получения бесплатной пробной версии.
- Python 3.8 или более поздней версии с установленным и обновленным pip.
- Visual Studio Code (рекомендовано) или любая другая интегрированная среда разработки (IDE).
- Создайте пространство имен Центров событий и концентратор событий. Первым шагом является использование портал Azure для создания пространства имен Центров событий и получения учетных данных управления, необходимых приложению для взаимодействия с концентратором событий. Чтобы создать пространство имен и концентратор событий, выполните инструкции из этой статьи.
Установка пакетов для отправки событий
Чтобы установить пакеты Python для Центров событий, откройте командную строку с python в пути. Измените каталог на папку, в которой вы хотите сохранить примеры.
pip install azure-eventhub
pip install azure-identity
pip install aiohttp
Проверка подлинности приложения в Azure
В этом кратком руководстве показаны два способа подключения к Центру событий Azure: без использования пароля и с помощью строки подключения. Первый вариант показывает, как использовать объект безопасности в Microsoft Entra ID и управлении доступом на основе ролей (RBAC) для подключения к пространству имен Event Hubs. Вам не нужно беспокоиться о наличии жестко закодированных строк подключения в коде, в файле конфигурации или в безопасном хранилище, например, Azure Key Vault. Второй вариант показывает, как использовать строку подключения для связи с пространством имен Event Hubs. Если вы не знакомы с Azure, вы можете найти вариант строки подключения более простым. Мы рекомендуем использовать параметр без пароля в реальных приложениях и рабочих средах. Дополнительные сведения см. в разделе "Проверка подлинности и авторизация". Дополнительные сведения о проверке подлинности без пароля можно найти на обзорной странице.
Назначение ролей пользователю Microsoft Entra
При локальной разработке убедитесь, что учетная запись пользователя, которая подключается к Центры событий Azure имеет правильные разрешения. Чтобы отправлять и получать сообщения, вам потребуется роль владельца данных Azure Event Hubs. Чтобы назначить себе эту роль, вам потребуется роль администратора доступа пользователей или другая роль, которая включает Microsoft.Authorization/roleAssignments/write
действие. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Узнайте больше о доступных областях назначения ролей на странице обзор области.
Следующий пример назначает роль Azure Event Hubs Data Owner
учетной записи вашего пользователя, предоставляющую полный доступ к ресурсам событийных концентраторов Azure. В реальном сценарии следуйте принципу наименьших привилегий , чтобы предоставить пользователям только минимальные разрешения, необходимые для более безопасной рабочей среды.
Встроенные роли Azure для Центров событий Azure
Для Центров событий Azure управление пространствами имен и всеми связанными ресурсами с помощью портала Azure и API управления ресурсами Azure уже защищено с помощью модели управления доступом на основе ролей Azure (RBAC). Azure предоставляет следующие встроенные роли Azure для авторизации доступа к пространству имен Event Hubs:
- Владелец данных для Центров событий Azure: предоставляет доступ к пространству имен Центров событий и его сущностям (очереди, темы, подписки и фильтры)
- Отправитель данных Azure Event Hubs: используйте эту роль для предоставления отправителю доступа к пространству имен Центров событий и его сущностям.
- Получатель данных в Azure Event Hubs: Используйте эту роль, чтобы предоставить получателю доступ к пространству имен центров событий Event Hubs и его сущностям.
Если вы хотите создать пользовательскую роль, см. раздел "Права", необходимые для операций Центров событий.
Внимание
В большинстве случаев для распространения назначения ролей в Azure потребуется несколько минут. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
В портале Azure находите ваше пространство имен Event Hubs с помощью основной строки поиска или навигации слева.
На странице обзора выберите элемент управления доступом (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите
Azure Event Hubs Data Owner
и выберите соответствующий результат. Теперь щелкните Далее.В разделе Назначение доступа для выберите Пользователь, группа или служебный принципал и + Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно это ваш адрес электронной почты user@domain), а затем выберите пункт Select в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Отправка событий
В этом разделе описано, как создать скрипт Python для отправки событий в созданный ранее концентратор событий.
Откройте предпочитаемый редактор Python, например Visual Studio Code.
Создайте сценарий с именем send.py. Этот сценарий отправляет пакет событий в концентратор событий, созданный ранее.
Скопируйте приведенный ниже код в файл send.py.
В коде используйте реальные значения для замены следующих заполнителей:
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE
EVENT_HUB_NAME
import asyncio from azure.eventhub import EventData from azure.eventhub.aio import EventHubProducerClient from azure.identity.aio import DefaultAzureCredential EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "EVENT_HUB_FULLY_QUALIFIED_NAMESPACE" EVENT_HUB_NAME = "EVENT_HUB_NAME" credential = DefaultAzureCredential() async def run(): # Create a producer client to send messages to the event hub. # Specify a credential that has correct role assigned to access # event hubs namespace and the event hub name. producer = EventHubProducerClient( fully_qualified_namespace=EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, eventhub_name=EVENT_HUB_NAME, credential=credential, ) async with producer: # Create a batch. event_data_batch = await producer.create_batch() # Add events to the batch. event_data_batch.add(EventData("First event ")) event_data_batch.add(EventData("Second event")) event_data_batch.add(EventData("Third event")) # Send the batch of events to the event hub. await producer.send_batch(event_data_batch) # Close credential when no longer needed. await credential.close() asyncio.run(run())
Примечание.
Примеры других вариантов асинхронной отправки событий в Концентратор событий с помощью строки подключения см. на странице GitHub send_async.py. Приведенные шаблоны также применимы к отправке событий без пароля.
Получение событий
В этом кратком руководстве хранилище объектов Azure Blob используется в качестве хранилища контрольных точек. Хранилище контрольных точек используется для сохранения контрольных точек (т. е. последних позиций чтения).
Следуйте этим рекомендациям при использовании Azure Blob Storage в качестве хранилища контрольных точек:
- Используйте отдельный контейнер для каждой группы потребителей. Вы можете использовать одну и ту же учетную запись хранения, но использовать один контейнер для каждой группы.
- Не используйте контейнер для ничего другого и не используйте учетную запись хранения для ничего другого.
- Учетная запись хранения должна находиться в том же регионе, в который находится развернутое приложение. Если приложение находится в локальной среде, попробуйте выбрать ближайший регион.
На странице учетной записи хранения в портале Azure, в разделе службы BLOB, убедитесь, что следующие параметры отключены.
- Иерархическое пространство имен
- Обратимое удаление BLOB-объекта
- Управление версиями
Создать учетную запись хранения Azure и контейнер Blob
Создайте учетную запись хранения Azure и блоб-контейнер в ней, выполнив следующие действия.
- Создайте учетную запись хранения Azure
- Создайте контейнер BLOB.
- Аутентификация входа в контейнер BLOB.
Обязательно запишите строку подключения и имя контейнера для последующего использования в коде получения.
Если вы выполняете разработку локально, убедитесь, что учетная запись пользователя, через которую осуществляется доступ к данным BLOB-объектов, имеет правильные разрешения. Вам потребуется роль Storage Blob Data Contributor для чтения и записи данных BLOB. Чтобы назначить себе эту роль, вам нужно, чтобы вам была назначена роль администратора доступа пользователей или другая роль, включающая действие Microsoft.Authorization/roleAssignments/write. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных областях назначения ролей можно узнать на странице обзора области.
В этом сценарии вы назначите разрешения учетной записи пользователя, которая ограничена учетной записью хранения, чтобы обеспечить соблюдение принципа минимальных привилегий. В рамках этой практики пользователям предоставляются только минимальные необходимые разрешения, что позволяет создавать более защищенные рабочие среды.
В следующем примере вашей учетной записи пользователя будет назначена роль участника данных BLOB-объектов хранилища, которая предоставляет доступ как к чтению, так и к записи BLOB-данных в вашей учетной записи хранилища.
Внимание
В большинстве случаев для распространения назначения ролей в Azure потребуется минута или две, но в редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.
На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите Storage Blob Data Contributor и выберите соответствующий результат, а затем нажмите Далее.
В разделе Назначение доступа для выберите Пользователь, группа или служебный принципал, а затем выберите + Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно это ваш адрес электронной почты user@domain), а затем в нижней части диалогового окна выберите Выбрать.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Установка пакетов для получения событий
Для принимающей стороны необходимо установить один или несколько пакетов. В этом кратком руководстве вы используете хранилище BLOB-объектов Azure для сохранения контрольных точек, чтобы программа не читала уже прочитанные события. Оно регулярно выполняет фиксацию метаданных для полученных сообщений в большом двоичном объекте. Благодаря такому подходу позже можно легко продолжить получать сообщения с того места, где вы остановились.
pip install azure-eventhub-checkpointstoreblob-aio
pip install azure-identity
Создание сценария Python для получения событий
В этом разделе вы создадите скрипт Python для получения событий из концентратора событий.
Откройте предпочитаемый редактор Python, например Visual Studio Code.
Создайте сценарий с именем recv.py.
Вставьте в recv.py следующий код.
В коде используйте реальные значения для замены следующих заполнителей:
BLOB_STORAGE_ACCOUNT_URL
BLOB_CONTAINER_NAME
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE
EVENT_HUB_NAME
import asyncio from azure.eventhub.aio import EventHubConsumerClient from azure.eventhub.extensions.checkpointstoreblobaio import ( BlobCheckpointStore, ) from azure.identity.aio import DefaultAzureCredential BLOB_STORAGE_ACCOUNT_URL = "BLOB_STORAGE_ACCOUNT_URL" BLOB_CONTAINER_NAME = "BLOB_CONTAINER_NAME" EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "EVENT_HUB_FULLY_QUALIFIED_NAMESPACE" EVENT_HUB_NAME = "EVENT_HUB_NAME" credential = DefaultAzureCredential() async def on_event(partition_context, event): # Print the event data. print( 'Received the event: "{}" from the partition with ID: "{}"'.format( event.body_as_str(encoding="UTF-8"), partition_context.partition_id ) ) # Update the checkpoint so that the program doesn't read the events # that it has already read when you run it next time. await partition_context.update_checkpoint(event) async def main(): # Create an Azure blob checkpoint store to store the checkpoints. checkpoint_store = BlobCheckpointStore( blob_account_url=BLOB_STORAGE_ACCOUNT_URL, container_name=BLOB_CONTAINER_NAME, credential=credential, ) # Create a consumer client for the event hub. client = EventHubConsumerClient( fully_qualified_namespace=EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, eventhub_name=EVENT_HUB_NAME, consumer_group="$Default", checkpoint_store=checkpoint_store, credential=credential, ) async with client: # Call the receive method. Read from the beginning of the partition # (starting_position: "-1") await client.receive(on_event=on_event, starting_position="-1") # Close credential when no longer needed. await credential.close() if __name__ == "__main__": # Run the main method. asyncio.run(main())
Примечание.
Примеры других вариантов получения событий из Концентратора событий асинхронно с помощью строки подключения смотрите на странице recv_with_checkpoint_store_async.py GitHub. Отображаемые шаблоны также применимы к получению событий без пароля.
Запуск приложения получателя
Чтобы выполнить сценарий, откройте окно командной строки с Python в пути, а затем выполните следующую команду.
python recv.py
Запуск приложения отправителя
Чтобы выполнить сценарий, откройте окно командной строки с Python в пути, а затем выполните следующую команду.
python send.py
В окне получателя должны отобразиться сообщения, отправленные в концентратор событий.
Устранение неполадок
Если события не отображаются в окне приемника или код сообщает об ошибке, попробуйте выполнить следующие советы по устранению неполадок:
Если результаты не отображаются из recy.py, выполните send.py несколько раз.
Если при использовании кода без пароля (с учетными данными) возникают ошибки, связанные с "coroutine", убедитесь, что вы импортируете из
azure.identity.aio
.Если отображается "Незакрытый сеанс клиента" с кодом без пароля (с учетными данными), убедитесь, что вы закройте учетные данные после завершения. Дополнительные сведения см. в разделе "Асинхронные учетные данные".
Если при доступе к хранилищу возникают ошибки авторизации с recv.py, убедитесь, что следовали шагам из Создание учетной записи хранения Azure и контейнера для блобов и назначили роль Участник данных блоба хранилища основному приложению.
Если вы получаете события с различными идентификаторами секций, ожидается этот результат. Разделы — это механизм организации данных, связанный с необходимым для потребляющих приложений степенью параллелизма. Количество разделов в концентраторе событий непосредственно связано с числом параллельных читателей, которые вы ожидаете иметь. Дополнительные сведения см. в разделе "Дополнительные сведения о секциях".
Следующие шаги
В этом кратком руководстве вы отправляли и получали события асинхронно. Чтобы узнать, как отправлять и получать события синхронно, перейдите на страницу GitHub sync_samples.
Для всех примеров (синхронных и асинхронных) в GitHub перейдите на страницу Azure Event Hubs client library for Python Samples (Клиентская библиотека Центров событий Azure для примеров Python).