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

Lambda 函数处理程序 (Java)

在创建 Lambda 函数时,需要指定一个处理程序,以供 AWS Lambda 服务在代您执行 Lambda 函数时调用。

Lambda 支持以下两种处理程序创建方法:

  • 直接加载处理程序方法(不必实现任何接口)。本章节介绍这种方法。

  • 实现作为 aws-lambda-java-core 库一部分提供的标准接口(接口方法)。有关更多信息,请参阅 利用预定义接口创建处理程序 (Java)

处理程序的一般语法如下:

Copy
outputType handler-name(inputType input, Context context) { ... }

为使 AWS Lambda 成功调用处理程序,调用时的输入数据必须能够序列化为 input 参数的数据类型。

在该语法中,需要注意以下方面:

  • inputType - 第一个处理程序参数是处理程序的输入,它可以是事件数据(由事件源发布)或您提供的自定义输入(如字符串或任意自定义数据对象)。为使 AWS Lambda 成功调用该处理程序,调用函数时的输入数据必须能够序列化为 input 参数的数据类型。

  • outputType - 如果打算同步调用 Lambda 函数(使用 RequestResponse 调用类型),则可使用任何支持的数据类型返回函数输出。例如,如果使用 Lambda 函数作为移动应用程序后端并同步调用它,则输出数据类型会序列化为 JSON。

    如果打算异步调用 Lambda 函数(使用 Event 调用类型),则 outputType 应为 void。例如,将 AWS Lambda 搭配 Amazon S3、Kinesis 和 Amazon SNS 之类的事件源使用时,这些事件源会使用 Event 调用类型调用 Lambda 函数。

  • inputTypeoutputType 可为以下类型之一:

    • Java 基元类型(如 String 或 int)。

    • aws-lambda-java-events 库中的预定义 AWS 事件类型。

      例如,S3Event 是该库中预定义的一种 POJO,它提供了从传入的 Amazon S3 事件读取信息的便捷方法。

    • 此外,您也可以编写自己的 POJO 类。AWS Lambda 会根据该 POJO 类型自动序列化和反序列化输入、输出 JSON。

    有关更多信息,请参阅 处理程序输入/输出类型 (Java)

  • 如果不需要,可以省略处理程序方法签名中的 Context 对象。有关更多信息,请参阅 Context 对象 (Java)

例如,考虑以下 Java 示例代码。

Copy
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class Hello implements RequestHandler<Integer, String>{ public String myHandler(int myCount, Context context) { return String.valueOf(myCount); } }

在此示例中,输入为 Integer 类型,输出为 String 类型。如果您打包了此代码及依赖项并创建了 Lambda 函数,则应指定 example.Hello::myHandler (package.class::method-reference) 作为处理程序。

在此示例 Java 代码中,第一个处理程序参数是处理程序 (myHandler) 的输入,它可以是事件数据 (由 Amazon S3 之类的事件源发布),也可以是您提供的自定义输入 (如本示例中的 Integer 对象) 或任何自定义数据对象。

有关使用此 Java 代码创建 Lambda 函数的说明,请参阅步骤 2.3:(可选)创建用 Java 编写的 Lambda 函数

处理程序重载解决方案

如果 Java 代码中包含多个名称为 handler 的方法,则 AWS Lambda 依据以下规则选择调用方法:

  1. 选择参数最多的方法。

  2. 如果有两个或多个方法携带相同数量的参数,则 AWS Lambda 选择以 Context 作为最后一个参数的方法。

    如果这些方法都不带或都带 Context 参数,则行为不确定。

附加信息

以下主题提供了有关处理程序的更多信息。