如何在事件网格触发器Azure函数中获取已删除blob的元数据?下面是一个C#代码示例-
[FunctionName("EventGridTriggerFunction")]
public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{ log.LogInformation(eventGridEvent.Data.ToString());
}
我可以从EventGridEvent获取吗--
引用链接-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的软删除选项将启用在EventGridTrigger订阅者中获取blob元数据。
以下代码片段显示了此实现示例:
run.csx:
#r "Newtonsoft.Json"
#r "Microsoft.WindowsAzure.Storage"
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Linq;
public static async Task Run(JObject eventGridEvent, CloudBlockBlob blob, ILogger log)
{
log.LogInformation($"{eventGridEvent}");
if (eventGridEvent["data"]["contentType"].Value<string>() != "abcd" && eventGridEvent["data"]["api"].Value<string>() == "DeleteBlob")
{
await blob.UndeleteAsync();
await blob.FetchAttributesAsync();
log.LogInformation($"\nMetadata: {string.Join(" | ", blob.Metadata.Select(i => $"{i.Key}={i.Value}"))}");
// ...
blob.Properties.ContentType = "abcd";
await blob.SetPropertiesAsync();
await blob.DeleteAsync();
}
else if (eventGridEvent["data"]["contentType"].Value<string>() != "abcd")
{
await blob.FetchAttributesAsync();
log.LogInformation($"\nMetadata: {string.Join(" | ", blob.Metadata.Select(i => $"{i.Key}={i.Value}"))}");
}
await Task.CompletedTask;
}
function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
},
{
"type": "blob",
"name": "blob",
"path": "{data.url}",
"connection": "rk2018ebstg_STORAGE",
"direction": "in"
}
],
"disabled": false
}
请注意,存储帐户发出的事件消息中的数据对象只包括blob文件的两个属性,如contentType和contentLength。
上述实现用于避免订阅者对具有意外值(例如abcd)的Blob属性contentType的DeleteBlob的循环。
如果软删除的blob允许检索其属性和/或元数据,这将很好。我在这里写了这个选项的反馈。
我正在尝试设置一个 Powershell Azure 函数,该函数在 Blob 存储容器中创建文件时触发。该函数需要处理 Blob 文件并将其保存到其他 Blob 存储容器。 目前这个函数什么都不做,因为我正在尝试处理下面的问题。 我无法从 powershell 函数内部访问 blob。我能够使用属性在c#中实现这一点,但似乎Powershell不支持属性。 我尝试在函数的集成选项卡下添加Azur
我正在调查可用于 Azure 存储的 Webhook/事件触发器。不幸的是,文档似乎专注于演示如何让 Azure 门户为我构建函数,这不允许进行本地测试。 特别是,我正在研究捕获已删除 Blob 的时间。 我的使用示例(Azure函数): 当我从存储容器中删除一个blob时,问题出现了:函数没有被触发。 然而,我发现,如果我在控制台中点击<code>CTRL C</code>则该函数被触发。 有人
我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此
我们有一个 Azure 设置,其中包含一个 Azure 事件网格主题,并且我们有一个 Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀筛选器订阅该主题。Azure 函数服务设置为基于消耗的资源,应该能够根据需要进行缩放。 每个订阅都设置为在最多4小时内尝试交付10次,然后放弃活动。到目前为止一切顺利,设置大部分时间都按预期工作。 在某些情况下,对于我们未知的情况,事件网格主
我在 Azure 数据工厂中具有事件触发器,它在 Azure Blob 存储中创建新 Blob 时触发。但我的触发器在创建 Blob 时没有触发。 已按照以下链接进行操作,但卡在下面提到的点:Azure 数据工厂:事件未启动管道。 环境详情: 事件网格已注册,ADF为v2并将参数传递给管道。我的问题是我是否需要激活Azure存储事件订阅?如果是这样,我的事件处理程序应该是什么(在我的情况下是ADF
我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关