Azure Functions (Python) blob 输出绑定。当名称只是输入消息的一部分时如何设置名称

tam*_*203 5 python azure azure-storage-blobs azure-functions

我有一个 Azure Functions (Python 3) 函数,它从服务总线队列中获取一条消息,并因此在容器中创建一个 Blob。

函数触发器是服务总线消息。此消息是具有多个属性的 JSON 对象,其中之一是 blob 名称。

文档在绑定中提出了类似的建议

{
      "name": "outputblob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
Run Code Online (Sandbox Code Playgroud)

但这表明触发消息只包含 blob 名称。我不能将消息单独设为 blob 名称,因为我需要消息中的其他属性来确定要执行的操作/将哪些数据放入 blob。

有什么方法可以使用输出绑定来解决这个问题吗?

谢谢。

Geo*_*hen 7

是的,这是可以做到的。您可以使用触发器 json 数据中的 json 值设置输入和输出绑定路径。下面是我的function.json。使用服务总线触发器获取输入 blob 名称和输出 blob 名称,然后将输入 blob 写入输出 blob。您也可以通过这种方式设置容器名称。

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "msg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "myqueue",
      "connection": "servicebuscon"
    },
    {
      "name": "inputblob",
      "type": "blob",
      "path": "inputcontainer/{blobname}",
      "connection": "AzureWebJobsStorage",
      "direction": "in"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "path": "outputcontainer/{outblobname}",
      "connection": "AzureWebJobsStorage",
      "direction": "out"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

下面是功能代码。

import logging

import azure.functions as func
import json, os


def main(msg: func.ServiceBusMessage,inputblob: func.InputStream,outputblob: func.Out[bytes]) -> func.InputStream:
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))
    jsonData= json.loads(inputblob.read())
    logging.info(jsonData)
    outputblob.set(str(jsonData))
Run Code Online (Sandbox Code Playgroud)

我设置了如下消息的服务总线消息。

在此处输入图片说明

这是结果图片。您可以找到控制台中显示的输入 blob json 数据,我检查了创建输出 blob 的容器。

在此处输入图片说明

  • 我正在尝试通过 HTTP 触发器来执行此操作,负载中包含 json 数据。我们如何“设置”outputblob 文件名? (3认同)
  • 谢谢。文档并没有明确说明这一点,但这正是我想做的。 (2认同)