我有一个简单的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
}
}
}
当其中一个步骤失败时,我得到以下内容作为我的“CatchAllFallback”的输入:
"Error": "Lambda.Unknown",
"Cause": "The cause could not be determined because Lambda did not return an error type."
当我查看Cloudwatch日志时,我发现该步骤已超时。我的问题是:如何在我的错误处理程序中获取该信息而不仅仅是“Lambda.Unknown”?我知道它一定是可能的,但在花了几个小时搜索网络后,我无法弄清楚如何去做。任何建议将不胜感激。
答案 0 :(得分:1)
我不这么认为这是默认支持的(但也许有人可以证明我错了?)。这是因为问题的根源。 AWS Step Functions期望有效的错误类型将其传递给下一个状态,但您的Lambda超时,因此无法传递有效的错误类型。
但是!您可以在Lambda内部构建一个解决方法。
只需检查Context Object
内的RemainingTime,一旦关闭就超时,就会抛出一个异常,然后可以映射到有效的错误类型。
可以使用有关函数执行剩余时间的信息 在接近超时时指定功能行为
答案 1 :(得分:0)
你的lambda需要抛出相关的错误,以便step函数提供更好的输出,documentation使用c#
解释了这个场景namespace Example {
public class AccountAlreadyExistsException : Exception {
public AccountAlreadyExistsException(String message) :
base(message) {
}
}
}
namespace Example {
public class Handler {
public static void CreateAccount() {
throw new AccountAlreadyExistsException("Account is in use!");
}
}
}