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 函数,我们需要指定一个处理器。有三种创建处理器的方法:

  1. 自定义 MethodHandler
  2. 实现 RequestHandler 接口
  3. 实现 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 方法。

区别在于,传递给方法的参数包括 InputStreamObjectStreamContext 对象:

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 的步骤:

  1. 选择蓝图,然后选择“空白函数
  2. 配置触发器(在我们的例子中,我们没有触发器或事件)
  3. 配置函数
    • 名称:提供 MethodHandlerLambda
    • 描述:描述你的 Lambda 函数的任何内容
    • 运行时:选择 java8
    • 代码入口类型和函数包:选择“上传 .ZIP 和 Jar 文件”,然后点击“上传”按钮。选择包含 Lambda 代码的文件。
    • Lambda 函数处理程序和角色 下:
      • 处理程序名称:提供 Lambda 函数处理程序名称 com.baeldung.MethodHandlerLambda::handleRequest
      • 角色名称:如果 Lambda 函数使用了其他 AWS 资源,请通过创建/使用现有角色并定义策略模板来提供访问权限。
    • 高级设置 下:
      • 内存:提供 Lambda 函数将使用的内存大小。
      • 超时:为每个请求的 Lambda 函数执行时间选择一个时间。
  4. 完成所有输入后,点击“下一步”,这将显示配置审查。
  5. 审查完成后,点击“创建函数”。

6. 调用函数

一旦 AWS Lambda 函数创建完成,我们将通过传递一些数据来测试它:

  • 点击 Lambda 函数列表中的您的函数,然后点击“测试”按钮
  • 弹出窗口将出现,其中包含用于发送数据的占位值。将数据更改为 “Baeldung”
  • 点击“保存并测试”按钮

在屏幕上,您可以看到 执行结果 部分,成功返回输出:

"Hello World - Baeldung"

7. 总结

在这篇简短的入门文章中,我们使用 Java 8 创建了一个简单的 AWS Lambda 应用,将其部署到 AWS 并进行了测试。

示例应用的完整源代码可以在 GitHub 上找到。


« 上一篇: Java周报,158
» 下一篇: Java中的Dijkstra算法