【问题标题】:how to push blob storage events to event grid topic如何将 blob 存储事件推送到事件网格主题
【发布时间】:2021-10-16 02:43:18
【问题描述】:

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

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

我转到存储帐户,并尝试创建事件订阅:

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

【问题讨论】:

    标签: azure-functions azure-blob-storage azure-eventgrid


    【解决方案1】:

    AEG 不处理自定义主题端点的订阅 webhook 端点验证,但是有一个解决方法可以解决此问题missing feature,请参阅here 的更多详细信息。

    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"
      }
    ]
    

    事件订阅正在等待validation response,可以通过编程方式(以 validationCode 响应)或手动(向 validationUrl 发送 GET 请求)。

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

    下图显示了这个解决方案:

    用于手动验证的 EventGridTrigger 函数的实现描述为here

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

     "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"
            }
          ]
      

    【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并在几分钟内解决了它,使用逻辑应用将事件传递给我的自定义主题。无需在存储帐户上创建事件订阅,逻辑应用在设置后会自动添加相应的 webhook:

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2020-11-02
      • 2021-09-08
      • 1970-01-01
      • 2021-08-26
      • 2020-11-02
      • 1970-01-01
      • 2020-05-17
      • 2021-03-14
      相关资源
      最近更新 更多