我正在尝试开发一个 Azure 函数来处理由事件中心的捕获功能创建的 blob。但是,虽然捕获 blob 已正确存储在容器中,但似乎没有将任何Microsoft.EventHub.CaptureFileCreated
事件发布到 Function 订阅。函数端点的事件订阅已创建且没有错误,Azure CLI 的输出为
{
"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);
}
作为一个实验,如果我为另一种类型的事件(fi blob 创建事件)添加相同的函数端点,我可以在日志中看到函数调用。此外,在事件订阅的 Metrics 刀片中,似乎从未向订阅者发布任何事件
此外,将捕获事件的订阅添加到逻辑应用程序或存储队列导致发布的事件为零,与 webhook 触发器一样。还值得注意的是,这不适用于 Azure 函数(v1 和 v2)的两个运行时环境,甚至在使用特定EventGridTrigger
属性而不是通用 Http 触发器时也是如此;但是,其他事件类型正确发布事件并触发该功能。
为了参考可能的复制步骤,我从这个 Microsoft 教程中获得了灵感,跳过了 SQL Server/Data Warehouse 部分。在寻找其他有类似问题的人时,我发现这个问题似乎与我的情况有关,但没有明确的答案或线索可能是什么问题。一定是缺少了什么,但我不知道接下来要尝试什么。