在Azure函数上发布时无法运行Blob触发器

时间:2019-08-06 10:39:47

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

我已经在Visual Studio中创建了一个简单的Blob触发器,其 init .py如下所示

import logging

import azure.functions as func


def main(myblob: func.InputStream):
   logging.info(f"Python blob trigger function processed blob \n"
             f"Name: {myblob.name}\n"
             f"Blob Size: {myblob.length} bytes")

和function.json如下

{
  "scriptFile": "__init__.py",
  "bindings": [
     {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "mycontainer/{name}",
      "connection": "AzureWebJobsStorage"
     }
    ]
}

local.settings.json看起来如下

{
  "IsEncrypted": false,
  "Values": {
  "FUNCTIONS_WORKER_RUNTIME": "python",
  "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;  AccountName=****;AccountKey=*****;EndpointSuffix=core.windows.net"
   }
}

此代码与本地计算机上的Visual Studio正常工作。但是当在azure门户上发布时,它无法从function.json读取blob路径,并给出

错误
Invalid blob path specified : ''. Blob identifiers must be in the format 'container/blob'.

我已经发布了使用命令来推送包含local.settings.json的函数。

func azure functionapp publish FUNCTIONNAME --build-native-deps --publish-local-settings -i

。 任何人都可以指导我发布后所缺少的内容。

1 个答案:

答案 0 :(得分:0)

您是否使用Azure门户中的运行按钮来测试功能?这种对Blob触发器的工作方式是,在右侧的“测试”选项卡中,您可以指定要为其手动发送触发事件的Blob的名称,以强制您的函数运行:

enter image description here

这个想法是,您应该编辑请求正文框的内容,并将其放入帐户中有效Blob的路径。这样,触发器将运行并找到blob并进行检索。因此,如果您不修改请求正文框,那么它将查找一个blob,但找不到它并抛出404错误。

还请查看以下用于配置容器名称的文档

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#storage-blob-trigger

还请确认您的设置是否已在门户中发布。

func azure functionapp publish "functionname" --publish-local-settings

希望有帮助。