如何触发Lambda函数批量处理S3存储桶内的多个视频文件
核心结论
你不需要强制引入SQS实现文件夹级别的批量视频处理,有多个更轻量的方案可选,优先选无额外架构组件的实现即可。
方案1:零额外组件(最简洁,优先推荐)
这是S3批量上传触发任务的通用轻量实现,不需要新增任何云服务,没有额外维护成本:
- 调整S3事件触发规则:取消对单个视频文件(如
.mp4/.mov等后缀)的上传事件监听,改为仅监听同文件夹下自定义完成标记文件的上传事件,标记文件可以是空文件,固定命名为比如_SUCCESS、done.flag即可。 - 调整上传逻辑:所有视频文件全部上传完成后,最后一步往目标文件夹下上传这个标记文件,Lambda只会在标记文件上传时触发,完全不会出现单文件触发多次的问题。
- 函数内原有逻辑改动极小:拿到触发事件里标记文件的S3 Key后,截取对应的文件夹前缀,调用S3的
ListObjectsV2接口拉取该前缀下所有符合视频格式的文件,拼接成S3 URI列表,直接传给MediaConvert执行拼接即可。 - 小优化:在Lambda触发器配置里给这个事件加5-10秒的延迟触发,规避极端情况下大文件分片上传收尾延迟导致的文件拉取不全问题,这个配置直接在触发器页就能设置,不需要其他服务支撑。
方案2:原生批处理窗口(次简洁,无需修改上传流程)
如果你的上传流程已经固定,没法额外加标记文件上传的步骤,也不需要引入SQS,直接用Lambda触发器自带的批处理能力即可:
- 在S3触发Lambda的配置页开启批处理窗口,窗口时长设置为你预估的整个文件夹上传完成的最长耗时(比如3分钟、5分钟,根据单文件夹总大小和上传带宽调整),同时设置单批次最大事件数,匹配你单个文件夹下的视频文件数量上限。
- 函数触发后会一次性拿到窗口期内所有上传到对应S3路径的文件事件,先做去重、按文件夹前缀分组,校验同个前缀下的视频文件全部到位后,直接生成URI列表调用MediaConvert。
- 注意:这个方案的稳定性依赖你对上传时长的预估准确度,如果上传时长波动很大,容易出现窗口到期但文件没传完的情况,适合上传节奏稳定的场景。
什么场景才需要引入SQS
不要默认把SQS当必选项,SQS本身需要额外配置可见性超时、批处理规则、死信队列,维护成本远高于前面两个方案,只有满足以下任意一个条件时再考虑用:
- 单个文件夹下的视频文件量过万,超过Lambda单批次最大事件数的默认上限
- 需要严格的失败重试、异常任务持久化留存能力
- 上传时长完全不可控,既没法加标记文件,也没法预估合理的批处理窗口
内容的提问来源于stack exchange,提问作者user3324136
相关产品推荐
相关产品推荐

