【问题标题】:Step Functions error handler function parametersStep Functions 错误处理函数参数
【发布时间】:2025-12-26 09:00:07
【问题描述】:

我在这个项目中工作,我们创建了一个 AWS Lambda 无服务器架构,并且这些异步函数作为 Step Functions 运行。我被告知要对错误处理程序部分进行编码。基本上我们有一个 cloudformation 模板,在那里你可以清楚地看到错误处理程序基本上负责记录这些错误。所以我的问题来了,其他已经开发过其他部分的开发人员如果在他们的异步 lambda 函数和 cloudformation 模板中出现任何问题,就会抛出错误,我们得到的定义为

{
  "Variable": "$.status",
  "StringEquals": "FAILED",
  "Next": "Handle Error"
}

对于那些功能。现在在我的 ErrorHandler Lambda 函数中,我必须获取这些错误并检查它们的类型和代码等。我不明白这些错误是如何传递给我的 ErrorHandler 的?另外,我如何知道哪个函数引发了该错误以了解哪个步骤失败?我搜索了 github,aws doc,但他们根本不谈论代码。 谢谢。

【问题讨论】:

    标签: node.js aws-lambda amazon-cloudformation aws-step-functions


    【解决方案1】:

    从您的问题来看,您似乎有一个“一个错误处理程序来统治它们”类型的错误处理。我不认为你可以通过这种结构实现你所需要的。

    另外,我如何知道哪个函数引发了该错误以了解哪个步骤失败?

    没错。使用单个错误处理程序就不是那么简单了。

    您可以做的是为每个可能失败的任务(即您关心失败的地方)配置Catch。这样您就可以知道哪个任务隐式失败了。

    所以我的问题来了,其他已经开发了其他部分的开发人员如果他们的异步 lambda 函数出现任何问题,就会抛出错误

    这是另一个问题。如果任务只是不分青红皂白地抛出Error,您将不得不构建变通方法来弥补这一点。

    更好的选择是针对特定故障实现特定错误并抛出它们而不是Error。比如:

    function MySpecificError(message) {
        this.name = 'MySpecificError';
        this.message = message;
    }
    MySpecificError.prototype = new Error();
    

    然后,可以返回此错误:

    callback(new MySpecificError("Something specific happened."));
    

    现在,在您的状态机中,您将能够区分故障原因并采取相应措施:

                   "Catch":[
                      {
                        "ErrorEquals":[
                           "MySpecificError"
                        ],
                        "Next": "HandleSpecificError"
                      }
                   ]
    

    【讨论】:

    • catch 语句,每个函数的一切都准备就绪,它们都将错误处理函数定义为 catch 的下一个目标。我想知道的是,我现在如何在错误处理函数中访问这个错误对象、消息...?它已经从函数 X 中抛出,现在 step 函数最终出现在我编写的错误处理函数中。这个错误以某种方式作为参数提供给错误处理函数?或者它可能存储在上下文对象中(我找不到任何有关此的信息)。我想要的只是以某种方式在我的错误处理函数中得到这个抛出的错误。