【发布时间】:2020-09-08 10:49:06
【问题描述】:
如何在事件网格触发 Azure 函数中获取已删除 blob 的元数据?下面是一个示例 C# 代码 -
[FunctionName("EventGridTriggerFunction")]
public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{ log.LogInformation(eventGridEvent.Data.ToString());
}
我可以从 EventGridEvent --> 数据对象属性中获取吗?有没有办法使用 blob 的元数据设置自定义事件架构?
参考链接 - https://docs.microsoft.com/en-us/azure/event-grid/event-schema-blob-storage
[{
"topic": "/subscriptions/{subscription-id}/resourceGroups/Storage/providers/Microsoft.Storage/storageAccounts/my-storage-account",
"subject": "/blobServices/default/containers/test-container/blobs/new-file.txt",
"eventType": "Microsoft.Storage.BlobCreated",
"eventTime": "2017-06-26T18:41:00.9584103Z",
"id": "831e1650-001e-001b-66ab-eeb76e069631",
"***data***": {
"api": "PutBlockList",
"clientRequestId": "6d79dbfb-0e37-4fc4-981f-442c9ca65760",
"requestId": "831e1650-001e-001b-66ab-eeb76e000000",
"eTag": "\"0x8D4BCC2E4835CD0\"",
"contentType": "text/plain",
"contentLength": 524288,
"blobType": "BlockBlob",
"url": "https://my-storage-account.blob.core.windows.net/testcontainer/new-file.txt",
"sequencer": "00000000000004420000000000028963",
"storageDiagnostics": {
"batchId": "b68529f3-68cd-4744-baa4-3c0498ec19f0"
}
},
"dataVersion": "",
"metadataVersion": "1"
}]
【问题讨论】:
-
blob 文件的用户元数据不是事件消息中数据对象的一部分。只有当 blob 文件存在时才能获取它们。
-
谢谢你,罗曼!是的,你是对的。有没有替代方法?基本上我想显示整个审计跟踪信息。 (上传/删除/修改)blob/文件。通过 REST Api (PUT BLOB) 调用,我正在设置 blob 的元数据以及用户详细信息。如果你能帮助我,我将不胜感激。
-
您的解决方案没有优雅的解决方法。但是,开启 blob 软删除选项将允许在调用 取消删除 blob 请求后获取 eventgridtrigger 订阅者中的 blob 元数据。
-
ok 但 undelete blob 请求也会恢复内容。我可以通过创建自定义事件数据/模式来实现吗?如果是,那怎么办?
-
再一次,您不能在 blob 存储帐户发出的事件消息中自定义数据对象。您的订阅者将调用取消删除 blob,然后获取 blob 元数据、检查元数据、设置元数据并再次删除此 blob。这是如何从软删除的 blob 中检索元数据的非优雅方式。最好从已标记为已删除的不可见 blob 中获取元数据,但目前不支持此功能。
标签: azure-functions azure-blob-storage azure-webjobssdk azure-eventgrid