Lambda AWS - 例外

时间:2017-08-17 18:53:50

标签: amazon-web-services exception aws-lambda

Lambda AWS在我抛出异常时关闭了吗?

在我的代码中,当发生非法状态时,我会抛出异常。 我想知道如果服务关闭与否,Lambda如何处理它。

我无法找到任何参考资料, 在他们的文档中,它都是关于处理错误/异常的。 但我想知道一个未处理的异常是否应该关闭我的Lambda服务。

3 个答案:

答案 0 :(得分:2)

AWS Lambda在遇到异常时所执行的操作取决于它是如何调用的。简而言之:如果它被同步调用,则会向调用者返回一个错误,如果它被调用异步重试则会发生。有关详细信息,请查看https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html

由于AWS Lambda的执行模型是无状态的,因此只会影响当前的调用。正确处理以下调用,就好像没有异常一样。

(免责声明:AWS Lambda在某种程度上只是无状态,因为它重用现有容器。我认为这与您的问题无关,但如果您想了解更多信息,我建议您阅读以下文章: https://aws.amazon.com/de/blogs/compute/container-reuse-in-lambda/

答案 1 :(得分:0)

Lambda通过触发器(例如S3 PUT事件)调用您的函数

将捕获在代码之外传播的异常,并且该调用将被标记为"错误",您将在CloudWatch中看到此指标。

这不会影响您函数的未来调用,即您可以再次触发lambda,它将再次运行您的代码。

答案 2 :(得分:0)

我遇到了很多与此相关的问题,因为与此相关的文档或博客文章很少。终于这是我学到的:

  1. 始终在所有功能中加入 try / catch ,该规则没有例外。它的入口函数是lambda还是任何内部函数或嵌套函数。
  2. 引发异常并捕获父项。冒泡直到您到达入口点功能。
  3. Nodejs错误不能为JSON.stringify。我这样做是为了将错误响应发送回APIgateway。您会注意到,尽管您可以console.log错误,但您不能JSON.stringify,但一旦这样做,lambda就会崩溃而不会出现任何错误。 要解决此问题,请执行以下操作:

    function GetErrorObject(data) {
      let dataToSend = data;
    
      //check if error object
      if (data.hasOwnProperty('stack')) {
        dataToSend = JSON.parse(JSON.stringify(data, Object.getOwnPropertyNames(data)));
      }
      return { message: dataToSend};
    }
    

这只是演示,可以根据您的要求进行修改。想法是读取错误对象的每个属性,并将其转换为有效的JSON。希望对您有帮助