【问题标题】:How do I check for failure in AWS Lambda that throws an Exception in Node如何检查在节点中引发异常的 AWS Lambda 中的故障
【发布时间】:2019-06-28 19:09:42
【问题描述】:

我在 AWS Lambda 上做了一组基本的 TDD,并注意到如果我创建一个简单的测试函数:

exports.handler = async (event) => {
    // Will always fail
    throw "Failed to execute - this is a failure function that will always fail";
};

当我通过 SDK 使用 com.amazonaws.services.lambda.model.InvokeRequest 调用它时,此函数的响应代码总是返回 200,并且错误日志为空!

我想知道我在调用和请求错误方面是否做错了;因为抛出异常的 JavaScript 函数似乎很疯狂,并且当我在 AWS Lambda 控制台中测试它报告为执行失败时会返回 200?

我注意到我在这里使用了异步变体;所以我也尝试了同步变体和 context.fail() 调用:

exports.handler = (event, context, callback) => {
    // Will always fail
    try {
        throw "Failed to execute - this is a failure function that will always fail";
    }
    catch(e) {
        context.fail(e);
    }
};

我肯定希望这会返回 500 或其他值,但我再次得到 200!

【问题讨论】:

  • 错误日志是什么意思?我尝试了您的示例并得到了一个 {"errorMessage": "Failed to execute - 这是一个始终会失败的失败函数"},它也被写入 CloudWatch
  • 200 表示调用成功(调用已执行并返回一些响应)。它没有说明返回的内容。异常应该写在 Payload 中。一般来说,直接调用不同于 HTTP 集成(通过 API 网关)。

标签: node.js amazon-web-services aws-lambda


【解决方案1】:

Lambda 有two invocation types

  1. RequestResponse(同步)
  2. 事件(异步)

如您所见,问题可能不一定存在于您的 lambda 函数中。我的建议是检查你调用这个 lambda 的代码,看看你使用的是哪种调用类型。

【讨论】:

  • 我比较确定它是 RequestResponse - 但我会仔细检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2021-08-21
  • 2011-10-01
相关资源
最近更新 更多