如何将DynamoDB备份文件下载至本地主机并恢复到本地实例?
从AWS DynamoDB备份恢复到本地实例的解决方案
核心思路
你已经有云端的DynamoDB备份,无法直接下载到本地,但可以先将备份导出到S3存储桶,再下载到本地,最后导入到本地DynamoDB实例。
步骤1:导出云端备份到S3
使用AWS CLI将备份导出到你的S3存储桶:
- 若使用时间点备份(含自动备份):
aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:你的区域:你的账号ID:table/目标表名 \ --s3-bucket 你的S3桶名 \ --s3-prefix dynamodb-export/ \ --export-format DYNAMODB_JSON \ --point-in-time-recovery-snapshot-time "备份对应的时间戳" - 若使用按需备份,可通过备份ARN关联导出(需先获取备份ARN):
aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:你的区域:你的账号ID:table/目标表名 \ --s3-bucket 你的S3桶名 \ --s3-prefix dynamodb-export/ \ --export-format DYNAMODB_JSON \ --restore-from-backup-arn arn:aws:dynamodb:你的区域:你的账号ID:table/目标表名/backup/备份ID - 查看导出进度:
aws dynamodb describe-export --export-arn 导出任务ARN
步骤2:下载导出文件到本地
导出完成后,用AWS CLI将S3上的文件同步到本地:
aws s3 sync s3://你的S3桶名/dynamodb-export/ ./本地备份目录/
步骤3:导入到本地DynamoDB
方法1:用Python脚本批量导入
确保本地DynamoDB已启动(默认端口8000),运行以下脚本:
import json import boto3 # 连接本地DynamoDB dynamodb = boto3.client('dynamodb', endpoint_url='http://localhost:8000') local_table_name = "你的本地表名" backup_file_path = "./本地备份目录/data.json" # 读取导出的JSON文件(按行解析) with open(backup_file_path, 'r') as f: items = [json.loads(line) for line in f] # 批量写入,每次最多25条 for idx in range(0, len(items), 25): batch_items = items[idx:idx+25] request_items = { local_table_name: [{"PutRequest": {"Item": item}} for item in batch_items] } dynamodb.batch_write_item(RequestItems=request_items)
注意:本地表需提前创建,结构要和原表完全一致(主键、索引等)。
方法2:用dynamodump直接恢复
你提到的dynamodump可以直接读取本地导出文件,无需重新创建备份:
dynamodump -m restore -s ./本地备份目录/ -d http://localhost:8000 -t 你的本地表名
注意事项
- 确保你有足够的AWS权限:
dynamodb:ExportTableToPointInTime、s3:PutObject、s3:GetObject等 - 导出格式选
DYNAMODB_JSON,方便本地解析导入 - 本地DynamoDB表结构必须与原表匹配,否则会出现写入失败
内容的提问来源于stack exchange,提问作者aekiratli
相关产品推荐
相关产品推荐

