python-3.xazure-functionsazure-eventgridazure-blob-trigger

Azure function stuck in timeout loop


We have a Azure Function at work that stopped working so I got tasked to debug it and found that it gets stuck in a timeout loop right of the bat. I don't have that much experience with Azure Functions so I thought perhaps a very basic function might work, but gets the same fault with that as well. Using Azurite for storage emulation.

Python 3.11.5, Azure.functions 1.17.0

This is my function:

import logging
import os
import azure.functions as func

# Create a custom logger
logger = logging.getLogger(__name__)

# Create handlers
f_handler = logging.FileHandler('file.log')
f_handler.setLevel(logging.DEBUG)

# Create formatters and add it to handlers
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)

# Add handlers to the logger
logger.addHandler(f_handler)

logger.warning('This is a warning')
logger.error('This is an error')

def main(myblob: func.InputStream):
    filename = os.path.basename(myblob.name)
    content = myblob.read()

    # Your code to process the blob content goes here
    # For example, you can print the blob's filename and length
    print(f"Blob name: {filename}")
    print(f"Blob length: {len(content)} bytes")

host.json

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.0.0, 5.0.0)"
  },
  "singleton": {
    "listenerLockPeriod": "00:00:15" 
  }
  
}

function.json

{
  "scriptFile": "function_app.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "http://127.0.0.1:10000/devstoreaccount1/default/ECO_DAYINV904951960411607774_231019%20from%20231018.xlsx",
      "source": "EventGrid",
      "connection": "UseDevelopmentStorage=true"
    }
  ]
}

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing"
  }
}

I've tried to debug this, but can't get it to stop at a breakpoint, so I need to pause it and at that point it is already in the timeout loop in the common.py function.


Solution

  • I have created an Azure function with a blob trigger using runtime stack Python.

    I have made some changes to your code and executed it successfully. function code:

    logger = logging.getLogger(__name__)
     
    # Create handlers
    f_handler = logging.FileHandler('file.log')
    f_handler.setLevel(logging.DEBUG)
     
    # Create formatters and add it to handlers
    f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    f_handler.setFormatter(f_format)
     
    # Add handlers to the logger
    logger.addHandler(f_handler)
     
    def main(myblob: func.InputStream):
        # Log a message
        logger.info(f"Python blob trigger function processed blob\n"
                    f"Name: {myblob.name}\n"
                    f"Blob Size: {myblob.length} bytes")
     
        filename = os.path.basename(myblob.name)
        content = myblob.read()
     
        # Your code to process the blob content goes here
        # For example, you can print the blob's filename and length
        print(f"Blob name: {filename}")
        print(f"Blob length: {len(content)} bytes")
    

    loca.settings.json:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "your connection string",
        "FUNCTIONS_WORKER_RUNTIME": "python",
        "storepavan3_STORAGE": "your connection string"
      }
    }
    

    host.json:

    {
      "version": "2.0",
      "logging": {
        "applicationInsights": {
          "samplingSettings": {
            "isEnabled": true,
            "excludedTypes": "Request"
          }
        }
      },
      "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.*, 4.0.0)"
      },
      "concurrency": {
        "dynamicConcurrencyEnabled": true,
        "snapshotPersistenceEnabled": true
      }
    }
    

    function.json:

    {
      "scriptFile": "__init__.py",
      "bindings": [
        {
          "name": "myblob",
          "type": "blobTrigger",
          "direction": "in",
          "path": "samples-workitems/{name}",
          "connection": "storepavan3_STORAGE"
        }
      ]
    }
    

    output: enter image description here

    When I put breakpoints in the code, I got hit in the code. check below:

    enter image description here