使用死信存储更新 Azure 事件网格函数订阅
Update Azure Event Grid function subscription with dead-letter storage
我已经在资源组 omni-test
下的名为 receivingtestwesteurope
的存储帐户上成功地创建了一个关于创建存储 blob 的事件触发器,它是通过一个名为 ValidateMetadata
的函数接收的。我通过门户 GUI 创建了它。但是我现在想添加 deadletter/retry 策略,这只能通过 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
哪个returns:
az: error: unrecognized arguments: --deadletter-endpoint
receivingtestwesteurope/blobServices/default/containers/eventgrid
然后我尝试通过 REST 补丁:
https://docs.microsoft.com/en-us/rest/api/eventgrid/eventsubscriptions/update
- 范围:
/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope
- 事件订阅名称:
png
- api-版本:
2018-05-01-preview
正文:
"deadletterdestination": {
"endpointType": "StorageBlob",
"properties": {
"blobContainerName": "eventgrid",
"resourceId": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope"
}}
哪个returns
"Model state is invalid."
===================
最终解决方案:
{
"deadletterdestination": {
"endpointType": "StorageBlob",
"properties": {
"blobContainerName": "eventgrid",
"resourceId": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope"
}
}
}
看看Manage Event Grid delivery settings,里面详细描述了开启死信。注意,你必须安装一个事件网格扩展
az extension add --name eventgrid
此外,您可以使用 REST API 更新您的事件订阅以防止死信。
除此之外,我刚刚发布了我的小工具 Azure Event Grid Tester,用于在本地计算机上帮助处理 Azure 事件网格模型。
更新:
下面是一个deadletterdestination属性:
"deadletterdestination": {
"endpointType": "StorageBlob",
"properties": {
"blobContainerName": "{containerName}",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resgroup}/providers/Microsoft.Storage/storageAccounts/{storageAccount}"
}
}
您可以将 Event Subscriptions - Update(REST API 补丁)与上述 属性 一起使用。请注意,必须使用 api-version=2018-05-01-preview。
我已经在资源组 omni-test
下的名为 receivingtestwesteurope
的存储帐户上成功地创建了一个关于创建存储 blob 的事件触发器,它是通过一个名为 ValidateMetadata
的函数接收的。我通过门户 GUI 创建了它。但是我现在想添加 deadletter/retry 策略,这只能通过 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
哪个returns:
az: error: unrecognized arguments: --deadletter-endpoint receivingtestwesteurope/blobServices/default/containers/eventgrid
然后我尝试通过 REST 补丁:
https://docs.microsoft.com/en-us/rest/api/eventgrid/eventsubscriptions/update
- 范围:
/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope
- 事件订阅名称:
png
- api-版本:
2018-05-01-preview
正文:
"deadletterdestination": {
"endpointType": "StorageBlob",
"properties": {
"blobContainerName": "eventgrid",
"resourceId": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope"
}}
哪个returns
"Model state is invalid."
===================
最终解决方案:
{
"deadletterdestination": {
"endpointType": "StorageBlob",
"properties": {
"blobContainerName": "eventgrid",
"resourceId": "/subscriptions/fa6409ab-1234-1234-1234-85dd2b3ceab4/resourceGroups/omni-test/providers/microsoft.storage/storageaccounts/receivingtestwesteurope"
}
}
}
看看Manage Event Grid delivery settings,里面详细描述了开启死信。注意,你必须安装一个事件网格扩展
az extension add --name eventgrid
此外,您可以使用 REST API 更新您的事件订阅以防止死信。
除此之外,我刚刚发布了我的小工具 Azure Event Grid Tester,用于在本地计算机上帮助处理 Azure 事件网格模型。
更新:
下面是一个deadletterdestination属性:
"deadletterdestination": {
"endpointType": "StorageBlob",
"properties": {
"blobContainerName": "{containerName}",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resgroup}/providers/Microsoft.Storage/storageAccounts/{storageAccount}"
}
}
您可以将 Event Subscriptions - Update(REST API 补丁)与上述 属性 一起使用。请注意,必须使用 api-version=2018-05-01-preview。