AWS Step Functions配置Lambda.Unknown未触发Lambda重试问题咨询
你对Lambda.Unknown的适用场景存在误解,导致配置的错误匹配规则没有命中实际抛出的错误类型:
Lambda.Unknown仅用于标记AWS Lambda服务侧产生的未知内部错误,而非你业务代码中抛出的未捕获运行时异常。- Java Lambda运行时会自动将代码抛出的未捕获异常的全限定类名作为错误类型返回给Step Functions,比如你抛出的
RuntimeException对应的错误类型是java.lang.RuntimeException,自定义运行时异常则是com.xxx.YourCustomException。
排查和解决方法
先确认实际错误类型
访问对应Step Functions执行的事件历史,找到TaskFailed事件,查看事件中的Error字段值,就是你需要匹配的错误类型。方案1:直接匹配业务异常
将你需要重试的异常全限定类名加入ErrorEquals列表即可,示例配置:
"Retry": [ { "ErrorEquals": [ "java.lang.RuntimeException", "com.yourpackage.YourCustomRuntimeException" ], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 } ]
- 方案2:先排除无需重试的错误,再匹配所有剩余错误
如果业务异常类型较多不想逐个罗列,可以利用Retry规则从上到下匹配的优先级,先把不需要重试的错误类型列在最前面,设置MaxAttempts为0禁用重试,再用States.ALL匹配剩余所有可重试错误,示例配置:
"Retry": [ { "ErrorEquals": [ "Lambda.AccessDeniedException", "Lambda.ResourceNotFoundException", "Lambda.InvalidRequestContentException", "States.Timeout", "States.Permissions" ], "MaxAttempts": 0 }, { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 } ]
内容的提问来源于stack exchange,提问作者nikel
相关产品推荐
相关产品推荐

