使用 Python 的 Azure Functions - 未找到工作职能

问题描述 投票:0回答:1

我正在尝试创建一个应用程序(我们称之为“uploder”),该应用程序接收Azure存储队列消息,执行一些工作但没有输出。但是,我遇到了这个一般错误,导致我的应用程序无法运行:

No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

当我尝试部署函数应用程序时,这是进入 Azure Application Insights 记录器的唯一有用信息。

我为此制作了一个不同的配套应用程序,运行良好。这是一个纯 python Web 项目(Flask),部署完全按照预期进行。然而,我收到此错误的原始应用程序“uploader”使用了与主 python 代码集成的 C++ 模块,这让我相信这种差异导致了“uploader”的问题。

我联系了 Azure 支持,他们发现了这个问题:

GLIBCXX_3.4.29' not found (required by <in-house package>.cpython-311-x86_64-linux-gnu.so)
。我尝试了许多不同的 python 版本,认为也许用于构建此应用程序的 GLIBC 版本与尝试在云上运行该应用程序的版本不兼容。我从 Python 3.11 升级到 3.9,状态没有变化,仍然是通用消息“未找到工作功能...”。

最近,我的 Azure 联系人表示,也许我的绑定扩展可能是问题所在。然而,我能找到的 Python 唯一绑定如下:

在host.json中:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  },
...

在 function_app.py 中:

import azure.functions as func

app = func.FunctionApp()


@app.function_name("upload_tool_app")
@app.queue_trigger(
    arg_name="message",
    queue_name="<queue_name>",
    connection="<connection_string_name>",
)
def main(message: func.QueueMessage):
    # Do Stuff...

在 function.json 中:

{
  "scriptFile": "function_app.py",
  "bindings": [
    {
      "name": "message",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "<queue_name>",
      "connection": "<connection_string_name>"
    }
  ]
}

我是否遗漏了一些明显的东西?我已经在努力让这个应用程序托管一个多星期了,我准备认输了......

另外,我应该补充一点,当我尝试使用

func start
在本地运行时,效果很好。


我也已经检查了以下设置:

  • FUNCTIONS_WORKER_RUNTIME
    (蟒蛇)
  • PYTHON_ISOLATE_WORKER_DEPENDENCIES
    (1)
  • FUNCTIONS_EXTENSION_VERSION
    (~4)

我的所有依赖项都已考虑在内(我创建了一个新的 venv,并且仅安装了 ADO Pipeline 任务中概述的内容)。

python azure binding azure-functions azure-storage-queues
1个回答
0
投票

function_app.py
中的函数代码适用于Python V2。如果您使用的是Python V2 Azure函数,则不需要
function.json
。因为
function.json
仅适用于 Python V1。

  • 参考MSDOC并相应地修改您的代码。

我创建了Python V2队列触发器Azure函数。

文件夹结构:

|   .funcignore
|   .gitignore
|   function_app.py
|   host.json
|   local.settings.json
|   requirements.txt
|
+---.vscode
|       extensions.json
|       launch.json
|       settings.json
|       tasks.json
|
+---env

function_app.py:

app = func.FunctionApp()

@app.function_name("myfunction")
@app.queue_trigger(arg_name="azqueue", queue_name="queue1",
                               connection="QueueConnectionString") 
def queue_trigger(azqueue: func.QueueMessage):
    logging.info('Python Queue trigger processed a message: %s',
                azqueue.get_body().decode('utf-8'))

local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "QueueConnectionString":"<storage_connection_string>"
  }
}

主机.json:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}
  • 将函数部署到Azure Function App(消费计划)。

enter image description here

传送门:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.