本节作为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,或者对文件进行额外的处理……