AWS Lambda函数未按预期触发:调度触发延迟问题排查
解决AWS Lambda按固定间隔触发(无视前一次执行状态)的问题
问题根源分析
你之前遇到的“EventBridge每分钟触发,但需等上一次Lambda结束后才触发下一次”,大概率是对日志时间的误解——EventBridge固定速率触发默认是异步调用Lambda,只要并发足够,会严格按间隔发送触发事件,不会等待上一次执行完成。你看到的日志间隔,可能是把上一个实例的结束时间和下一个实例的开始时间混淆了,建议按日志的开始时间排序查看,确认触发是否符合间隔。
而你当前用“代码循环+sleep 15秒”的方案存在以下问题:
- 浪费资源与成本:sleep期间Lambda占用执行时长但不处理任务,直接增加计费
- 无法保证严格间隔:若单次任务处理耗时超过15秒,后续循环会被延迟,打破15秒的固定触发要求
- 存在终止风险:若循环总时长超过Lambda最大运行限制(15分钟),函数会被强制终止,导致任务中断
正确实现方案
要实现“无论前一次是否完成,按固定15秒间隔触发”,直接通过EventBridge配置即可,无需在Lambda内做循环:
1. 调整Lambda代码
删除循环与sleep逻辑,让每个Lambda实例仅处理单次任务,保证逻辑简洁、执行高效。
2. 配置EventBridge固定速率触发
- 进入EventBridge控制台,创建新规则(或修改现有规则)
- 触发类型选择固定速率(Fixed rate),设置为
Every 15 seconds - 目标选择你的Lambda函数,保持默认配置即可(EventBridge触发Lambda为异步调用,自动启动新实例处理,无需等待前一次完成)
3. 确认并发配置
你已设置Lambda总并发数为1000,完全满足15秒一次的触发需求(即使任务执行超过15秒,并发数最多仅会随运行中的实例数增加,1000的上限足够支撑)。
验证触发效果
配置完成后,在CloudWatch日志中按时间戳升序查看Lambda的执行日志,每个实例的START时间应严格保持15秒左右的间隔,即使某实例的END时间晚于下一个实例的START时间,也说明触发逻辑正常。
内容的提问来源于stack exchange,提问作者xeroshogun
相关产品推荐
相关产品推荐

