本节作为Lambda异步调用的补充实验。S3 Event Notification集成Lambda是比较常见的方案,常见的使用场景有:为上传的图片文件生成缩略图、删除特定文件时触发邮件通知等。
当S3有事件发生(例如上传文件、删除文件)时,可以为S3配置Notification,与SNS/SQS/Lambda等服务集成:

S3事件通知通常在秒级别将消息发送出去,但也可能需要分钟级别。
本节我们为S3 Event Notification配置集成Lambda,处理新上传的文件:

创建S3:
aws s3 mb s3://${random_chars}-s3-event-with-lambda # 保证桶名称唯一
创建完成后,更改S3 Event Notifications配置:

下拉到底部,找到Create event notification按钮:

输入Event name, Event types选择Put:

Destination选择Lambda类型,并配置成上一节的hello-world函数, 保存配置。:

回到hello-world Lambda页面,查看它的Permissions:

会发现S3自动为Lambda创建了一条Resource based policy, 允许S3 Event来调用Lambda:

更新Lambda代码为:
import json
def lambda_handler(event, context):
# TODO implement
print(event) # 将S3 upload事件打印到控制台
回到S3页面,上传本地电脑上的任意一个文件:

回到Lambda的CloudWatch Logs,找到最新的日志流:

在日志流中可以看到上传事件的详细信息:

有了这些信息,我们可以在Lambda中加入更多的逻辑,例如将文件的元数据插入到 DynamoDB,或者对文件进行额外的处理……
