繁体   English   中英

Azure 函数未执行

[英]Azure function doesn't get executed

我目前正在研究一个应该通过队列触发器执行的 Azure 函数。 问题是它不能正常工作。

这是我的__init__.py文件:

all imports
...
def main(req: func.QueueMessage, res: func.Out[str]) -> func.QueueMessage:

    print(req)

    cmi_guid = req.get_body().decode('utf-8')
    
    logging.info('Received message: %s', req.get_body().decode('utf-8'))

    logging.info('Received message FULL: %s', req)

    tempFilePath = tempfile.gettempdir()
    print(tempFilePath)

    
    infile = cmi_guid + '.xlsx'
    outfile = cmi_guid + '_output.xlsx'
    local_in_file_path = os.path.join(tempFilePath, infile)
    local_out_file_path = os.path.join(tempFilePath, outfile)

    logging.info('Got temp file path: %s', tempFilePath)

    delete_files(tempFilePath, ".xlsx")
    logging.info('Deleted xlsx files in temp directory')

    blob_service_client = BlobServiceClient.from_connection_string(<MyConnectionString>)
    container_name = "cmi"
    # Create a blob client using the local file name as the name for the blob
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=infile)

    with open(local_in_file_path, "wb") as download_file:
        download_file.write(blob_client.download_blob().readall())

    logging.info('Received input file from blob')

    df_out = start_forecast(local_in_file_path)
    with pd.ExcelWriter(local_out_file_path, engine='xlsxwriter') as writer:  
        df_out.to_excel(writer, sheet_name='Forecast', index=False)

    blob_client = blob_service_client.get_blob_client(container=container_name, blob=outfile)

    try:
        with open(local_out_file_path, "rb") as data:
            blob_client.upload_blob(data)
    except Exception as e:
        logging.info('Exception when uploading blob: %s', e)

    logging.info('Done uploading blob to storage')
    # res.set(cmi_guid)
    return cmi_guid

那是我的function.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "req",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "cmi-input",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "res",
      "type": "queue",
      "direction": "out",
      "queueName": "cmi-output",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

那是我的local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": <MyConnectionString>,
    "MyStorageAccountConnection": <MyConnectionString>
  }
}

我为local.settings.json的每个值创建了一个应用程序设置。

当我现在将文件上传到 cmi-input 队列时,Azure 函数应该实际启动,并且文件应该加载到 Blob 容器中(写在代码中)。
然而,什么也没有发生。 我是否忘记了任何配置,或者是否有必要以其他方式运行它们?

当我尝试直接在 Visual Studio Code 中启动该函数时,我只是得到了这个:它卡住了,直到我停止它之前什么都没有发生......终端中的消息

谢谢你的帮助!

ServiceBusTrigger需要以下形式的服务总线连接字符串

Endpoint=sb:// ... SharedAccessKeyName ... SharedAccessKey

如果使用共享访问密钥进行连接。 MyConnectionString是用于存储 blob 的存储连接。

您可以在Azure python 示例中看到服务总线连接字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM