【发布时间】: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