AWS DynamoDB Java SDK是否支持通过PITR恢复创建新表
关于AWS DynamoDB Java SDK通过PITR创建新表的问题解答
该需求完全可以实现,AWS DynamoDB Java SDK原生支持通过Point in Time Restore(PITR)接口恢复创建新表,无需手动在控制台执行操作,完全可以集成到Lambda或者Java业务应用流程中。
前提要求
- 源DynamoDB表已经开启PITR功能,且待恢复的时间点处于PITR的保留窗口期(默认最长保留35天)
- 执行操作的身份(Lambda执行角色/Java应用关联的IAM身份)需要具备以下权限:
dynamodb:RestoreTableToPointInTime:核心恢复操作权限dynamodb:DescribeContinuousBackups:查询源表PITR配置的权限- 目标表对应的
dynamodb:CreateTable、dynamodb:DescribeTable等基础表操作权限 - 如果源表/目标表使用了自定义KMS密钥加密,还需要对应KMS密钥的加密/解密权限
核心实现代码示例(基于AWS Java SDK 2.x)
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.RestoreTableToPointInTimeRequest; import software.amazon.awssdk.services.dynamodb.model.RestoreTableToPointInTimeResponse; import java.time.Instant; public class PitrRestoreDemo { public static void main(String[] args) { // 初始化DynamoDB客户端 DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .region(Region.of("你的AWS区域编码,例如cn-north-1")) .build(); // 构建PITR恢复请求 RestoreTableToPointInTimeRequest request = RestoreTableToPointInTimeRequest.builder() // 可替换为.sourceTableName("源表名") .sourceTableArn("arn:aws-cn:dynamodb:cn-north-1:账号ID:table/源表名") .targetTableName("恢复后生成的新表名称") // 若要恢复到最新可用时间点,替换为.useLatestRestorableTime(true) .restoreDateTime(Instant.ofEpochMilli(待恢复的时间戳毫秒数)) // 可选参数:自定义目标表配置,比如调整为按需付费模式 // .billingModeOverride(BillingMode.PAY_PER_REQUEST) .build(); // 提交恢复任务 RestoreTableToPointInTimeResponse response = dynamoDbClient.restoreTableToPointInTime(request); } }
如果使用AWS Java SDK 1.x版本,核心接口逻辑类似,仅类名和参数构造方式存在差异
注意事项
- PITR恢复是异步操作,调用接口成功仅代表恢复任务提交成功,新表需要一定时间才会进入
ACTIVE可用状态,你可以通过describeTable接口轮询表状态,或者配置DynamoDB表事件通知到EventBridge触发后续流程 - 新表默认会继承源表的索引配置、容量配置、加密配置等属性,你可以在请求中通过对应的Override参数自定义目标表配置
- 恢复操作不会影响源表的正常读写
内容的提问来源于stack exchange,提问作者user2712135
相关产品推荐
相关产品推荐

