AWS Step Function进入Wait状态5分钟后超时,原因何在?
AWS Step Functions Wait状态提前5分钟超时问题
问题描述
我有一个AWS Step Function,配置了Wait状态等待1小时(3600秒),但每次启动后,进入Wait状态仅5分钟就超时,从未执行到后续的Lambda函数。状态机定义如下:
{ "Comment": "This state machine will fire off a reminder lambda for an outage status update after a delay", "StartAt": "Wait", "States": { "Wait": { "Type": "Wait", "Comment": "Wait for an hour", "Seconds": 3600, "Next": "Send Reminder" }, "Send Reminder": { "Type": "Task", "Comment": "Send a reminder in Slack for a status update", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "${FunctionArn}" }, "End": true } } }
我尝试添加"TimeoutSeconds": 7200到定义中,问题依旧。按官方文档,未设置超时的状态机默认1年才会自动超时,不清楚为何会提前终止。
排查结论及解决方法
- 状态机类型错误:这是最可能的原因。如果你的状态机是Express类型,它的最大执行时长限制就是5分钟(300秒),无论你设置多长的Wait时间或全局超时,都会触发超时终止。Express状态机设计用于短周期工作流,长时间等待需要使用Standard类型状态机。
- 解决:在AWS控制台将状态机转换为Standard类型,或重新创建为Standard类型(注意两种类型的计费模式差异)。
- 执行角色权限缺失:检查状态机的执行角色是否拥有维持长时间执行的必要权限,比如
states:UpdateExecution等。如果权限不足,Step Functions无法维持Wait状态,会提前终止。- 解决:为执行角色附加
AmazonStepFunctionsFullAccess(测试环境),或根据最小权限原则配置所需权限。
- 解决:为执行角色附加
- 触发源超时限制:如果状态机通过API Gateway、Lambda同步调用等方式触发,触发源自身的超时设置可能导致整个执行提前终止。比如同步调用Step Functions的Lambda函数如果设置了5分钟超时,会间接导致状态机执行终止。
- 解决:检查触发源的超时配置,确保其超时时间大于状态机的总执行时长。
内容的提问来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

