AWS文档中指出,单个通知事件的记录只会来自于同一个事件源。具体来说,一条记录中的所有字段都会来自于同一个事件源,因此记录中的resource-type等字段应该与此事件源相匹配。以下是一个简单的Python代码用例,可以通过Amazon S3 PutObject操作将一个事件源的多个事件写入同一个通知:
import json
import boto3
def lambda_handler(event, context):
s3 = boto3.client('s3')
for record in event['Records']:
bucket_name = record['s3']['bucket']['name']
object_key = record['s3']['object']['key']
s3.put_object(
Bucket=bucket_name,
Key=object_key,
Body=json.dumps({
'event_type': record['eventName'],
'event_time': str(record['eventTime'])
})
)
在上面的示例中,lambda_handler函数处理来自Amazon S3的事件通知。每个记录都会针对同一个S3存储桶给出。在for循环内部,可以通过record['eventName']访问事件名,通过record['eventTime']访问事件时间,从而将它们添加到写入的json对象中。此代码块的结果将是一个Bucket键和一个文件键,它们将引用在S3存储桶中的JSON文件,这些文件包含有关事件的元数据。这些文件的所有record元素都应来自同一个AWS S3事件源,并且不会包含来自其他AWS资源的元素。