【发布时间】:2020-11-27 20:57:11
【问题描述】:
我正在尝试使用状态机语言中定义的 Parallel 和 Catch 块在我的步进函数流中添加错误处理。
以下是我的步骤函数的流程图:
由于我想要一个用于所有步进函数的通用错误处理程序,我将它们包装在一个 Parallel 块中,并添加了一个通用 Catch 块来捕获任何步进函数中的任何错误。在浏览各种示例和博客时,我关注了this 链接并实现了类似的方法。
我观察到的是,每当任何状态引发异常时,控件都会进入 catch 块。 catch 块的输入是引发的异常,该异常包含 JSON 对象中的错误和原因。由于我想要错误以及传递给该状态的输入,因此我在 catch 块中添加了 ResultPath 作为 "$.error"。以下是定义状态机的 JSON 规范。
{
"StartAt": "Try",
"States": {
"Try": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Step-1",
"States": {
"Step-1": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:1234:function:step-1-lambda",
"Next": "Step-2"
},
"Step-2": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.some_variable",
"StringEquals": "some_string",
"Next": "Step-3"
},
{
"Variable": "$.some_variable",
"StringEquals": "some_other_string",
"Next": "Step-4"
}
],
"Default": "Step-6"
},
"Step-3": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:1234:function:step-3-lambda",
"Next": "Step-6"
},
"Step-4": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:1234:function:step-4-lambda",
"Next": "Step-6"
},
"Step-6": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:1234:function:step-6-lambda",
"End": true
}
}
}
],
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"ResultPath": "$.error",
"Next": "ErrorHandler"
}
],
"Next": "UnwrapOutput"
},
"UnwrapOutput": {
"Type": "Pass",
"InputPath": "$[0]",
"End": true
},
"ErrorHandler": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:1234:function:step-7-lambda",
"End": true
}
}
}
例如,考虑第 4 步生成异常。这个状态的输入是:
{
"foo": "abc",
"bar": "def"
}
触发状态机的输入是:
{
"boo": "jkl",
"baz": "mno"
}
在 ErrorHandler 中,由于步骤 4 生成异常,我期望 ErrorHandler 状态的输入是:
{
"foo": "abc",
"bar": "def",
"error": {
"Error": "SomeError",
"Cause": "SomeCause"
}
}
但是,接收到的输入包含用于触发流程的原始输入。
{
"boo": "jkl",
"baz": "mno",
"error": {
"Error": "SomeError",
"Cause": "SomeCause"
}
}
我需要在 ErrorHandler 中访问导致异常的状态的输入字段。使用“$”它提供用于触发流程的输入。有什么办法可以实现吗?
任何帮助将不胜感激,我一直在努力解决这个问题。
【问题讨论】:
-
感谢您提供图表和详细信息。我相信以下内容可以帮助您:stackoverflow.com/a/64436403 或 dev.to/aws-builders/…
标签: amazon-web-services error-handling try-catch aws-step-functions state-machine-workflow