Lan*_*onC 5 amazon-web-services aws-lambda aws-step-functions
我有一个简单的 AWS 状态机,其中有两个执行 C# lambda 函数的任务状态,以及一个传递状态错误处理程序来处理“States.ALL”:
{
"Comment": "StateMachine1",
"StartAt": "step1",
"States": {
"step1": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-2:0000:function:step1",
"Catch": [ {
"ErrorEquals": ["States.ALL"],
"Next": "CatchAllFallback"
} ],
"Next": "step2"
},
"step2": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-2:0000:function:step2",
"Catch": [ {
"ErrorEquals": ["States.ALL"],
"Next": "CatchAllFallback"
} ],
"End": true
},
"CatchAllFallback": {
"Type": "Pass",
"Result": "This is a fallback from any error code",
"End": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
当其中一个步骤失败时,我会得到以下内容作为“CatchAllFallback”的输入:
"Error": "Lambda.Unknown",
"Cause": "The cause could not be determined because Lambda did not return an error type."
Run Code Online (Sandbox Code Playgroud)
当我查看 Cloudwatch 日志时,我发现该步骤超时。我的问题是:如何在错误处理程序中获取该信息而不仅仅是“Lambda.Unknown”?我知道这一定是可能的,但在花了几个小时搜索网络后,我不知道该怎么做。任何意见,将不胜感激。
我不认为这是默认支持的(但也许有人可以证明我错了?)。这是因为问题的根源。AWS Step Functions 期望有效的错误类型将其传递到下一个状态,但您的 Lambda 超时,因此无法传递有效的错误类型。
但!您可以在 Lambda 内部构建解决方法。
只需检查内部的RemainingTime ,Context Object一旦接近超时,您就会抛出一个异常,然后该异常可以映射到有效的错误类型。
有关函数执行剩余时间的信息可用于指定函数在接近超时时的行为