Я пытаюсь разработать функцию Azure для работы с большим двоичным объектом, созданным функцией захвата концентратора событий. Однако, хотя капли захвата правильно хранятся в контейнере, похоже, что в подписке Function не публикуется событие Microsoft.EventHub.CaptureFileCreated
. Подписка на событие для конечной точки функции была создана без ошибок, и выходные данные из интерфейса командной строки Azure:
{
"additionalProperties": {},
"deadLetterDestination": null,
"destination": {
"additionalProperties": {},
"endpointBaseUrl": "https://xxxxx-xxxxx-xxxxx.azurewebsites.net/api/EventGridWebhook",
"endpointType": "WebHook",
"endpointUrl": null
},
"eventDeliverySchema": "InputEventSchema",
"filter": {
"additionalProperties": {},
"includedEventTypes": [
"Microsoft.EventHub.CaptureFileCreated"
],
"isSubjectCaseSensitive": null,
"subjectBeginsWith": "",
"subjectEndsWith": ""
},
"id": "/subscriptions/yyyyy-yyyyy-yyyyyy/resourceGroups/test-event-grid-grp/providers/Microsoft.EventHub/namespaces/capture-hub-namespace/providers/Microsoft.EventGrid/eventSubscriptions/captureFunctionV1Sub",
"labels": null,
"name": "captureFunctionV1Sub",
"provisioningState": "Succeeded",
"resourceGroup": "test-event-grid-grp",
"retryPolicy": {
"additionalProperties": {},
"eventTimeToLiveInMinutes": 1440,
"maxDeliveryAttempts": 30
},
"topic": "/subscriptions/yyyyy-yyyyy-yyyyyy/resourceGroups/test-event-grid-grp/providers/microsoft.eventhub/namespaces/capture-hub-namespace",
"type": "Microsoft.EventGrid/eventSubscriptions"
}
Тело функции - это стандартный триггер Http с дополнительной частью проверки, необходимой для подписки конечной точки таблицы событий
public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
string jsonContent = await req.Content.ReadAsStringAsync();
log.Info($"Webhook was triggered! Input: {jsonContent}");
dynamic events = JsonConvert.DeserializeObject(jsonContent);
if (req.Headers.GetValues("Aeg-Event-Type").FirstOrDefault() == "SubscriptionValidation")
{
var code = events[0].Data["validationCode"];
return req.CreateResponse(HttpStatusCode.OK,
new { validationResponse = code });
}
return req.CreateResponse(HttpStatusCode.OK);
}
В качестве эксперимента, если я добавлю конечную точку той же функции для другого типа события (например, событие создания BLOB-объекта), я смогу увидеть вызовы функций в журналах. Кроме того, в метрике подписки на событие кажется, что подписчики не публикуют ни одного события
Кроме того, добавление подписки из события захвата в приложение логики или в очередь хранения привело к публикации нулевых событий, как в случае триггера webhook. Стоит также отметить, что это не работает при использовании обеих сред выполнения для функций Azure (v1 и v2) и даже при использовании определенного атрибута EventGridTrigger
вместо общего триггера Http; однако другие типы событий правильно публикуют события и вызывают функцию.
Для справки о возможных шагах воспроизведения, я извлек вдохновение из этого руководства Microsoft , пропуская часть SQL Server / Хранилище данных.
При поиске других людей, имеющих подобную проблему, я обнаружил этот вопрос , который, похоже, связан с моим делом, но нет четкого ответа или подсказки о том, в чем может быть проблема. Что-то должно быть не хватает, но я понятия не имею, что попробовать дальше.