Azure Functions:仅为新事件配置 blob 触发器
Azure Functions: configure blob trigger only for new events
我的 Azure 存储中大约有 80 万个 blob。当我使用 blobTrigger 创建 azure 函数时,它开始处理存储中的所有 blob。如何将我的函数配置为仅针对新的和更新的 blob 触发?
目前没有办法做到这一点。在内部,我们通过将收据存储在我们的控制容器 azure-webjobs-hosts
中来跟踪我们处理了哪些 blob。任何没有收据的 blob 或旧收据(基于 blob ETag)将被处理(或重新处理)。这就是为什么要处理您现有的 blob——它们没有收据。 BlobTrigger
目前旨在确保最终处理容器中与路径模式匹配的所有 blob,并在它们更新时重新处理。
如果您对此充满热情,可以在我们的存储库 here 中记录一个功能请求,其中包含您的方案的详细信息。
我解决这个问题的方法是在已处理的 Blob 上设置元数据(例如 Status = Complete)。当触发器被触发时,我首先检查这段元数据和 return 函数是否已经设置。
缺点是元数据的更新会触发函数的额外执行
我知道这个问题太老了,但我的回答可以帮助新开发者解决它。
在 BlobTrigger 上,您可以使用参数 BlobProperties
,它具有属性 Created
并过滤此日期。
public async Task Run([BlobTrigger("xyz/{name}", Connection = "AzureWebJobsStorage")]Stream file, string name, ILogger logger, BlobProperties Properties)
{
if(Properties.Created < new DateTime(2022, 03, 18, 0, 0, 0))
{
_logger.LogInformation("SKIP");
return;
}
...
}
我的 Azure 存储中大约有 80 万个 blob。当我使用 blobTrigger 创建 azure 函数时,它开始处理存储中的所有 blob。如何将我的函数配置为仅针对新的和更新的 blob 触发?
目前没有办法做到这一点。在内部,我们通过将收据存储在我们的控制容器 azure-webjobs-hosts
中来跟踪我们处理了哪些 blob。任何没有收据的 blob 或旧收据(基于 blob ETag)将被处理(或重新处理)。这就是为什么要处理您现有的 blob——它们没有收据。 BlobTrigger
目前旨在确保最终处理容器中与路径模式匹配的所有 blob,并在它们更新时重新处理。
如果您对此充满热情,可以在我们的存储库 here 中记录一个功能请求,其中包含您的方案的详细信息。
我解决这个问题的方法是在已处理的 Blob 上设置元数据(例如 Status = Complete)。当触发器被触发时,我首先检查这段元数据和 return 函数是否已经设置。
缺点是元数据的更新会触发函数的额外执行
我知道这个问题太老了,但我的回答可以帮助新开发者解决它。
在 BlobTrigger 上,您可以使用参数 BlobProperties
,它具有属性 Created
并过滤此日期。
public async Task Run([BlobTrigger("xyz/{name}", Connection = "AzureWebJobsStorage")]Stream file, string name, ILogger logger, BlobProperties Properties)
{
if(Properties.Created < new DateTime(2022, 03, 18, 0, 0, 0))
{
_logger.LogInformation("SKIP");
return;
}
...
}