AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Node.js 中的 AWS Lambda 函数错误

当您的代码引发错误时,Lambda 将生成错误的 JSON 表示形式。此错误文档会出现在调用日志中,对于同步调用,它出现在输出中。

例 index.js 文件 – 引用错误

exports.handler = async function() { return x + 10 }

此代码将导致引用错误。Lambda 将捕获此错误并生成一个包含错误消息、类型和堆栈跟踪字段的 JSON 文档。

{ "errorType": "ReferenceError", "errorMessage": "x is not defined", "trace": [ "ReferenceError: x is not defined", " at Runtime.exports.handler (/var/task/index.js:2:3)", " at Runtime.handleOnce (/var/runtime/Runtime.js:63:25)", " at process._tickCallback (internal/process/next_tick.js:68:7)" ] }

在您从命令行调用函数时,AWS CLI 将响应拆分为两个文档。为指示出现函数错误,在终端中显示的响应包含 FunctionError 字段。函数返回的响应或错误写入到输出文件。

$ aws lambda invoke --function-name my-function out { "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }

查看输出文件以查看错误文档。

$ cat out {"errorType":"ReferenceError","errorMessage":"x is not defined","trace":["ReferenceError: x is not defined"," at Runtime.exports.handler (/var/task/index.js:2:3)"," at Runtime.handleOnce (/var/runtime/Runtime.js:63:25)"," at process._tickCallback (internal/process/next_tick.js:68:7)"]}

注意

来自 Lambda 的响应中的 200(成功)状态代码指示您发送到 Lambda 的请求没有出错。有关导致错误状态代码的问题,请参阅Errors

Lambda 还会在函数日志中记录错误对象,最多 256 KB。要在从命令行调用函数时查看日志,请使用 --log-type 选项并解码响应中的 base64 字符串。

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d START RequestId: 8bbbfb91-a3ff-4502-b1b7-cb8f6658de64 Version: $LATEST 2019-06-05T22:11:27.082Z 8bbbfb91-a3ff-4502-b1b7-cb8f6658de64 ERROR Invoke Error {"errorType":"ReferenceError","errorMessage":"x is not defined","stack":["ReferenceError: x is not defined"," at Runtime.exports.handler (/var/task/index.js:2:3)"," at Runtime.handleOnce (/var/runtime/Runtime.js:63:25)"," at process._tickCallback (internal/process/next_tick.js:68:7)"]} END RequestId: 8bbbfb91-a3ff-4502-b1b7-cb8f6658de64 REPORT RequestId: 8bbbfb91-a3ff-4502-b1b7-cb8f6658de64 Duration: 76.85 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 74 MB

有关日志的更多信息,请参阅 Node.js 中的 AWS Lambda 函数日志记录

AWS Lambda 可能会重试失败的 Lambda 函数,具体视事件源而定。例如,如果 Kinesis 为事件源,则 AWS Lambda 会重试失败的调用,直到 Lambda 函数成功或流中的记录过期。有关重试的更多信息,请参阅AWS Lambda 中的错误处理和自动重试