步骤功能错误处理程序功能参数

时间:2019-11-23 09:26:11

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

我在这个项目中工作,我们在其中创建一个AWS Lambda无服务器架构,并且那些异步功能作为“步骤功能”运行。有人告诉我编写错误处理程序部分的代码。基本上,我们有一个cloudformation模板,您可以清楚地看到错误处理程序基本上负责记录这些错误。所以这就是我的问题,如果其他人已经开发了其他部分的开发人员在他们的异步lambda函数中出现任何问题,都将抛出Error,而在cloudformation模板中,我们得到的定义为

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

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

1 个答案:

答案 0 :(得分: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"
                  }
               ]