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

Java 中的 AWS Lambda 函数处理程序

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

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

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

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

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

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 或 Amazon SNS 之类的事件源使用时,这些事件源会使用 Event 调用类型调用 Lambda 函数。

  • inputTypeoutputType 可为以下类型之一:

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

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

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

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

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

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

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

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 handleRequest(Integer myCount, Context context) { return String.valueOf(myCount); } }

在此示例中,输入为 Integer 类型,输出为 String 类型。如果您打包了此代码及依赖项并创建了 Lambda 函数,则将 example.Hello 指定为处理程序。

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

有关使用此 Java 代码创建 Lambda 函数的说明,请参阅创建用 Java 编写的 Lambda 函数

处理程序重载解决方案

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

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

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

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

附加信息

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