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

Ruby 中的 AWS Lambda 函数错误

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

例 function.rb

def handler(event:, context:) puts "Processing event..." [1, 2, 3].first("two") "Success" end

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

{ "errorMessage": "no implicit conversion of String into Integer", "errorType": "Function<TypeError>", "stackTrace": [ "/var/task/function.rb:3:in `first'", "/var/task/function.rb:3:in `handler'" ] }

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

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

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

$ cat out {"errorMessage":"no implicit conversion of String into Integer","errorType":"Function<TypeError>","stackTrace":["/var/task/function.rb:3:in `first'","/var/task/function.rb:3:in `handler'"]}

注意

来自 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: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 Version: $LATEST Processing event... Error raised from handler method { "errorMessage": "no implicit conversion of String into Integer", "errorType": "Function<TypeError>", "stackTrace": [ "/var/task/function.rb:3:in `first'", "/var/task/function.rb:3:in `handler'" ] } END RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 REPORT RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 Duration: 22.74 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB

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

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