Contents

AWS lambda示例

1. 简介

AWS Lambda 是亚马逊提供的一种无服务器计算服务,用于减少服务器、操作系统、可扩展性等的配置。AWS Lambda 能够在 AWS Cloud 上执行代码。

它运行以响应不同 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 函数,我们需要指定一个处理程序;有 3 种创建处理程序的方法:

  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 Amazon ,然后单击服务下的 Lambda。此页面将显示已创建的 lambda 函数列表。

以下是创建 lambda 所需的步骤:

  1. “选择蓝图”,然后选择“空白功能”
  2. “配置触发器”(在我们的例子中,我们没有任何触发器或事件)
  3. “配置功能”:
    • 名称:提供MethodHandlerLambda

    • 描述:任何描述我们的 lambda 函数的东西

    • 运行时:选择java8

    • 代码输入类型和功能包:选择“ **Upload a .ZIP and Jar file”**并点击“ **Upload”**按钮。选择包含 lambda 代码的文件。

    • Lambda 函数处理程序和角色下:

      • 处理程序名称:提供 lambda 函数处理程序名称com.blogdemo.MethodHandlerLambda::handleRequest
      • 角色名称:如果在 lambda 函数中使用了任何其他 AWS 资源,则通过创建/使用现有角色提供访问权限,并定义策略模板。
    • 高级设置下:

      • 内存:提供我们的 lambda 函数将使用的内存。
      • 超时:为每个请求选择执行 lambda 函数的时间。
  4. 完成所有输入后,单击“下一步”,这将显示您查看配置。
  5. 审核完成后,单击“创建函数”

6. 调用函数

创建 AWS lambda 函数后,我们将通过传入一些数据对其进行测试:

  • 从列表中单击您的 lambda 函数,然后单击“**测试”**按钮
  • 将出现一个弹出窗口,其中包含用于发送数据的虚拟值。**用“Blogdemo”**覆盖数据
  • 点击“**保存并测试”**按钮

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

"Hello World - Blogdemo"