首页 > 解决方案 > 如何将 blob 存储事件推送到事件网格主题

问题描述

当我尝试为以下内容创建事件订阅时出现以下错误blobCreated

在此处输入图像描述

当容器中有一个新的 blob 时,我希望将该事件转发到一个主题。

我去了存储帐户,并尝试创建一个事件订阅:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我究竟做错了什么?我们如何将 blob 存储事件推送到事件网格主题?

标签: azure-functionsazure-blob-storageazure-eventgrid

解决方案


AEG 不处理自定义主题端点的订阅 webhook 端点验证,但是有一个解决此缺失功能的解决方法,请在此处查看更多详细信息。

AEG级联的概念是订阅该自定义主题,其订阅者将通过 http GET 调用处理验证。

我确实建议使用CustomInputSchema创建自定义主题端点,否则 blob 存储事件将嵌套在事件数据对象中。

更新:

以下是有关 AEG-To-AEG 集成的更多详细信息,例如级联(转发)源事件。

请注意,当前版本的 AEG 不完全支持此集成(见下图),换句话说,自定义主题端点没有内置验证响应:

在此处输入图像描述

在与 webhook 端点进行订阅握手期间,会将以下事件消息(例如 blob 存储)发送到端点:

[
  {
    "id": "c2ad3900-f483-4e45-a15b-927195878e99",
    "topic": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myRG/providers/Microsoft.Storage/storageAccounts/myStorage",
    "subject": "",
    "data": {
      "validationCode": "00000000-0000-0000-0000-000000000000",
      "validationUrl": "https://rp2-westus.eventgrid.azure.net:553/eventsubscriptions/cascade/validate?id=04B6279C-A6ED-4FC0-981A-D9E53312B49A&t=2019-08-22T05:12:44.3114422Z&apiVersion=2019-02-01-preview&token=xxxxxxxxxxxxxx"
      },
    "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
    "eventTime": "2019-08-22T05:12:44.3114422Z",
    "metadataVersion": "1",
    "dataVersion": "2"
  }
]

事件订阅正在等待以编程方式(使用 validationCode 响应)或手动(向validationUrl发送 GET 请求)的验证响应。

对于这种集成,我们必须使用手动验证,例如发送 GET 请求。为此,我们必须创建一个订阅者来处理自定义主题的手动验证。

下图显示了此解决方案:

在此处输入图像描述

此处描述了用于手动验证的EventGridTrigger函数的实现。

如您所见,上面的事件验证消息,主题属性为空,因此我们可以处理这种情况以及嵌套(级联)事件数据的情况,应使用 CustomEventSchema创建自定义主题端点。以下是请求负载中的属性对象的示例:

 "properties": {
    "inputSchema": "CustomEventSchema",
    "inputSchemaMapping": {
      "properties": {
        "id": {
          "sourceField": null
        },
        "topic": {
          "sourceField": null
        },
        "eventTime": {
          "sourceField": null
        },
        "eventType": {
          "sourceField": null,
          "defaultValue": "notification"
        },
        "subject": {
          "sourceField": null,
          "defaultValue": "/webhook/events"
        },
        "dataVersion": {
          "sourceField": null,
          "defaultValue": "1.0"
        }
      },
      "inputSchemaMappingType": "Json"
    }
  }

笔记:

  1. 自定义主题aeg-sas-key值必须在 webhook 端点地址中进行 url 编码。
  2. 可以使用验证器的高级过滤器:

     "advancedFilters": [
          {
            "values": [
              "Microsoft.EventGrid.SubscriptionValidationEvent"
            ],
            "operatorType": "StringContains",
            "key": "Data.EventType"
          }
        ]
    

推荐阅读