如何将 blob 名称传递给不同的 azure python 函数
How to pass blob name to different azure python functions
我有 3 个 azure 函数,第一个是 blob 触发器,第二个是服务总线队列触发器,第三个是服务总线主题函数。这些函数 运行 很好,但现在我需要在所有 3 个函数中使用 blob 名称,这有助于触发第一个函数。在 blob 触发器函数中,我可以使用输入绑定的路径变量获取 blob 名称,但我无法找到将此 blob 名称变量传递给其他两个函数的方法。是否可以在其他函数的绑定中将此变量作为动态传递?
如果您谈论的是通过代码传递动态 blob 名称,那么这是不可能的。这是因为blob input binding或blob trigger的blob name值被设计为const。(因此必须在编译前设置。)
唯一的办法就是利用设计之初留下的机制
您可以执行如下操作:
__init__.py
import logging
import azure.functions as func
def main(msg: func.ServiceBusMessage, outputblob: func.Out[func.InputStream]):
logging.info('Python ServiceBus queue trigger processed message: %s',
msg.get_body().decode('utf-8'))
outputblob.set('111')
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "serviceBusTrigger",
"direction": "in",
"queueName": "myqueue",
"connection": "bowman1012_SERVICEBUS"
},
{
"name": "outputblob",
"type": "blob",
"path": "{mypath}/111.txt",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
]
}
您可以发送 json 格式消息到服务总线:
{
"mypath":"bowman"
}
然后您可以将 blob 发送到您想要的动态路径:
总之,无法使用编码。只能通过azure函数设计之初留下的东西来实现。
我有 3 个 azure 函数,第一个是 blob 触发器,第二个是服务总线队列触发器,第三个是服务总线主题函数。这些函数 运行 很好,但现在我需要在所有 3 个函数中使用 blob 名称,这有助于触发第一个函数。在 blob 触发器函数中,我可以使用输入绑定的路径变量获取 blob 名称,但我无法找到将此 blob 名称变量传递给其他两个函数的方法。是否可以在其他函数的绑定中将此变量作为动态传递?
如果您谈论的是通过代码传递动态 blob 名称,那么这是不可能的。这是因为blob input binding或blob trigger的blob name值被设计为const。(因此必须在编译前设置。)
唯一的办法就是利用设计之初留下的机制
您可以执行如下操作:
__init__.py
import logging
import azure.functions as func
def main(msg: func.ServiceBusMessage, outputblob: func.Out[func.InputStream]):
logging.info('Python ServiceBus queue trigger processed message: %s',
msg.get_body().decode('utf-8'))
outputblob.set('111')
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "serviceBusTrigger",
"direction": "in",
"queueName": "myqueue",
"connection": "bowman1012_SERVICEBUS"
},
{
"name": "outputblob",
"type": "blob",
"path": "{mypath}/111.txt",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
]
}
您可以发送 json 格式消息到服务总线:
{
"mypath":"bowman"
}
然后您可以将 blob 发送到您想要的动态路径:
总之,无法使用编码。只能通过azure函数设计之初留下的东西来实现。