AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

函数错误 (Java)

如果 Lambda 函数引发异常,AWS Lambda 会识别失败并将异常信息序列化为 JSON 并将其返回。下面是一个错误消息示例:

Copy
{ "errorMessage": "Name John Doe is invalid. Exception occurred...", "errorType": "java.lang.Exception", "stackTrace": [ "example.Hello.handler(Hello.java:9)", "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", "java.lang.reflect.Method.invoke(Method.java:497)" ] }

注意:堆栈跟踪以 stackTrace JSON 数组的形式返回堆栈跟踪元素。

取回错误信息所用的方法取决于调用函数时指定的调用类型:

  • RequestResponse 调用类型(即同步执行):在这种情况下,您会收到错误消息。

    例如,使用 Lambda 控制台调用 Lambda 函数时,调用类型始终为 RequestResponse,控制台将在 Execution result 部分中显示 AWS Lambda 返回的错误信息,如下图所示。

  • Event 调用类型(即异步执行):在这种情况下,AWS Lambda 不返回任何信息。相反,它将错误信息记录到 CloudWatch Logs 和 CloudWatch 指标中。

AWS Lambda 可能会重试失败的 Lambda 函数,具体视事件源而定。例如,如果 Lambda 函数的事件源为 Kinesis,则 AWS Lambda 会重试失败的函数,直到 Lambda 函数成功或流中的记录过期为止。

函数错误处理

您可以创建自定义错误处理机制,直接从您的 Lambda 函数引发异常,并直接在 AWS Step Functions 状态机中进行处理 (重试或捕获)。有关更多信息,请参阅使用状态机处理错误情况

请将 CreateAccount 状态看作使用 Lambda 函数将客户的详细信息写入数据库的任务

  • 如果任务成功,会创建账户并发送欢迎电子邮件。

  • 如果用户尝试创建的账户用户名已存在,Lambda 函数将出错,状态机会建议其他用户名,并重试账户创建过程。

以下代码示例演示了如何执行此操作。请注意,Java 中的自定义错误必须扩展 Exception 类型。

Copy
package com.example; public static class AccountAlreadyExistsException extends Exception { public AccountAlreadyExistsException(String message) { super(message); } } package com.example; import com.amazonaws.services.lambda.runtime.Context; public class Handler { public static void CreateAccount(String name, Context context) throws AccountAlreadyExistsException { throw new AccountAlreadyExistsException ("Account is in use!"); } }

您可以配置 Step Functions,使用 Catch 规则捕获错误。Lambda 会自动将错误名称设置为运行时异常的完全限定类名称:

Copy
{ "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:CreateAccount", "Next": "SendWelcomeEmail", "Catch": [ { "ErrorEquals": ["com.example.AccountAlreadyExistsException"], "Next": "SuggestAccountName" } ] }, … } }

AWS Step Functions 可于运行时捕获错误,按照 Next 转换中指定的方式,转换SuggestAccountName 状态。

自定义错误处理机制使创建无服务器应用程序变得更加容易。此功能与 Lambda 编程模型 支持的所有语言相集成,您可以任选编辑语言设计您的应用程序,并进行混合搭配。

要进一步了解如何使用 AWS Step Functions 和 AWS Lambda 创建您自己的无服务器应用程序,请参阅 AWS Step Functions

本页内容: