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?
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,
I run the above code and got below results:
With the above URL, I can able to see output at browser as below,
Then, I deployed above code to functionapp as below,
Select the functionapp that you want to deploy,
Click on Delpoy option,
The HTTP trigger function deployed successfully, Click on View output,
The output shows that the HTTP trigger function is successfully deployed to functionapp as below,
Successfully deployed to functionapp in Azure portal as below,