如何从 Azure Functions 中的存储容器读取多个文件

Posted

技术标签:

【中文标题】如何从 Azure Functions 中的存储容器读取多个文件【英文标题】:How to read multiple files from a storage container in Azure Functions 【发布时间】:2021-12-26 22:07:21 【问题描述】:

我有一个 Azure Functions 应用程序 (Python),我必须读取存储在 Azure 存储帐户 (StorageV2) 中的多个 CSV 文件来验证它们。

但是,此文件夹中的 CSV 文件的文件名和数量会随时间而变化。该应用程序是使用 HTTP 绑定触发的,最好动态检查文件夹的内容,然后按顺序处理文件夹中的所有 CSV 文件。

从文档看来,Azure Functions 使用绑定进行输入和输出,但是,示例仅显示(多个)指向单个文件的输入绑定,而不是任何类型的文件夹/容器。因为事先不知道文件的数量和文件名,所以很难实现。

例如:function.json


  "bindings": [
    
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    ,
    
      "name": "inputcsv",
      "type": "blob",
      "dataType": "binary",
      "path": "samplesCSVs/singleCSVfile",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    ,
    
      "type": "http",
      "direction": "out",
      "name": "$return"
    
  ]
  "scriptFile": "__init__.py"

这里可以指向一个文件夹吗?或者以其他方式动态读取存储帐户中的文件?

我能想到的唯一另一种选择是提前简单地压缩所有 CSV 文件,这样我可以使用一个输入绑定到这个压缩文件,然后将它们解压缩到一个临时文件夹中来处理它们,但它会是效率较低。

来源:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-input?tabs=python

https://docs.microsoft.com/en-us/azure/azure-functions/functions-add-output-binding-storage-queue-vs-code?tabs=in-process&pivots=programming-language-python

【问题讨论】:

您可以使用 blob storage sdk 而不是绑定 您有相关文档的链接吗?你的意思是:docs.microsoft.com/en-us/python/api/overview/azure/…?这似乎是一个不错的选择。 【参考方案1】:

使用 Azure Blob Trigger 只能一对一匹配,更改或创建新 blob 将触发函数的执行。

您可以使用事件网格并在容器级别过滤事件,并使用 Azure 函数来处理该特定事件:

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-event-overview

【讨论】:

是的,但这与触发器无关,该函数是使用 HTTP 请求触发的,然后我必须获取存储帐户文件夹中的所有文件......所以 zip 替代方案是那么最好的选择呢?编辑:我认为使用存储库是我正在寻找的选项。 正确 ...但 Azure 存储帐户上没有“文件夹”,它是 blob 名称的一部分【参考方案2】:

我似乎对 Azure Functions 的工作方式有误解。因为它仍然是 Python 代码,并且 Azure 有一个 Python SDK 可用于连接到存储帐户和操作文件,所以这是完成我试图完成的任务的最佳方式。

Azure Functions 的输入/输出绑定似乎仅在使用特定触发器时才有用,但这不是我的问题所必需的。

感谢 zolty13 为我指明了正确的方向。

来源:

https://docs.microsoft.com/en-us/python/api/overview/azure/storage-blob-readme?view=azure-python

【讨论】:

以上是关于如何从 Azure Functions 中的存储容器读取多个文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure Functions 访问 Azure Key Vault 时访问被拒绝

Azure Functions:如何在 Azure 存储队列的绑定表达式中使用 POCO?

Azure Functions 中的 DI

Azure Functions - 使用 Azure Functions 的表存储触发器

使用Azure Functions在Azure blob中运行exe

如何从 Azure Functions 的 HTTP 响应中删除标准标头?