Contents

使用 DynamoDB 和 Java 创建 AWS Lambda 应用程序

1. 简介

AWS Lambda 是 Amazon Web Services 提供的无服务器计算服务,WS DynamoDB 是 Amazon 也提供的 NoSQL 数据库服务。

有趣的是,DynamoDB 同时支持文档存储和键值存储,并且完全由 AWS 管理。

在开始之前,请注意本教程需要一个有效的 AWS 账户(您可以在此处 创建一个)。此外,最好先阅读AWS Lambda with Java 文章。

2. Maven依赖

要启用 lambda,我们需要可以在Maven Central 上找到的以下依赖项:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.1.0</version>
</dependency>

要使用不同的 AWS 资源,我们需要以下依赖项,该依赖项也可以在Maven Central 上找到:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>1.3.0</version>
</dependency>

为了构建应用程序,我们将使用Maven Shade 插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

3. Lambda 代码

在 lambda 应用程序中创建处理程序有多种方法:

  • MethodHandler
  • RequestHandler
  • RequestStreamHandler

我们将在我们的应用程序中使用RequestHandler接口。我们将接受 JSON 格式的PersonRequest,响应也是JSON格式的PersonResponse

public class PersonRequest {
    private String firstName;
    private String lastName;
    
    // standard getters and setters
}
public class PersonResponse {
    private String message;
    
    // standard getters and setters
}

接下来是我们的入口点类,它将实现RequestHandler接口:

public class SavePersonHandler 
  implements RequestHandler<PersonRequest, PersonResponse> {
    
    private DynamoDB dynamoDb;
    private String DYNAMODB_TABLE_NAME = "Person";
    private Regions REGION = Regions.US_WEST_2;
    public PersonResponse handleRequest(
      PersonRequest personRequest, Context context) {
 
        this.initDynamoDbClient();
        persistData(personRequest);
        PersonResponse personResponse = new PersonResponse();
        personResponse.setMessage("Saved Successfully!!!");
        return personResponse;
    }
    private PutItemOutcome persistData(PersonRequest personRequest) 
      throws ConditionalCheckFailedException {
        return this.dynamoDb.getTable(DYNAMODB_TABLE_NAME)
          .putItem(
            new PutItemSpec().withItem(new Item()
              .withString("firstName", personRequest.getFirstName())
              .withString("lastName", personRequest.getLastName());
    }
    private void initDynamoDbClient() {
        AmazonDynamoDBClient client = new AmazonDynamoDBClient();
        client.setRegion(Region.getRegion(REGION));
        this.dynamoDb = new DynamoDB(client);
    }
}

这里我们在实现RequestHandler接口的时候,需要实现*handleRequest()*来对请求进行实际的处理。至于其余的代码,我们有:

  • PersonRequest对象——它将包含以 JSON 格式传递的请求值
  • *Context *对象——用于从 lambda 执行环境中获取信息
  • PersonResponse——这是 lambda 请求的响应对象

创建 DynamoDB 对象时,我们将首先创建AmazonDynamoDBClient对象并使用它来创建DynamoDB对象。请注意,该*region *是强制性的。

要在 DynamoDB 表中添加项目,我们将使用PutItemSpec对象——通过指定列数及其值。

我们不需要 DynamoDB 表中的任何预定义模式,我们只需要定义主键列名称,在我们的例子中是***“id”***。

4. 构建部署文件

要构建 lambda 应用程序,我们需要执行以下 Maven 命令:

mvn clean package shade:shade

Lambda 应用程序将被编译并打包到目标文件夹下的jar文件中。

5. 创建 DynamoDB 表

按照以下步骤创建 DynamoDB 表:

  • 登录AWS 账户
  • 单击**“所有服务”下的“DynamoDB ”**
  • 此页面将显示已创建的 DynamoDB 表(如果有)
  • 单击**“创建表”**按钮
  • 提供**“表名”“主键”,其数据类型为“数字”**
  • 点击**“创建”**按钮
  • 将创建表

6. 创建 Lambda 函数

按照以下步骤创建 Lambda 函数:

  • 登录AWS 账户
  • 单击**“所有服务”下的“Lambda ”**
  • 此页面将显示已创建的 Lambda 函数(如果有)或未创建 Lambda 函数,单击**“立即开始”**
  • “选择蓝图” -> 选择“空白功能”
  • “配置触发器” -> 单击**“下一步”**按钮
  • “配置功能”
    • “名称”:SavePerson
    • “描述”:将人保存到 DDB
    • “运行时”:选择**“Java 8”**
    • “上传”:点击**“上传”**按钮,选择 lambda 应用的 jar 文件
  • “处理程序”:com.blogdemo.lambda.dynamodb.SavePersonH​​andler
  • “角色”:选择**“创建自定义角色”**
  • 将弹出一个新窗口,允许配置 IAM 角色以执行 lambda,我们需要在其中添加 DynamoDB 授权。完成后,单击**“允许”**按钮
  • 点击**“下一步”**按钮
  • “审查”:审查配置
  • 点击**“创建函数”**按钮

7. 测试 Lambda 函数

下一步是测试 lambda 函数:

  • 点击**“测试”**按钮
  • 将显示**“输入测试事件”**窗口。在这里,我们将为我们的请求提供 JSON 输入:
{
  "id": 1,
  "firstName": "John",
  "lastName": "Doe",
  "age": 30,
  "address": "United States"
}
  • 单击**“保存并测试”“保存”**按钮
  • 输出可以在**“执行结果”**部分看到:
{
  "message": "Saved Successfully!!!"
}
  • 我们还需要在 DynamoDB 中检查记录是否已持久化:
    • 转到**“DynamoDB”管理控制台**
    • 选择表**“人”**
    • 选择**“项目”**选项卡
    • 在这里,您可以看到在请求中传递给 lambda 应用程序的人的详细信息
  • 所以请求被我们的 lambda 应用程序成功处理