0

I have JSON documents being uploaded into an Azure Blob Container and I have written an Azure Python Function to write the JSON into CosmosDB. The triggering works fine, but I get an error. Here is the Python function:

import logging
import azure.functions as func

def main(myblob: func.InputStream, doc: func.Out[func.Document]):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
    
    json_data = myblob.read()
    try:
        # Store output data using Cosmos DB output binding
        doc.set(func.Document.from_json(json_data))
    except Exception as e:
        logging.info(f"Error: {e}")
        print('Error:')
        print(e)

Here is the function.json file:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "cloud-save-blob-container/{name}",
      "connection": "cloudsavestorage_STORAGE"
    },
    {
      "type": "cosmosDB",
      "name": "userJson",
      "databaseName": "ToDoList",
      "collectionName": "Items",
      "createIfNotExists": false,
      "connectionStringSetting": "MyCosmosDBConnectionString",
      "direction": "out"
    }
  ],
  "disabled": false
}

This the error I see in the Azure Portal:

Result: Failure Exception: FunctionLoadError: cannot load the JsonBlobTrigger1 function: the following parameters are declared in Python but not in function.json: {'doc'} Stack: File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py", line 290, in _handle__function_load_request self._functions.add_function( File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/functions.py", line 112, in add_function raise FunctionLoadError(

Thanks for assistance.

1 Answer 1

1

I have fixed the problem and my Python Function gets triggered and puts data into Cosmos DB just like I want. The problem was with my Python code. I had "doc" in two places where it should have been "userJson". One, in the "def main(...):" line and again in the "try:" block, "doc.set(...)", which didn't match the Output binding name in function.json. Once I changed the two occurrences of "doc" to "userJson" it worked.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.