1. 概述
亚马逊网络服务(AWS)Lambda 是亚马逊提供的一种无服务器计算服务,旨在减少对服务器配置、操作系统和可扩展性的管理。AWS Lambda 能够在 AWS 云上执行代码。
它根据不同的 AWS 资源上的事件运行,触发 AWS Lambda 函数。定价方式是按需付费,这意味着我们不会为处于空闲状态的 Lambda 函数花费金钱。
本教程需要一个有效的 AWS 帐户;您可以在 这里创建一个。
2. Maven 依赖
为了启用 AWS Lambda,我们需要在项目中添加以下依赖:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>
这个依赖可以在 Maven 仓库 中找到。
我们还需要使用 Maven Shade 插件 来构建 Lambda 应用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
3. 创建处理器
简单来说,要调用 Lambda 函数,我们需要指定一个处理器。有三种创建处理器的方法:
- 自定义 MethodHandler
- 实现 RequestHandler 接口
- 实现 RequestStreamHandler 接口
让我们通过代码示例来看看如何操作。
3.1. 自定义 MethodHandler
我们将创建一个处理方法,作为接收请求的入口点。我们可以使用 JSON 格式或基本数据类型作为输入值。
此外,可选的 Context 对象将允许我们在 Lambda 执行环境中访问有用的信息:
public class LambdaMethodHandler {
public String handleRequest(String input, Context context) {
context.getLogger().log("Input: " + input);
return "Hello World - " + input;
}
}
3.2. RequestHandler 接口
我们还可以将 RequestHandler 实现到我们的类中,并重写 handleRequest 方法,这将成为我们接收请求的入口点:
public class LambdaRequestHandler
implements RequestHandler<String, String> {
public String handleRequest(String input, Context context) {
context.getLogger().log("Input: " + input);
return "Hello World - " + input;
}
}
在这种情况下,输入将与第一个示例中的相同。
3.3. RequestStreamHandler 接口
我们也可以在类中实现 RequestStreamHandler 并重写 handleRequest 方法。
区别在于,传递给方法的参数包括 InputStream、ObjectStream 和 Context 对象:
public class LambdaRequestStreamHandler
implements RequestStreamHandler {
public void handleRequest(InputStream inputStream,
OutputStream outputStream, Context context) {
String input = IOUtils.toString(inputStream, "UTF-8");
outputStream.write(("Hello World - " + input).getBytes());
}
}
4. 构建部署文件
配置完成后,只需运行以下命令即可创建部署文件:
mvn clean package shade:shade
jar 文件将保存在 target 文件夹下。
5. 通过管理控制台创建 Lambda 函数
登录到 AWS 亚马逊,然后点击服务下的 Lambda。此页面将显示已创建的 Lambda 函数列表。
以下是创建我们所需 Lambda 的步骤:
- 选择蓝图,然后选择“空白函数”
- 配置触发器(在我们的例子中,我们没有触发器或事件)
- 配置函数:
- 名称:提供 MethodHandlerLambda,
- 描述:描述你的 Lambda 函数的任何内容
- 运行时:选择 java8
- 代码入口类型和函数包:选择“上传 .ZIP 和 Jar 文件”,然后点击“上传”按钮。选择包含 Lambda 代码的文件。
- 在 Lambda 函数处理程序和角色 下:
- 处理程序名称:提供 Lambda 函数处理程序名称 com.baeldung.MethodHandlerLambda::handleRequest
- 角色名称:如果 Lambda 函数使用了其他 AWS 资源,请通过创建/使用现有角色并定义策略模板来提供访问权限。
- 在 高级设置 下:
- 内存:提供 Lambda 函数将使用的内存大小。
- 超时:为每个请求的 Lambda 函数执行时间选择一个时间。
- 完成所有输入后,点击“下一步”,这将显示配置审查。
- 审查完成后,点击“创建函数”。
6. 调用函数
一旦 AWS Lambda 函数创建完成,我们将通过传递一些数据来测试它:
- 点击 Lambda 函数列表中的您的函数,然后点击“测试”按钮
- 弹出窗口将出现,其中包含用于发送数据的占位值。将数据更改为 “Baeldung”
- 点击“保存并测试”按钮
在屏幕上,您可以看到 执行结果 部分,成功返回输出:
"Hello World - Baeldung"
7. 总结
在这篇简短的入门文章中,我们使用 Java 8 创建了一个简单的 AWS Lambda 应用,将其部署到 AWS 并进行了测试。
示例应用的完整源代码可以在 GitHub 上找到。