Lambda AWS在我抛出异常时关闭了吗?
在我的代码中,当发生非法状态时,我会抛出异常。 我想知道如果服务关闭与否,Lambda如何处理它。
我无法找到任何参考资料, 在他们的文档中,它都是关于处理错误/异常的。 但我想知道一个未处理的异常是否应该关闭我的Lambda服务。
答案 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)
我遇到了很多与此相关的问题,因为与此相关的文档或博客文章很少。终于这是我学到的:
lambda
还是任何内部函数或嵌套函数。 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。希望对您有帮助