Search code examples
pythonazureazure-functionsazure-storage

Azure function: System.InvalidOperationException: Storage account connection string 'does not exist


I have written an azure function, currently the azure function is acting as Webhook Consumer. The job of the function is to read Webhook events and save into azure storage. I am using an HTTP trigger template to get the job done. I am able to receive the events from the Webhook, but when I try to write to azure storage it is giving me below error.

I tried the option mentioned in this post, but no luck still getting the same error.

System.InvalidOperationException: Storage account connection string 'AzureWebJobs<AzureStorageAccountName>' does not exist. Make sure that it is a defined App Setting.

Below is my function.json file

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "blob",
      "name": "outputblob",
      "path": "test/demo",
      "direction": "out",
      "connection": "<AzureStorageAccountName>"
    }    
  ]
}

init.py

import logging

import azure.functions as func

def main(req: func.HttpRequest,outputblob: func.Out[str]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = 'some_name'
    if not name:
        try:
            req_body = 'req_body_test'#req.get_json()
        except ValueError:
            pass
    else:
        name = 'name'#req_body.get('name')
    
    print(str(req.get_json()))

    outputblob.set(str(req.get_json()))

Solution

  • enter image description here

    Please make sure you have already add the connection string to the local.settings.json on local or configuration settings on azure.

    Please test below code and settings files:

    __init__.py

    import logging
    
    import azure.functions as func
    
    
    def main(req: func.HttpRequest,outputblob: func.Out[func.InputStream]) -> func.HttpResponse:
        outputblob.set("this is a test.")
        return func.HttpResponse(
                "Test.",
                status_code=200
        )
    

    function.json

    {
      "scriptFile": "__init__.py",
      "bindings": [
        {
          "authLevel": "anonymous",
          "type": "httpTrigger",
          "direction": "in",
          "name": "req",
          "methods": [
            "get",
            "post"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "$return"
        },
        {
          "name": "outputblob",
          "type": "blob",
          "path": "test/demo",
          "connection": "MyStorageConnectionAppSetting",
          "direction": "out"
        }
      ]
    }
    

    local.settings.json

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "",
        "FUNCTIONS_WORKER_RUNTIME": "python",
        "MyStorageConnectionAppSetting":"DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxxxxx;EndpointSuffix=core.windows.net"
      }
    }
    

    On azure:

    enter image description here