微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 AWS Stepfunctions 中,当 Catch 一个错误时,如何识别哪个状态抛出了错误? 传递字符串文字加上当前状态名称

如何解决在 AWS Stepfunctions 中,当 Catch 一个错误时,如何识别哪个状态抛出了错误? 传递字符串文字加上当前状态名称

在下面的简化 AWS Step Function 中,如果三个状态 foo1foo2foo3 中的任何抛出错误,则状态 fooerr 将捕获错误

我的问题是,如何通知 fooerr 哪个它正在捕获错误的状态?

在这个例子中,所有四个 foo* 状态都调用一个 lambda,所以我想将状态名称“foo2”和一个字符串文字(例如“foo2_literal”)传递给 fooerr lambda if foo2一个错误。)

step function

例如,如果定义了状态 foo2

"foo2": {
      "Type": "Task","Resource": "arn:aws:states:::lambda:invoke","Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-1:11111111111:function:foo2:$LATEST","Payload": {
          "Input.$": "$"
        }
      },"Next": "foo3","Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],"Next": "fooerr"
        }
      ]
    },

我在 Catch 中找不到任何用于插入将传递给 fooerr 的标识符字符串的语法示例。

同样,我看不到导致错误的状态如何/在哪里名称被传递给捕获的状态(fooerr)错误

在此示例中,如果 foo2 中发生错误,我希望 foorerr 将标识符“foo2”和“foo2_literal_string”“发送”到 foo2

解决方法

不完全是您要找的,但我可以想到这 3 个替代方案:

  1. 您可以在 ResultPathfoo1foo2 中使用不同的 foo3,例如对于 foo1 使用:
"Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],"ResultPath": "$.foo1-error","Next": "fooerr"
        }
      ]

这样在 fooerr 中,您可以使用选择状态并检查 foo1-error 是否存在。

  1. 为每个状态(foo1foo2foo3)创建单独的错误捕获器。 foo1 -catch-> fooerr1

foo2 -catch-> fooerr2

foo2 -catch-> fooerr3

  1. 不要在 catch 块中使用 fooerr 作为 Next 步骤,而是使用中间的另一个步骤来添加每个步骤所需的数据。所以创建这样的东西:

foo1 -catch-> foo1-with-error-data -> fooerr

foo2 -catch-> foo2-with-error-data -> fooerr

foo2 -catch-> foo2-with-error-data -> fooerr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。