pythonazureazure-functionsazure-http-trigger

How to fix ImportError with 'EventGridPublisherClient' in Azure HTTPTrigger function?


Can anyone help me with the following error:

Result: Failure Exception: ImportError: cannot import name 'EventGridPublisherClient' from 'azure.eventgrid'

This is the code for the HTTPTrigger:

import os
import logging
from azure.core.credentials import AzureKeyCredential
from azure.eventgrid import EventGridPublisherClient, EventGridEvent
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    # Parse request body
    #req_body = req.get_json()

    # Get Event Grid topic endpoint and key from environment variables
    topic_endpoint = os.environ.get('EVENT_GRID_TOPIC_ENDPOINT')
    topic_key = os.environ.get('EVENT_GRID_TOPIC_KEY')
    

    # Create Event Grid publisher client
    credential = AzureKeyCredential(topic_key)
    client = EventGridPublisherClient(topic_endpoint, credential)

    # Create an event
    event = EventGridEvent(
        event_type="MyCustomEventType",
        subject="MyCustomSubject",
        data={
            "message": "Hello, Event Grid!"
        },
        data_version="1.0"
    )

    # Publish the event
    client.send(event)

    # Return a response
    return func.HttpResponse("Event published to Event Grid topic.", status_code=200)

The requirements.txt looks like this:

urllib3
uplink
requests
azure-functions
azure
azure-eventgrid
azure-core

Running locally works fine but when I deploy to Azure I get the error above. I'm going in circles and don't seem to find any useful information to help with this. Anyone has an idea?


Solution

  • I tried to Deploy Azure Function HTTP Trigger with the below code and it was successful.

    Code:

    import os
    import logging
    from azure.core.credentials import AzureKeyCredential
    from azure.eventgrid import EventGridPublisherClient, EventGridEvent
    import azure.functions as func
    
    def main(req: func.HttpRequest) -> func.HttpResponse:
        logging.info('Python HTTP trigger function processed a request.')
    
        topic_endpoint = os.environ.get('EVENT_GRID_TOPIC_ENDPOINT')
        topic_key = os.environ.get('EVENT_GRID_TOPIC_KEY')
        
        credential = AzureKeyCredential(topic_key)
        client = EventGridPublisherClient(topic_endpoint, credential)
    
        event = EventGridEvent(
            event_type="MyCustomEventType",
            subject="MyCustomSubject",
            data={
                "message": "Hello, Event Grid!"
            },
            data_version="1.0"
        )
    
        client.send(event)
        return func.HttpResponse("Event published to Event Grid topic.", status_code=200)
    

    local.setting.json:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "<your-storage-account-connection-string>",
        "FUNCTIONS_WORKER_RUNTIME": "python",
        "EVENT_GRID_TOPIC_KEY": "<your-event-grid-topic-key>",
        "EVENT_GRID_TOPIC_ENDPOINT": "<your-event-grid-topic-endpoint>"
      }
    }
    

    requirement.txt:

    azure-functions
    azure-eventgrid==4.0.0
    azure-core>=1.18.0
    

    I added EVENT_GRID_TOPIC_ENDPOINT and eventgridtopickey in Application.settings in Configuration functionapp at azure portal,

    enter image description here

    I run the above code and got below results:

    enter image description here

    With the above URL, I can able to see output at browser as below,

    enter image description here

    Then, I deployed above code to functionapp as below,

    enter image description here

    Select the functionapp that you want to deploy,

    enter image description here

    Click on Delpoy option,

    enter image description here

    The HTTP trigger function deployed successfully, Click on View output,

    enter image description here

    The output shows that the HTTP trigger function is successfully deployed to functionapp as below,

    enter image description here

    Successfully deployed to functionapp in Azure portal as below,

    enter image description here