ire*_*ire 2 amazon-web-services aws-glue aws-event-bridge
我有一个使用 Python 的 lambda 函数。它连接到一个 EventBridge 规则,每次 Glue 表发生更改时都会触发该规则。
它输出的事件模式看起来像这样:
{
"version":"0",
"detail":{
"databaseName":"flights-db",
"typeOfChange":"UpdateTable",
"tableName":"flightscsv"
}
}
Run Code Online (Sandbox Code Playgroud)
我想将此输出中的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)
}
Run Code Online (Sandbox Code Playgroud)
我期望从 return 语句中获得事件模式输出event,但事实并非如此。
测试此函数时,返回输出为event:
{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}
该键和值在函数的测试模式中定义如下。
如何将事件模式中的值获取到变量?我是否需要配置测试模式才能获取结果event?
此处event列出了 CloudWatch (CW) Events/Event Bridge (EB) 生成的对象。当 EB 触发您的函数时,这些事件将被传递给您的函数。
您的 EB 事件模式应该是:
{
"source": ["aws.glue"],
"detail-type": ["Glue Data Catalog Table State Change"]
}
Run Code Online (Sandbox Code Playgroud)
上面的内容应该与您的glue目录中任何表格的更改相匹配。应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"
}
}
Run Code Online (Sandbox Code Playgroud)
因此,要获取tableNamelambdadatabaseName函数,可以是:
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)
}
Run Code Online (Sandbox Code Playgroud)
为了进行测试,您可以在 lambda 测试窗口中设置示例 EB 事件:
| 归档时间: |
|
| 查看次数: |
6963 次 |
| 最近记录: |