如何使用boto3.resource备份DynamoDB并改写备份、恢复代码
使用boto3.resource操作DynamoDB备份与恢复
一、用boto3.resource实现DynamoDB备份
和boto3.client的低层级API调用不同,boto3.resource提供了更面向对象的操作方式,用起来更直观。要实现备份,你只需要先获取对应的DynamoDB资源对象,定位到目标表后调用create_backup()方法即可。
改写后的代码(替换client为resource)
原来基于client的代码:
client = boto3.client('dynamodb', region_name='us-west-2') response = client.create_backup( TableName='test', BackupName='backup_test' )
换成boto3.resource的实现版本:
import boto3 # 初始化DynamoDB资源对象 dynamodb = boto3.resource('dynamodb', region_name='us-west-2') # 获取目标表的对象实例 table = dynamodb.Table('test') # 调用create_backup方法创建备份 response = table.create_backup(BackupName='backup_test') # 打印备份关键信息,方便后续恢复使用 print(f"备份ARN: {response['BackupDetails']['BackupArn']}") print(f"备份创建时间: {response['BackupDetails']['BackupCreationDateTime']}")
这种写法更贴合面向对象的思路,因为已经通过Table对象指定了目标表,无需再重复传入TableName参数。
二、用boto3.resource恢复DynamoDB表
恢复操作同样可以通过boto3.resource完成,核心是需要用到备份的ARN(也就是上面打印的BackupArn)。具体步骤是先初始化DynamoDB资源,然后调用restore_table_from_backup()方法,指定备份ARN和恢复后的目标表名即可。
恢复代码示例
import boto3 dynamodb = boto3.resource('dynamodb', region_name='us-west-2') # 执行恢复操作,替换为你的实际备份ARN和目标表名 restore_response = dynamodb.meta.client.restore_table_from_backup( TargetTableName='test_restored', # 恢复后的新表名 BackupArn='arn:aws:dynamodb:us-west-2:123456789012:table/test/backup/01689999999999-abcdefgh' ) # 打印恢复任务的状态信息 print(f"恢复任务状态: {restore_response['TableDescription']['TableStatus']}") print(f"恢复中的表名: {restore_response['TableDescription']['TableName']}")
恢复注意事项
- 若要恢复到原表名,必须先删除原表,否则会触发「表已存在」的报错。
- 恢复是异步操作,可以通过
Table对象的load()方法轮询表状态,当状态变为ACTIVE时,说明恢复完成。 - 备份ARN可以从创建备份的返回结果中获取,也能在AWS控制台的DynamoDB备份列表里找到。
内容的提问来源于stack exchange,提问作者Nitin
相关产品推荐
相关产品推荐

