【问题标题】:Azure Functions: configure blob trigger only for new eventsAzure Functions:仅为新事件配置 blob 触发器
【发布时间】:2017-04-21 20:38:35
【问题描述】:

我的 Azure 存储中有大约 80 万个 Blob。当我使用 blobTrigger 创建 azure 函数时,它开始处理我在存储中拥有的所有 blob。如何将我的函数配置为仅针对新的和更新的 blob 触发?

【问题讨论】:

    标签: c# azure azure-blob-storage azure-functions


    【解决方案1】:

    目前没有办法做到这一点。在内部,我们通过将收据存储在我们的控制容器azure-webjobs-hosts 中来跟踪我们处理了哪些 blob。任何没有收据的 blob 或旧收据(基于 blob ETag)都将被处理(或重新处理)。这就是您现有的 blob 正在处理的原因 - 它们没有收据。 BlobTrigger 当前旨在确保最终处理与路径模式匹配的容器中的所有 blob,并在它们更新时重新处理。

    如果您对此充满热情,可以在我们的 repo here 中记录功能请求,并提供有关您方案的详细信息。

    【讨论】:

    • 感谢您的解释。我将提交功能请求。但是现在有什么解决方法吗?我可以自己生成所有收据吗?
    • 没有真正的解决方法,除了让所有的 blob 都被处理。你可以编写一个 noop 函数,让它遍历所有的 blob,这将生成收据。完成后,将您的实际函数逻辑放在适当的位置,然后这些旧 blob 只有在更改时才会被重新处理。
    • 是的,我也在考虑这个,但我有点害怕它会花费太长时间。无论如何我会尝试的。感谢您的帮助
    • 仅供参考,这里有一个跟踪此问题的新问题:github.com/Azure/azure-webjobs-sdk/issues/1327
    • @mathewc 写一个 noop 函数是个好主意,但是如果我运行这个然后我想再次重新处理处理过的 blob,我应该清除 azure-webjobs-hosts 吗?
    【解决方案2】:

    我解决这个问题的方法是在已处理的 Blob 上设置元数据(例如,状态 = 完成)。当触发器被触发时,我首先检查这段元数据,如果它已经设置则返回函数。

    这样做的缺点是元数据的更新会触发函数的额外执行

    【讨论】:

    • 也想到了这一点-但这是否需要在判断其元数据之前将每个 blob 作为 InputStream 获取到函数中?我不知道是否将 blob 的获取推迟到(在 python 中)read()。对于 800k 图像,这可行吗?
    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 2020-05-07
    • 2021-12-31
    • 2021-10-21
    • 2022-01-19
    • 2018-10-26
    • 2021-02-26
    • 2020-11-26
    相关资源
    最近更新 更多