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。
有什么方法可以使用输出绑定来解决这个问题吗?
谢谢。
是的,这是可以做到的。您可以使用触发器 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 的容器。