关于 aws-sdk-java-v2-rds
面向 Java 开发者的指导技能,介绍如何使用 AWS SDK for Java 2.x 管理 Amazon RDS 实例及相关资源,并涵盖 Spring Boot 和 Lambda 集成模式。
主要功能
- 01创建、修改和删除数据库实例
- 02管理快照和参数组
- 03配置备份与 Multi-AZ
- 04监控实例状态
- 05Spring Boot 和 Lambda 集成模式
适用场景
- 01创建或更新 RDS 数据库
- 02在重大变更前创建快照
- 03配置备份和高可用性
- 04将 Lambda 函数连接到 RDS
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-sdk-java-v2-rds安装后在 Claude Code 中输入/aws-sdk-java-v2-rds确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-reference.mdlambda-integration.mdspring-boot-integration.md详细介绍
AWS SDK for Java v2 - RDS 管理
概述
本技能全面介绍如何使用 AWS SDK for Java 2.x 操作 Amazon RDS(关系数据库服务),涵盖数据库实例管理、快照、参数组和 RDS 操作。
使用场景
- 创建、修改或删除 RDS 数据库实例
- 管理数据库快照、参数组和配置
- 设置 Multi-AZ 部署和自动备份
- 将 Lambda 函数连接到 RDS 数据库
- 监控实例状态和性能
说明
按照以下步骤使用 Amazon RDS:
- 添加依赖项 - 包含 AWS RDS SDK 依赖项和数据库驱动程序
- 创建 RDS 客户端 - 使用正确的区域和凭证实例化 RdsClient
- 创建数据库实例 - 使用 createDBInstance() 并设置适当的配置
- 配置安全性 - 设置 VPC 安全组和加密
- 设置备份 - 配置自动备份时段和保留期
- 监控状态 - 使用 describeDBInstances() 检查实例状态
- 创建快照 - 在重大更改前创建手动快照
- 处理故障转移 - 配置 Multi-AZ 以实现高可用性
入门
RDS 客户端设置
RdsClient 是与 Amazon RDS 交互的主要入口。
创建基本客户端:
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.rds.RdsClient;
RdsClient rdsClient = RdsClient.builder()
.region(Region.US_EAST_1)
.build();
// Use client
describeInstances(rdsClient);
// Always close the client
rdsClient.close();
使用自定义配置的客户端:
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
RdsClient rdsClient = RdsClient.builder()
.region(Region.US_WEST_2)
.credentialsProvider(ProfileCredentialsProvider.create("myprofile"))
.httpClient(ApacheHttpClient.builder()
.connectionTimeout(Duration.ofSeconds(30))
.socketTimeout(Duration.ofSeconds(60))
.build())
.build();
查看数据库实例
DescribeDbInstancesResponse response = rdsClient.describeDBInstances();
for (DBInstance instance : response.dbInstances()) {
System.out.println(instance.dbInstanceArn() + " - " + instance.dbInstanceStatus());
}
主要操作
创建数据库实例
CreateDbInstanceRequest request = CreateDbInstanceRequest.builder()
.dbInstanceIdentifier(dbInstanceIdentifier)
.dbName(dbName)
.engine("postgres")
.engineVersion("15.4")
.dbInstanceClass("db.t3.micro")
.allocatedStorage(20)
.masterUsername(masterUsername)
.masterUserPassword(masterPassword)
.publiclyAccessible(false)
.build();
CreateDbInstanceResponse response = rdsClient.createDBInstance(request);
// VALIDATION CHECKPOINT: Wait for instance to be available
rdsClient.waiter().waitUntilDBInstanceAvailable(
DescribeDbInstancesRequest.builder().dbInstanceIdentifier(dbInstanceIdentifier).build()
);
System.out.println("Instance " + dbInstanceIdentifier + " is available!");
管理数据库参数组
CreateDbParameterGroupRequest request = CreateDbParameterGroupRequest.builder()
.dbParameterGroupName(groupName)
.dbParameterGroupFamily("postgres15")
.description(description)
.build();
rdsClient.createDBParameterGroup(request);
管理数据库快照
CreateDbSnapshotRequest request = CreateDbSnapshotRequest.builder()
.dbInstanceIdentifier(dbInstanceIdentifier)
.dbSnapshotIdentifier(snapshotIdentifier)
.build();
CreateDbSnapshotResponse response = rdsClient.createDBSnapshot(request);
集成模式
Spring Boot 集成
请参阅 references/spring-boot-integration.md,了解完整的 Spring Boot 集成示例,包括:
- 使用应用程序属性配置 Spring Boot
- RDS 客户端 Bean 配置
- 服务层实现
- REST 控制器设计
- 异常处理
- 测试策略
Lambda 集成
请参阅 references/lambda-integration.md,了解 Lambda 集成示例,包括:
- 传统的 Lambda + RDS 连接
- 使用连接池的 Lambda
- 使用 AWS Secrets Manager 管理凭证
- 使用 AWS SDK 管理 RDS 的 Lambda
- 安全配置和最佳实践
高级操作
修改数据库实例
ModifyDbInstanceRequest request = ModifyDbInstanceRequest.builder()
.dbInstanceIdentifier(dbInstanceIdentifier)
.dbInstanceClass(newInstanceClass)
.applyImmediately(false)
.build();
rdsClient.modifyDBInstance(request);
删除数据库实例
// VALIDATION CHECKPOINT: Verify instance exists and check status
DBInstance instance = rdsClient.describeDBInstances(
DescribeDbInstancesRequest.builder().dbInstanceIdentifier(dbInstanceIdentifier).build()
).dbInstances().get(0);
if ("available".equals(instance.dbInstanceStatus())) {
DeleteDbInstanceRequest request = DeleteDbInstanceRequest.builder()
.dbInstanceIdentifier(dbInstanceIdentifier)
.skipFinalSnapshot(false)
.finalDBSnapshotIdentifier(snapshotId)
.build();
rdsClient.deleteDBInstance(request);
}
示例
创建并验证完整的 RDS 实例
public String createSecurePostgreSQLInstance(RdsClient rdsClient,
String instanceIdentifier,
String dbName,
String masterUsername,
String masterPassword,
String vpcSecurityGroupId) {
// Create instance with security settings
CreateDbInstanceRequest request = CreateDbInstanceRequest.builder()
.dbInstanceIdentifier(instanceIdentifier)
.dbName(dbName)
.masterUsername(masterUsername)
.masterUserPassword(masterPassword)
.engine("postgres")
.engineVersion("15.4")
.dbInstanceClass("db.t3.micro")
.allocatedStorage(20)
.storageEncrypted(true)
.vpcSecurityGroupIds(vpcSecurityGroupId)
.publiclyAccessible(false)
.multiAZ(true)
.backupRetentionPeriod(7)
.deletionProtection(true)
.build();
rdsClient.createDBInstance(request);
// VALIDATION: Wait for instance availability
rdsClient.waiter().waitUntilDBInstanceAvailable(
DescribeDbInstancesRequest.builder().dbInstanceIdentifier(instanceIdentifier).build()
);
System.out.println("Instance " + instanceIdentifier + " is available!");
return instanceIdentifier;
}
最佳实践
安全性:启用加密(storageEncrypted=true),使用 VPC 安全组,并禁用公有访问。
高可用性:为生产工作负载启用 Multi-AZ。
备份:配置自动备份,并将保留期设为 7 天或更长。
删除保护:为生产数据库启用 deletionProtection(true)。
资源管理:始终使用 try-with-resources 关闭客户端:
try (RdsClient rdsClient = RdsClient.builder().region(Region.US_EAST_1).build()) {
// Use client
}
依赖项
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>rds</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
参考文档
详细的 API 参考请参阅:
- API 参考 - 完整的 API 文档和数据模型
- Spring Boot 集成 - Spring Boot 模式和示例
- Lambda 集成 - Lambda 函数模式和最佳实践
错误处理
请参阅 API 参考,了解全面的错误处理模式,包括常见异常、错误响应结构和分页支持。
限制和警告
- 实例限制:账户对每个区域中的数据库实例数量设有限制
- Multi-AZ 成本:计算成本约翻倍
- 快照成本:手动快照按使用的存储量计费
- 删除保护:无法删除启用了删除保护的实例
- 维护时段:更新期间实例可能不可用
评论
支持 Markdown