1

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?

Tobbi
  • 146
  • 7
  • 1
    Any reason why you are trying to use the SDK? Why not use the Azure function Eventgrid output binding? It was made precisely for this purpose. Then you don't even need to include the libraries in your requirements. It's all included in the Azure functions extensions bundle. https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid-output?pivots=programming-language-python&tabs=in-process%2Cextensionv3 – Anupam Chand May 29 '23 at 05:11
  • Yes, the output binding wasn't working for me either, authentication issue raised in a separate question on this forum. For now, I just need to get this to work. – Tobbi May 29 '23 at 14:42

1 Answers1

1

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

Dasari Kamali
  • 811
  • 2
  • 2
  • 6
  • You made some minor changes to what I had, I copied and it works for me now as well, thanks! – Tobbi May 29 '23 at 14:43