首页 > 解决方案 > 在 AWS Stepfunctions 中,当 Catch 错误时,如何识别哪个状态引发了错误?(传递一个字符串文字加上当前状态名称)

问题描述

在下面简化的 AWS Step Function 中,如果三个状态、或中的任何一个抛出错误,该状态将捕获错误。foo1foo2foo3fooerr

我的问题是,如何通知它从fooerr 哪个州捕获错误?

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

阶跃函数

例如,如果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)。

在此示例中foo2foorerr如果foo2.

标签: aws-step-functions

解决方案


不完全是您正在寻找的东西,但我可以想到这 3 种选择:

  1. 您可以使用不同ResultPath的 in和foo1,例如使用这个:foo2foo3foo1
"Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "ResultPath": "$.foo1-error",
          "Next": "fooerr"
        }
      ]

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

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

foo2-catch->fooerr2

foo2-catch->fooerr3

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

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

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

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


推荐阅读