访问Blob存储而不绑定?

时间:2017-07-18 00:30:49

标签: python azure azure-storage-blobs azure-functions

我使用队列触发器传递一些关于我想用Azure Functions运行的作业的数据(我使用python)。部分数据是我想从blob存储中提取的文件的名称。因此,在输入绑定中声明文件路径/名称似乎不是正确的方向,因为函数在获得队列触发器之前不会拥有文件名。

我尝试过的一种方法是使用azure-storage sdk,但我不确定如何在Azure Function中处理身份验证。

还有另一种方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

在Function.json中,blob输入绑定可以引用队列有效负载中的属性。队列有效负载需要是JSON对象 由于这是function.json,因此适用于所有语言。

请参阅https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings

上的官方文档

例如,在你的function.json中,

$scope.searchPo = function (id) {
       var match = $filter('filter')($scope.array, {po: id});
       return match;
});

$scope.array = 
[[{"po":1},{"po":2},{"po":3}],
[{"po":11},{"po":12},{"po":13}],
[{"po":21},{"po":22},{"po":23}]]

如果您的队列消息有效负载是:

{
  "name": "imageSmall",
  "type": "blob",
  "path": "container/{filename}",
}

然后blob路径表达式中的{filename}标记将被替换。

答案 1 :(得分:0)

通常,您在功能应用程序的应用程序设置中存储连接字符串/帐户密钥,然后通过访问环境变量来读取它们。我没有在Azure中使用python,但我相信它看起来像

#

我找到了one example的python函数,它可以满足您的要求:队列触发器+ blob操作。

答案 2 :(得分:0)

可以(也)使用应用程序设置来存储机密。

在Azure中,转到Azure功能应用服务,然后单击“应用程序设置”。然后,向下滚动到“应用程序设置”列表。此列表由键值对组成。添加密钥,例如MY_CON_STR,并将实际连接字符串作为值。

此时不要忘记点击保存

现在,在您的应用程序(此示例的函数)中,您可以使用其键加载存储的值。例如,在python中,您可以使用:

os.environ['MY_CON_STR']

请注意,由于设置未在本地保存,因此您必须从Azure中执行该设置。遗憾的是,Azure Functions应用程序不包含web.config文件。