1. 简介

AWS Lambda 是亚马逊提供的无服务器计算服务,而 AWS DynamoDB 则是亚马逊推出的 NoSQL 数据库服务。

DynamoDB 支持文档存储和键值存储两种模式,且完全由 AWS 托管运维。

⚠️ 开始前请确保:

2. Maven 依赖

启用 Lambda 需要以下核心依赖(Maven Central):

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

操作 AWS 资源需要事件依赖(Maven Central):

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

构建应用需使用 Maven Shade Plugin

<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 int id;
    private String firstName;
    private String lastName;
    private int age;
    private String address;

    // 标准 getter/setter
}
public class PersonResponse {
    private String message;
    
    // 标准 getter/setter
}

入口类实现 RequestHandler 接口:

public class SavePersonHandler implements RequestHandler<PersonRequest, PersonResponse> {

    private AmazonDynamoDB amazonDynamoDB;

    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 void persistData(PersonRequest personRequest) throws ConditionalCheckFailedException {

        Map<String, AttributeValue> attributesMap = new HashMap<>();

        attributesMap.put("id", new AttributeValue(String.valueOf(personRequest.getId())));
        attributesMap.put("firstName", new AttributeValue(personRequest.getFirstName()));
        attributesMap.put("lastName", new AttributeValue(personRequest.getLastName()));
        attributesMap.put("age", new AttributeValue(String.valueOf(personRequest.getAge())));
        attributesMap.put("address", new AttributeValue(personRequest.getAddress()));

        amazonDynamoDB.putItem(DYNAMODB_TABLE_NAME, attributesMap);
    }

    private void initDynamoDbClient() {
        this.amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()
            .withRegion(REGION)
            .build();
    }
}

关键点解析:

  • handleRequest() 是核心处理方法
  • PersonRequest 封装 JSON 请求参数
  • Context 提供 Lambda 执行环境信息
  • PersonResponse 封装返回结果
  • ⚠️ 创建 AmazonDynamoDB 客户端时必须指定区域
  • ✅ 使用 putItem() 写入数据时无需预定义表结构,只需指定主键(本例为 "id"

4. 构建部署包

执行 Maven 命令构建应用:

mvn clean package shade:shade

构建完成后,在 target 目录生成可部署的 JAR 文件。

5. 创建 DynamoDB 表

操作步骤:

  1. 登录 AWS 控制台
  2. "所有服务" 下选择 "DynamoDB"
  3. 在控制台页面点击 "表"
  4. 点击 "创建表"
  5. 配置参数:
    • 表名Person
    • 分区键id(数据类型:数字
  6. 点击 "创建表"

6. 创建 Lambda 函数

操作步骤:

  1. 登录 AWS 控制台
  2. "所有服务" 下选择 "Lambda"
  3. 点击 "创建函数"
  4. 选择 "从头开始创作"
  5. 配置参数:
    • 函数名称SavePerson
    • 运行时Java 8 on Amazon Linux 2
    • 架构x86_64
  6. 执行角色 选择 **"使用现有角色"**,确保该角色包含 DynamoDB 操作权限
  7. 点击 "创建函数"
  8. "代码" 标签页:
    • 点击 "上传来源" → **".zip 或 .jar 文件"**,上传构建的 JAR 包
    • "运行时设置" 点击 "编辑"
    • 修改 "处理程序" 为:com.baeldung.lambda.dynamodb.SavePersonHandler
    • 点击 "保存"

7. 测试 Lambda 函数

测试步骤:

  1. 在 Lambda 函数页面切换到 "测试" 标签
  2. 配置测试事件:
    • 事件名称TestEvent
    • 事件 JSON 输入:
      {
        "id": 1,
        "firstName": "John",
        "lastName": "Doe",
        "age": 30,
        "address": "United States"
      }
      
  3. 点击 "测试" 按钮
  4. 预期返回结果:
    {
      "message": "Saved Successfully!!!"
    }
    
  5. 验证数据持久化:
    • 进入 DynamoDB 管理控制台
    • 选择 "表"Person
    • "探索表项目" 标签页查看写入的数据

✅ 测试通过说明 Lambda 成功处理请求并写入 DynamoDB。

8. 总结

本文快速演示了如何使用 Java 8 开发结合 DynamoDB 的 Lambda 应用。通过详细步骤指导,你可以轻松搭建完整开发环境。

完整示例代码请访问 GitHub 仓库


原始标题:AWS Lambda Using DynamoDB With Java

« 上一篇: RabbitMQ 入门介绍
» 下一篇: cglib入门介绍