Привязка для вывода Центров событий Azure для службы "Функции Azure"

Здесь объясняется, как работать с привязками Центров событий Azure для службы "Функции Azure". Функции Azure поддерживают привязки триггера и выходные привязки для Центров событий Azure.

Сведения об установке и настройке см. в этой обзорной статье.

Используйте выходную привязку Центров событий для записи событий в поток событий. Чтобы записывать события в центр событий, необходимо иметь разрешение на отправку в него событий.

Прежде чем реализовывать привязку к выходным данным, убедитесь, что указаны ссылки на требуемые пакеты.

В следующем примере показана функция C#, которая записывает сообщение в концентратор событий, используя возвращаемое значение метода в качестве выходных данных.

[FunctionName("EventHubOutput")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    return $"{DateTime.Now}";
}

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

[FunctionName("EH2EH")]
public static async Task Run(
    [EventHubTrigger("source", Connection = "EventHubConnectionAppSetting")] EventData[] events,
    [EventHub("dest", Connection = "EventHubConnectionAppSetting")]IAsyncCollector<string> outputEvents,
    ILogger log)
{
    foreach (EventData eventData in events)
    {
        // do some processing:
        var myProcessedEvent = DoSomething(eventData);

        // then send the message
        await outputEvents.AddAsync(JsonConvert.SerializeObject(myProcessedEvent));
    }
}

Атрибуты и заметки

В библиотеках классов C# используйте атрибут EventHubAttribute.

Конструктор атрибута принимает имя концентратора событий и имя параметра приложения, содержащего строку подключения. Дополнительные сведения об этих параметрах см. в разделе Привязки концентраторов событий функций Azure. Ниже приведен пример атрибута EventHub.

[FunctionName("EventHubOutput")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    ...
}

Полный пример см. в разделе Пример выходных данных C#.

Конфигурация

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте EventHub.

свойство function.json Свойство атрибута Описание
type Недоступно Для этого свойства необходимо задать значение "eventHub"
direction Недоступно Для этого свойства необходимо задать значение out. Этот параметр задается автоматически при создании привязки на портале Azure.
name Недоступно Имя переменной, используемое в коде функции, которая представляет событие.
путь EventHubName Только служба "Функции" версии 1.x. Имя концентратора событий. Если имя концентратора событий указано также в строке подключения, такое значение переопределяет это свойство во время выполнения.
eventHubName EventHubName Функции 2.x и более поздних версий. Имя концентратора событий. Если имя концентратора событий указано также в строке подключения, такое значение переопределяет это свойство во время выполнения.
connection; Соединение Имя параметра или коллекции параметров приложения, которое указывает, как подключиться к концентраторам событий. См. раздел Подключения.

При локальной разработке параметры приложения перейдут в файл local.settings.json.

Соединения

connectionСвойство является ссылкой на конфигурацию среды, которая указывает, как приложение должно подключаться к концентраторам событий. Он может указать:

Если настроенное значение является точным совпадением для одного параметра и префиксом, соответствующим другим параметрам, используется точное совпадение.

строку подключения.

Получите эту строку подключения, нажав кнопку сведения о соединении для пространства имен, а не самого концентратора событий. Строка подключения должна быть для пространства имен концентраторов событий, а не самого концентратора событий.

При использовании для триггеров строка подключения должна иметь по крайней мере разрешение на чтение для активации функции. При использовании для выходных привязок строка подключения должна иметь разрешения SEND для отправки сообщений в поток событий.

Эта строка подключения должна храниться в параметре приложения с именем, соответствующим значению, заданному connection свойством конфигурации привязки.

Подключения на основе удостоверений

если вы используете расширение 5. x или более позднейверсии, вместо того чтобы использовать строку подключения с секретом, приложение может использовать удостоверение Azure Active Directory. Для этого необходимо определить параметры по общему префиксу, который сопоставляется со connection свойством в конфигурации триггера и привязки.

В этом режиме для расширения требуются следующие свойства:

Свойство Шаблон переменной среды Описание Пример значения
Пространство полных имен <CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace Полное пространство имен концентраторов событий. <event_hubs_namespace>. servicebus.windows.net

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

При размещении в службе "Функции Azure" для подключений на основе удостоверений используется управляемое удостоверение. По умолчанию используется назначаемое системой удостоверение, однако вы можете указать назначаемое пользователем удостоверение с помощью свойств credential и clientID. При выполнении в других контекстах, таких как локальная разработка, вместо этого используется удостоверение разработчика, хотя это можно настроить. См. раздел Локальная разработка с использованием подключений на основе удостоверений.

Предоставление разрешения удостоверению

Любое используемое удостоверение должно иметь разрешения на выполнение предполагаемых действий. Вам потребуется назначить роль в Azure RBACс помощью встроенных или пользовательских ролей, предоставляющих эти разрешения.

Важно!

Иногда целевая служба может предоставлять разрешения, которые не являются обязательными для всех контекстов. Там, где это возможно, придерживайтесь принципа минимальных привилегий, предоставляя удостоверению лишь самые необходимые привилегии. Например, если приложению нужно иметь возможность только считывать данные из источника данных, используйте роль, имеющую разрешение только на чтение. Назначение роли, которая также разрешает запись в эту службу, будет нежелательным, так как это будет излишнее разрешение для операции чтения. Аналогичным образом необходимо обеспечить область назначения роли только для ресурсов, которые необходимо считать.

Вам потребуется создать назначение роли, предоставляющее доступ к концентратору событий во время выполнения. Область назначения роли должна быть для пространства имен концентраторов событий, а не самого концентратора событий. Роли управления, такие как owner , недостаточно. В следующей таблице показаны встроенные роли, Рекомендуемые при использовании расширения концентраторов событий в нормальных операциях. Приложение может потребовать дополнительных разрешений на основе написанного кода.

Тип привязки Примеры встроенных ролей
Триггер [Приемник данных концентраторов событий Azure], [владелец данных концентраторов событий Azure]
Выходные привязки Отправитель данных Центров событий Azure

Использование

По умолчанию

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

Для отправки сообщений используйте параметр метода, например out string paramName. В скрипте C# paramName — это значение, заданное в свойстве name файла function.json. Для записи нескольких сообщений можно использовать ICollector<string> или IAsyncCollector<string> вместо out string.

Дополнительные типы

Приложения, использующие расширение Центра событий 5.0.0 или более поздней версии, используют тип EventData в пространстве имен Azure.Messaging.EventHubs, а не Microsoft.Azure.EventHubs. В этой версии прекращена поддержка устаревшего типа Body. Вместо него теперь поддерживаются следующие типы:

Исключения и коды возврата

Привязка Справочник
Концентратор событий Руководство по операциям

Дальнейшие действия