如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

huangapple go评论70阅读模式
英文:

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

问题

> 结果:失败 异常:ImportError:无法从'azure.eventgrid'导入名称'EventGridPublisherClient'。

这是HTTP触发器的代码:

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触发器函数处理了一个请求。')

    # 解析请求体
    # req_body = req.get_json()

    # 从环境变量中获取Event Grid主题端点和密钥
    topic_endpoint = os.environ.get('EVENT_GRID_TOPIC_ENDPOINT')
    topic_key = os.environ.get('EVENT_GRID_TOPIC_KEY')

    # 创建Event Grid发布者客户端
    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 Grid主题。", status_code=200)

requirements.txt文件如下:

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

在本地运行正常,但在部署到Azure时出现上述错误。我一直在循环中,似乎找不到任何有用的信息来帮助解决这个问题。有人有什么想法吗?

英文:

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?

答案1

得分: 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,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

I run the above code and got below results:

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Then, I deployed above code to functionapp as below,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Select the functionapp that you want to deploy,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Click on Deploy option,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Successfully deployed to functionapp in Azure portal as below,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

英文:

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) -&gt; func.HttpResponse:
    logging.info(&#39;Python HTTP trigger function processed a request.&#39;)

    topic_endpoint = os.environ.get(&#39;EVENT_GRID_TOPIC_ENDPOINT&#39;)
    topic_key = os.environ.get(&#39;EVENT_GRID_TOPIC_KEY&#39;)
    
    credential = AzureKeyCredential(topic_key)
    client = EventGridPublisherClient(topic_endpoint, credential)

    event = EventGridEvent(
        event_type=&quot;MyCustomEventType&quot;,
        subject=&quot;MyCustomSubject&quot;,
        data={
            &quot;message&quot;: &quot;Hello, Event Grid!&quot;
        },
        data_version=&quot;1.0&quot;
    )

    client.send(event)
    return func.HttpResponse(&quot;Event published to Event Grid topic.&quot;, status_code=200)

local.setting.json:

{
  &quot;IsEncrypted&quot;: false,
  &quot;Values&quot;: {
    &quot;AzureWebJobsStorage&quot;: &quot;&lt;your-storage-account-connection-string&gt;&quot;,
    &quot;FUNCTIONS_WORKER_RUNTIME&quot;: &quot;python&quot;,
    &quot;EVENT_GRID_TOPIC_KEY&quot;: &quot;&lt;your-event-grid-topic-key&gt;&quot;,
    &quot;EVENT_GRID_TOPIC_ENDPOINT&quot;: &quot;&lt;your-event-grid-topic-endpoint&gt;&quot;
  }
}

requirement.txt:

azure-functions
azure-eventgrid==4.0.0
azure-core&gt;=1.18.0

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

I run the above code and got below results:

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Then, I deployed above code to functionapp as below,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Select the functionapp that you want to deploy,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Click on Delpoy option,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

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

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

Successfully deployed to functionapp in Azure portal as below,

如何在Azure HTTP 触发器函数中修复对 ‘EventGridPublisherClient’ 的 ImportError?

huangapple
  • 本文由 发表于 2023年5月28日 12:11:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/76349904.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定