1. 简介
AWS Lambda 是亚马逊提供的无服务器计算服务,而 AWS DynamoDB 则是亚马逊推出的 NoSQL 数据库服务。
DynamoDB 支持文档存储和键值存储两种模式,且完全由 AWS 托管运维。
⚠️ 开始前请确保:
- 拥有有效的 AWS 账户(注册地址)
- 已阅读 AWS Lambda Java 开发基础 文章
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 表
操作步骤:
- 登录 AWS 控制台
- 在 "所有服务" 下选择 "DynamoDB"
- 在控制台页面点击 "表"
- 点击 "创建表"
- 配置参数:
- 表名:
Person
- 分区键:
id
(数据类型:数字
)
- 表名:
- 点击 "创建表"
6. 创建 Lambda 函数
操作步骤:
- 登录 AWS 控制台
- 在 "所有服务" 下选择 "Lambda"
- 点击 "创建函数"
- 选择 "从头开始创作"
- 配置参数:
- 函数名称:
SavePerson
- 运行时:
Java 8 on Amazon Linux 2
- 架构:
x86_64
- 函数名称:
- 执行角色 选择 **"使用现有角色"**,确保该角色包含 DynamoDB 操作权限
- 点击 "创建函数"
- 在 "代码" 标签页:
- 点击 "上传来源" → **".zip 或 .jar 文件"**,上传构建的 JAR 包
- 在 "运行时设置" 点击 "编辑"
- 修改 "处理程序" 为:
com.baeldung.lambda.dynamodb.SavePersonHandler
- 点击 "保存"
7. 测试 Lambda 函数
测试步骤:
- 在 Lambda 函数页面切换到 "测试" 标签
- 配置测试事件:
- 事件名称:
TestEvent
- 事件 JSON 输入:
{ "id": 1, "firstName": "John", "lastName": "Doe", "age": 30, "address": "United States" }
- 事件名称:
- 点击 "测试" 按钮
- 预期返回结果:
{ "message": "Saved Successfully!!!" }
- 验证数据持久化:
- 进入 DynamoDB 管理控制台
- 选择 "表" →
Person
- 在 "探索表项目" 标签页查看写入的数据
✅ 测试通过说明 Lambda 成功处理请求并写入 DynamoDB。
8. 总结
本文快速演示了如何使用 Java 8 开发结合 DynamoDB 的 Lambda 应用。通过详细步骤指导,你可以轻松搭建完整开发环境。
完整示例代码请访问 GitHub 仓库。