I'm trying to make an application (let's call it "uploder") that takes in Azure Storage Queue messages, does some work and has no output. However, I'm getting this generic error that's preventing my app from running:
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.).
Which is the only piece of useful information that is making it to Azure Application Insights logger when I try to deploy my functions app.
I made a different companion app to this that runs fine. It's a pure-python web project (Flask) and deployment went exactly as expected. However, the original app--"uploader"--where I'm getting this error, uses a C++ module integrated with the main python code, which leads me to believe that this difference is causing the issue with "uploader".
I contacted Azure support and they were able to dig this up:
GLIBCXX_3.4.29' not found (required by <in-house package>.cpython-311-x86_64-linux-gnu.so)
. I tried many different python versions, thinking that maybe the GLIBC version that was used to build this app was not compatible with the version that was trying to run the app on the cloud. I went from Python 3.11 - 3.9 with no change in status, still the generic message "No job functions found...".
More recently, my Azure contact has said that maybe my binding extensions might be the issue. However, the only binding that I can find for Python is as follows:
In host.json:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
...
In 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...
In function.json:
{
"scriptFile": "function_app.py",
"bindings": [
{
"name": "message",
"type": "queueTrigger",
"direction": "in",
"queueName": "<queue_name>",
"connection": "<connection_string_name>"
}
]
}
Is there something obvious that I am missing? I have been struggling with getting this one app hosted for over a week now and I am about ready to throw in the towel...
Also, I should add that this works just fine when I try to run locally using func start
.
I have also already checked the settings for:
FUNCTIONS_WORKER_RUNTIME
(python)PYTHON_ISOLATE_WORKER_DEPENDENCIES
(1)FUNCTIONS_EXTENSION_VERSION
(~4)
All my dependencies are accounted for (I created a new venv and only installed what was outlined in the ADO Pipeline task).
function.json
is not needed in Python V2 function.azure-core azure-common azure-cosmosdb-table azure-storage-blob azure-storage-queue azure-appconfiguration azure-identity python-dotenv azure-keyvault-secrets opencensus-ext-azure
Plus two in-house packages with no additional requirements.