首页 > 解决方案 > 使用死信存储更新 Azure 事件网格函数订阅

问题描述

receivingtestwesteurope我已经成功地在资源组下的一个名为 的存储帐户上创建了一个存储 blob 创建事件触发器,该触发器omni-test是通过一个名为ValidateMetadata. 我通过门户 GUI 创建了它。但是,我现在想添加只能通过 CLI 完成的死信/重试策略。

工作触发器是这样的:

{
    "destination": {
      "endpointBaseUrl": "https://omnireceivingprocesstest.azurewebsites.net/admin/extensions/EventGridExtensionConfig",
      "endpointType": "WebHook",
      "endpointUrl": null
    },
    "filter": {
      "includedEventTypes": [
        "Microsoft.Storage.BlobCreated"
      ],
      "isSubjectCaseSensitive": null,
      "subjectBeginsWith": "/blobServices/default/containers/snapshots/blobs/",
      "subjectEndsWith": ".png"
    },
    "id": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/Microsoft.Storage/StorageAccounts/receivingtestwesteurope/providers/Microsoft.EventGrid/eventSubscriptions/png",
    "labels": [
      ""
    ],
    "name": "png",
    "provisioningState": "Succeeded",
    "resourceGroup": "omni-test",
    "topic": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope",
    "type": "Microsoft.EventGrid/eventSubscriptions"
}

首先,我认为我可以使用死信队列更新现有事件:

az eventgrid event-subscription update --name png --deadletter-endpoint receivingtestwesteurope/blobServices/default/containers/eventgrid

返回:

az:错误:无法识别的参数:--deadletter-endpoint 接收testwesteurope/blobServices/default/containers/eventgrid

然后我尝试通过 REST Patch:

https://docs.microsoft.com/en-us/rest/api/eventgrid/eventsubscriptions/update

身体:

"deadletterdestination": {
  "endpointType": "StorageBlob",
  "properties": {
    "blobContainerName": "eventgrid",
    "resourceId": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope"
  }}

哪个返回

“模型状态无效。”

====================

最终工作解决方案:

{
    "deadletterdestination": {
        "endpointType": "StorageBlob",
        "properties": {
            "blobContainerName": "eventgrid",
            "resourceId": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope"
        }
    }
}

标签: azure-eventgrid

解决方案


查看Manage Event Grid delivery settings,其中详细描述了打开死信。注意,你必须安装一个 eventgrid 扩展

az extension add --name eventgrid

此外,您可以使用 REST API 来更新事件订阅以进行死信。

除此之外,我刚刚发布了我的小工具Azure Event Grid Tester,用于帮助在本地机器上构建 Azure Event Grid 模型。

更新:

以下是deadletterdestination属性:

"deadletterdestination": {
  "endpointType": "StorageBlob",
  "properties": {
    "blobContainerName": "{containerName}",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resgroup}/providers/Microsoft.Storage/storageAccounts/{storageAccount}"
   }
 }

您可以使用具有上述属性的事件订阅 - 更新(REST API PATCH)。请注意,必须使用api-version=2018-05-01-preview


推荐阅读