如何将 AWS EventBridge 与 Python Lambda 和 Boto 结合使用?



我玩了一下AWS,最终选择了AWS EventBridge。我试图编写一个 Lambda 进行测试和理解,但一开始就出现了错误。

import json, boto3
def lambda_handler(event, context):
client = boto3.client('events')
response = client.create_event_bus(
Name='TestEventBus',
EventSourceName='SomeSoucreEvent'
)
return {
'statusCode': 200,
'body': json.dumps(response)
}

我收到以下错误消息:

响应: { "errorMessage": "'CloudWatchEvents' 对象没有属性 'create_event_bus'", "错误类型": "属性错误", "堆栈跟踪":[ " 文件 \"/var/task/lambda_function.py\",第 5 行,在 lambda_handler 响应中 = client.create_event_bus(", " File \"/var/runtime/botocore/client.py\",第 563 行,在getattr self 中。名称、项目(" ] }

在 Lambda 中运行的 Boto 版本是 1.9.42

刚刚检查过,boto3 现在有一个 EventBridge 客户端。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/events.html

import boto3
client = boto3.client('events')

首先,使用您的代码

client = boto3.client('events') 
response = client.create_event_bus(

您正在访问 CloudWatchEvents,而不是 AWS EventBridge(如错误消息所述 - 原因如下所述(。

"CloudWatchEvents' object has no attribute 'create_event_bus'"

此外,EventBridge 在 Python 和 JS lambda 环境中尚不可用(通过默认包(。我假设 AWS 没有在 lambda 中运行最新版本的开发工具包,您可以将自己的代码作为捆绑包上传或使用 lambda 层并安装您的自定义 NPM 依赖项(假设您将以 JS 形式运行它(。这样,您就可以安装最新的开发工具包版本的AWS(NPM(并使用EventBridge(EventBridge是在一个月前宣布的(。

此外,您指向文档的链接,https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/events.html#eventbridge,声明它是(截至目前(版本1.9.205(另请参阅URL中的/api/latest/(。

如果您打开 1.9.42 的文档,即您添加到报告中的版本(我假设您从 lambda 中获取了这个(,通过此 URL,https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/events.html#eventbridge ,您将看到版本1.9.42没有实现EventBridge

它只具有CloudWatchEvents功能,这就是为什么您只能使用boto3访问EventBridge的原因(截至目前(。您必须等到 AWS 更新 lambda 上的 boto3 版本,或者您必须手动部署捆绑包并运行它。

最新更新