Python Function App的Blob触发器未触发

时间:2019-03-13 07:11:51

标签: python function azure blob azure-triggers

我正在使用Ubuntu 16.04.5 LTS本地计算机通过CLI和Azure Functions Core Tools(Ref)创建Python Function App并将其发布到Azure。我已经配置了Blob触发器,并且我的function.json文件看起来像这样:

{
"disabled": false,
"scriptFile": "__init__.py",
"bindings": [
{
  "name": "<Blob Trigger Name>",
  "type": "blobTrigger",
  "direction": "in",
  "path": "<Blob Container Name>/{name}",
  "connection": "<Connection String having storage account and key>"
},
{
  "name": "outputblob",
  "type": "blob",
  "path": "<Blob Container Name>",
  "connection": "<Connection String having storage account and key>",
  "direction": "out"
}
]
}

我的 init .py函数如下所示。

def main(<Blob Trigger Name>: func.InputStream, doc: func.Out[func.Document]):
logging.info(f"Python blob trigger function processed blob \n"
             f"Name: {<Blob Trigger Name>.name}\n"
             f"Blob Size: {<Blob Trigger Name>.length} bytes")
logging.basicConfig(filename='example.log',level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')

# Write text to the file.
file = open("QuickStart.txt",  'w')
file.write("Hello, World!")
file.close()

# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='<Storage Account Name>', account_key='<Storage Account Key>')
container_name='<Blob Container Name>'

# Set the permission so the blobs are public.
block_blob_service.set_container_acl(container_name, public_access=PublicAccess.Container)

# Upload the created file, use local_file_name for the blob name
block_blob_service.create_blob_from_path(container_name, 'QuickStart.txt', '')

Function App是“ Always On”,但是当我在存储中上传Blob时,不会触发该功能。另一个参考链接是这个(Ref).

怎么了?

感谢和问候, 沙申克

3 个答案:

答案 0 :(得分:0)

我尝试通过使用带有默认模板的Visual Studio代码在python中创建示例函数应用程序来重现此问题,并最终将其部署在Linux中。它对我有用。

这是我在pyhton文件中编写的代码。

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": "samples-workitems/{name}",
      "connection": ""
    }
  ]
}

我正在使用2.0 Azure function,python 3.6和Azure Functions Core Tools版本2.2.70

这是我使用的参考链接:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-function-python

请尝试使用它,看看是否有帮助。

答案 1 :(得分:0)

您是否检查过local.settings.json(存储帐户的连接字符串)是否也在Azure的功能应用程序中?默认情况下,它们不是从本地计算机发布。

您可以在门户中手动配置它们,也可以使用 publish-local-settings 标志:

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

答案 2 :(得分:0)

在py脚本的主要定义中,您具有doc的第二个参数:func.Out [func.Document],该参数用于cosmos db。这应该是输出流,因为它的类型为blob