Lambda与AWS Step Functions集成的异步重试机制及优先级问题
Lambda与AWS Step Functions集成的异步重试机制及配置优先级
一、异步重试的运作逻辑
Lambda与Step Functions集成时的重试行为,核心取决于Step Functions调用Lambda的方式(同步/异步):
1. 同步调用(默认方式)
当Step Functions以同步模式调用Lambda时:
- Lambda执行失败会直接将错误返回给Step Functions,不会触发Lambda自身的异步重试机制。
- 此时所有重试逻辑由Step Functions控制:根据你在状态机任务的
Retry配置,针对特定错误类型、错误码(如Lambda.ServiceException、自定义业务错误)执行重试,支持自定义重试次数、间隔、指数退避策略等。
2. 异步调用(配置InvocationType: Event)
当Step Functions通过设置InvocationType: Event异步调用Lambda时:
- Lambda会立即返回
202 Accepted响应给Step Functions,Step Functions会判定任务已提交成功,不会触发自身的重试逻辑。 - 后续的重试完全由Lambda自身的异步重试机制接管:遵循你在Lambda函数配置中设置的重试次数(默认2次,最多可配置10次)、递增间隔规则,失败的请求最终可被转发到你配置的死信队列。
二、两者配置的优先级与交互
核心规则:调用方式决定重试主导方
- 同步调用场景:Step Functions的重试配置优先级完全覆盖Lambda的异步重试配置。因为同步调用不会触发Lambda的异步重试流程,所有失败后的重试逻辑由状态机的
Retry/Catch规则定义。 - 异步调用场景:Lambda自身的异步重试配置完全主导,Step Functions无法干预。此时状态机仅负责提交请求,不关心后续执行结果,自然不会触发重试。
额外注意事项
- 同步调用时,若Lambda抛出未处理异常,Step Functions会严格按照
Retry规则判断是否重试;若配置了Catch分支,则会直接进入错误处理流程。 - 异步调用时,Step Functions无法获取Lambda异步执行的最终结果,若需要追踪结果,需额外配置回调机制(如Lambda执行完成后调用Step Functions的回调API)。
- 不要在同步调用场景下依赖Lambda的异步重试配置,该配置不会生效,属于无效配置。
内容的提问来源于stack exchange,提问作者Kishor Unnikrishnan
相关产品推荐
相关产品推荐

