如何检测AWS S3的上传启动事件?现有创建完成类通知无法满足需求
AWS S3 上传启动事件检测方案
S3 原生事件通知目前仅支持上传完成类的事件触发,确实没有内置的上传启动事件类型,你可以通过以下两种服务端侧的方案实现需求,无需改造不受控的上传客户端:
方案1:基于 CloudTrail 捕获 API 调用事件(实时性高,推荐)
所有对 S3 的 API 请求都会被 CloudTrail 记录,你可以通过捕获对应上传启动的 API 调用事件触发通知:
- 分片上传场景:捕获
InitiateMultipartUploadAPI 调用事件,该接口是分片上传启动时客户端必须调用的第一个接口,调用成功即代表分片上传任务正式启动 - 单块小文件上传场景:捕获
PutObjectAPI 调用事件,如果你只需要感知大文件的上传启动,可以在后续逻辑中过滤文件大小小于阈值的PutObject事件即可
配置流程:
- 新建 CloudTrail 跟踪,开启目标 S3 存储桶的数据事件采集权限,仅勾选需要的
InitiateMultipartUpload、PutObject两类API操作,减少不必要的费用开销 - 在 Amazon EventBridge 中配置事件规则,匹配 CloudTrail 上报的对应 API 调用事件,触发你已有的 SNS 主题发送上传启动通知
提示:该方案的事件延迟通常在1分钟以内,可以满足绝大多数实时通知需求
方案2:基于 S3 访问日志做扫描检测(成本低,适合非实时场景)
如果对通知实时性要求不高,可以采用成本更低的日志扫描方案:
- 开启 S3 存储桶的访问日志功能,上传启动类的请求会生成对应日志条目:分片上传启动对应
REST.POST.UPLOADS操作,单块上传对应REST.PUT.OBJECT操作 - 配置定时Lambda任务定期扫描最新生成的访问日志,匹配到对应操作条目后触发通知即可
提示:S3 访问日志的写入延迟通常在15分钟到1小时,仅适合对实时性要求不高的场景
补充说明
如果需要过滤无效的启动请求(比如调用分片上传启动后没有上传任何分片、最终任务被取消的场景),可以搭配定时任务调用 ListMultipartUploads 接口扫描存储桶内的活跃分片任务,和已发出的启动通知做关联校验即可。
内容的提问来源于stack exchange,提问作者Rahul Bhooteshwar
相关产品推荐
相关产品推荐

