如何等待全部S3文件上传后触发Step Function State Machine
实现思路:等待10个文件上传完成后触发Step Functions状态机
完全可以实现,以下是几个实用的解决思路:
方案1:Lambda + DynamoDB 计数器(实时性高)
这是最直接的实现方式,核心是用计数器跟踪批次文件数量:
- 配置S3桶的上传事件,所有CSV文件上传时触发同一个Lambda函数
- Lambda函数内通过DynamoDB维护批次计数:
- 用唯一批次标识(比如文件前缀、上传时间窗口、自定义元数据)来分组,避免不同批次的文件混算
- 每次触发时,先校验文件是否已被计数(比如记录文件ETag),处理S3事件重复投递的问题
- 对应批次的计数器加1,当计数达到10时,调用
StartExecutionAPI启动Step Functions状态机,同时标记该批次为已完成
- 补充:添加超时清理逻辑,比如某个批次2小时内没凑齐10个文件,就删除计数并触发告警,避免无效等待
方案2:S3 Inventory + EventBridge 定时校验
适合对实时性要求不高的场景,依赖S3原生的库存功能:
- 给目标S3桶配置S3 Inventory,指定只包含CSV文件,设置生成周期(比如1小时),输出到指定路径
- 当Inventory文件生成时,S3会触发EventBridge事件,触发Lambda函数
- Lambda读取Inventory文件,统计目标路径下的CSV文件总数
- 若数量达到10,启动Step Functions状态机,同时将已处理的文件移动到归档目录,避免重复统计
方案3:Step Functions 内置等待+检查逻辑
利用状态机自身的流程控制来实现:
- 第一个文件上传时触发状态机启动
- 状态机进入等待状态(可设置固定时长,比如30分钟,或者等待外部信号)
- 等待结束后调用Lambda检查S3桶内目标文件数量
- 若数量达标,执行后续流程;未达标则回到等待状态(设置最大重试次数,防止无限循环)
- 后续上传的文件触发的状态机,在初始步骤先检查DynamoDB中是否已有同批次的状态机在运行,若有则直接终止自身,避免重复执行
内容的提问来源于stack exchange,提问作者asdasf
相关产品推荐
相关产品推荐

