使用Step Functions重试失败Glue Job的问题排查与实现
问题分析与解决方案
问题原因
你当前使用的arn:aws:states:::glue:startJobRun属于异步调用模式:Step Functions仅验证Glue Job是否成功启动,不会等待Job执行完成。只要Job启动成功,这个Task状态就会被标记为成功,后续Job运行时出现的FAILED或TIMEOUT状态,Step Functions无法感知,因此不会触发你配置的Retry逻辑。
解决方案
将Task的Resource替换为同步调用ARN:arn:aws:states:::glue:startJobRun.sync。同步模式下,Step Functions会持续等待Glue Job执行完成,只有当Job执行成功时,Task状态才会成功;若Job出现FAILED或TIMEOUT,Step Functions会捕获对应错误,触发Retry规则。
修改后的状态机配置如下:
{ "Comment": "A description of my state machine", "StartAt": "Glue StartJobRun", "States": { "Glue StartJobRun": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "test-to-fail" }, "End": true, "Retry": [ { "ErrorEquals": [ "Glue.JobFailedException", "Glue.JobTimeoutException" ], "MaxAttempts": 2, "IntervalSeconds": 300, "BackoffRate": 1 } ] } } }
补充说明
- 同步模式下,Step Functions会轮询Glue Job的运行状态,直到Job结束。Job的FAILED或TIMEOUT会转化为
Glue.JobFailedException和Glue.JobTimeoutException错误,匹配你配置的ErrorEquals规则后,会自动执行重试逻辑,最多重试2次后结束(若仍失败)。 - 建议将
ErrorEquals从States.ALL改为具体的Glue错误类型,避免无关错误触发重试,提升逻辑精准度。
内容的提问来源于stack exchange,提问作者Laura Galera
相关产品推荐
相关产品推荐

