【问题标题】:Stop Azure blob trigger function from being triggered on existing blobs when function is published to the cloud当函数发布到云时,停止在现有 Blob 上触发 Azure Blob 触发器函数
【发布时间】:2019-01-11 12:20:28
【问题描述】:
我有一个在 blob 触发器上启动的 Azure 函数。有趣的是,如果我将此 Azure 函数的更新版本发布到云中并且已经存在 blob,那么将在每个已经存在的 blob 上触发 Azure 函数。
这不是我想要的功能。相反,我希望仅在新上传的 blob 上触发新发布的 Azure 函数,而不是在已存在的 blob 上触发。 如何禁用对现有 Blob 的触发?
【问题讨论】:
标签:
azure
triggers
azure-blob-storage
azure-functions
【解决方案1】:
如何禁用对现有 blob 的触发?
目前无法做到这一点并且不推荐。
在内部,我们通过将收据存储在我们的控制容器 azure-webjobs-hosts 中来跟踪我们处理了哪些 blob。 任何没有收据的 blob 或旧收据(基于 blob ETag)都将被处理(或重新处理)。这就是您现有的 blob 正在处理的原因,它们没有收据。
BlobTrigger 当前旨在确保容器中与路径模式匹配的所有 blob 最终都得到处理,并在它们更新时重新处理。
所以在所有的blob都有收据之后,当你上传一个新的blob时,它只会由新的blob触发。
更多详情可以参考这个article。
当文件上传到 Azure Blob 存储或在 Azure Blob 存储中更新时,会触发 Blob 触发功能。如果禁用对现有 blob 的触发,则在更新 blob 时它不会获取最新内容,不推荐。
解决方法:
如果还想在新上传的blob上触发,可以在调用函数的时候加上判断。
List all of existing blobs 在容器中,当 blob 触发调用时,检查 blob 名称是否在列表中,如果没有,您可以继续触发方法。