AWS Step Functions未捕捉States.Runtime错误

9
以下步骤函数在AWS中执行,当存在必需参数缺失时,它会取消流程并抛出States.Runtime错误。这是步骤函数的catch阶段,但它并没有如所述捕获错误。
定义的步骤函数如下:
{
  "StartAt": "Log Start Step Function",
  "Comment": "Executed with inputs",
  "States": {
    "Log Start Step Function": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:eu-west-1:0000000:function:update",
      "Parameters": {
        "body": {
          "itemID.$": "$.itemID",
          "functionName.$": "$.stepFunctionName ",
          "executionARN.$": "$$.Execution.Id",
          "complete": false,
          "inprogress": true,
          "error": false
        }
      },
      "Catch": [
        {
          "ErrorEquals": [
            "States.Runtime"
          ],
          "ResultPath": "$.taskresult",
          "Next": "Log Failed Module"
        },
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "ResultPath": "$.taskresult",
          "Next": "Log Failed Module"
        }

      ],
      "ResultPath": "$.taskresult",
      "Next": "Evaluate Module PA1"
    }
  }
}

以下是步骤函数:enter image description here
下面是抛出的错误:enter image description here
运行时错误未执行日志失败模块。
{
   "ErrorEquals": [
       "States.Runtime"
    ],
    "ResultPath": "$.taskresult",
    "Next": "Log Failed Module"
  },

这是AWS错误还是此处配置有误,或者有其他方法可以验证AWS Step Functions的参数?

4个回答

6

2
这也让我感到困惑。我的情况是基于S3 ListObjectVersions的结果设置输出,版本将在以后的任务中删除。在这种情况下,$.Versions不存在,因为存储桶中没有任何内容,所以抛出了States.Runtime异常。
{
  "bucket.$": "$.Name",
  "objects.$": "$.Versions"
}

为了解决这个问题 -
  1. 我不使用ResultSelector转换ListObjectVersions任务的结果。相反,这个状态只是输出未经编辑的结果。
  2. 我添加了一个Choice状态,在下面加入了一个规则来检查是否存在$.Versions
    • 如果存在,则移动到Pass状态,并以与最初转换ListObjectVersions任务结果相同的方式转换输入,使用ResultSelector(因为Pass状态只在输入上进行转换,而不是输出)。
    • 如果不存在,则移动到Success状态,因为没有要删除的内容。
这是相关部分的屏幕截图,以防有助于可视化。

enter image description here


1
我有同样的问题。
我开始认为运行时错误发生在处理输入路径之前,而且在初始化catcher之前。这意味着尝试/捕获测试输入中存在的参数是不可能的。我也尝试了ChoiceState,但没有成功。
因此,我认为除了在状态机定义中提供您引用的每个参数外,没有其他解决方案。但是文档并不清楚。

1
你的状态机期望以下内容作为输入:
"Parameters": {
  "body": {
    "itemID.$": "$.itemID",
    "functionName.$": "$.stepFunctionName ",
    "executionARN.$": "$$.Execution.Id",
    "complete": false,
    "inprogress": true,
    "error": false
  }
},

你需要在启动新的执行时传递它们,而不是:

{
  "Comment": "Insert your JSON here"
}

您当前正在传递的是默认输入体,因为它作为 AWS 控制台中新执行的输入体。

在此处阅读有关 InputPath 和 Parameters 的更多信息:https://docs.aws.amazon.com/step-functions/latest/dg/input-output-inputpath-params.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接