如何解决在 lambda 函数中使用 EventBridge 事件模式字符串
我有一个使用 Python 的 lambda 函数。 它与 EventBridge 规则相关联,该规则在每次 Glue 表发生更改时触发。
它输出的事件模式如下所示:
{
"version":"0","detail":{
"databaseName":"flights-db","typeOfChange":"UpdateTable","tableName":"flightscsv"
}
}
我想将此输出中的 tableName
和 databaseName
值作为变量放入函数中。
我的 Lambda 函数:
import json
import boto3
def lambda_handler(event,context):
boto3_version = boto3.__version__
return_statement = 'Boto3 version: ',boto3_version,\
'Event output: ',event
return {
'statusCode': 200,'body': json.dumps(return_statement)
}
我希望在我的 return 语句中从 event
获得事件模式输出,但事实并非如此。
测试此函数时,event
的返回输出为:
{\"key1\": \"value1\",\"key2\": \"value2\",\"key3\": \"value3\"}
这个键和值在函数的测试模式中是这样定义的。
如何将事件模式中的值获取到变量中?
我是否需要配置测试模式才能将结果导入 event
?
解决方法
由 CloudWatch (CW) Events / Event Bridge (EB) 生成的 event
对象列在 here 中。当 EB 将要触发这些事件时,这些事件将传递给您的函数。
您的 EB 事件模式应该是:
{
"source": ["aws.glue"],"detail-type": ["Glue Data Catalog Table State Change"]
}
以上内容应与胶水目录中任何表格的更改相匹配。 event
应与以下类似:
{
"version": "0","id": "2617428d-715f-edef-70b8-d210da0317a0","detail-type": "Glue Data Catalog Table State Change","source": "aws.glue","account": "123456789012","time": "2019-01-16T18:16:01Z","region": "eu-west-1","resources": [
"arn:aws:glue:eu-west-1:123456789012:table/d1/t1"
],"detail": {
"databaseName": "d1","changedPartitions": [
"[C.pdf,dir3]","[D.doc,dir4]"
],"typeOfChange": "BatchCreatePartition","tableName": "t1"
}
}
因此,要获得 tableName
和 databaseName
,您的 lambda 函数可以是:
import json
import boto3
def lambda_handler(event,context):
boto3_version = boto3.__version__
print(event)
table_name = event['detail']['tableName']
database_name = event['detail']['databaseName']
print(table_name,database_name)
return_statement = {
'boto3_version': boto3_version,'table_name': table_name,'database_name': database_name
}
return {
'statusCode': 200,'body': json.dumps(return_statement)
}
为了进行测试,您可以在 lambda 测试窗口中设置示例 EB 事件:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。