如何低成本归档AWS DynamoDB并实现后续恢复?
Amazon DynamoDB 长期归档至S3并可恢复的实操方案
如果你需要暂停项目6个月以上,把DynamoDB数据归档到S3来压低成本,下面是一套完整的实操流程,涵盖导出、成本优化和后续恢复的全步骤:
一、把DynamoDB数据导出到S3
1. 控制台操作
- 登录AWS控制台,找到DynamoDB服务
- 选中要归档的表,切换到备份与恢复标签
- 点击导出到S3,配置核心参数:
- 导出范围:选整个表(如果只需要特定时间点的数据,也可以指定时间戳)
- S3存储桶:选已有的桶,或者新建一个(建议开启版本控制和SSE-S3加密,保障数据安全)
- 导出格式:选DynamoDB JSON,后续恢复时兼容性最好
- IAM角色:用系统自动生成的角色就行,前提是它有DynamoDB导出和S3写入权限
- 确认配置后启动导出,等待任务完成(时间长短看表的数据量大小)
2. AWS CLI命令操作
习惯用命令行的话,直接跑下面的命令(替换占位符为你的实际信息):
aws dynamodb export-table-to-point-in-time \ --table-name your-target-table \ --s3-bucket your-archive-bucket \ --s3-prefix dynamodb-long-term-archive/ \ --export-format DYNAMODB_JSON \ --point-in-time-recovery-sampling-limit 1.0
--s3-prefix可以自定义归档的路径前缀,方便后续管理。
二、砍掉不必要的成本:处理原DynamoDB表
导出完成后,先验证S3里的数据完整(比如下载几个文件核对记录数),然后:
- 直接删除原DynamoDB表:这是最彻底的降本方式,完全停止表的存储和读写费用
- 要是怕误删,也可以先把表改成按需模式,同时暂停所有读写流量,但长期来看还是删表更划算
三、未来恢复DynamoDB表
当项目重启需要恢复数据时,按以下步骤操作:
1. 控制台恢复
- 回到DynamoDB控制台,选备份与恢复 -> 导入S3数据
- 选择存归档数据的S3桶和路径,配置导入参数:
- 目标表:新建一个表,必须和原表的主键结构一致(提前记好原表的schema、索引、吞吐量配置)
- 导入格式:选DynamoDB JSON
- IAM角色:选拥有S3读取权限和DynamoDB写入权限的角色
- 启动导入任务,等数据导入完成就行
2. AWS CLI命令恢复
用aws dynamodb import-table命令恢复,示例如下(注意替换占位符,尤其是主键结构要和原表完全匹配):
aws dynamodb import-table \ --s3-bucket-source S3Bucket=your-archive-bucket,S3Prefix=dynamodb-long-term-archive/ \ --input-format DYNAMODB_JSON \ --table-creation-parameters '{ "TableName": "restored-project-table", "KeySchema": [{"AttributeName": "user_id", "KeyType": "HASH"}], "AttributeDefinitions": [{"AttributeName": "user_id", "AttributeType": "S"}], "ProvisionedThroughput": {"ReadCapacityUnits": 5, "WriteCapacityUnits": 5} }'
要是忘了原表的结构,导出前可以用aws dynamodb describe-table --table-name your-target-table命令查看并保存。
四、关键细节提醒
- S3存储优化:把归档数据放到S3智能分层或者直接归档到S3 Glacier Flexible Retrieval,能进一步降低长期存储成本(注意Glacier检索需要时间,根据你的恢复需求选择)
- 数据验证:导出后一定要核对原表的条目数和S3导出文件的记录数,避免丢数据
- 权限安全:给S3桶配置严格的权限策略,防止未授权访问归档数据
- 信息留存:把原表的schema、索引、加密配置、吞吐量设置都记下来,恢复时才能完全复刻原表
内容的提问来源于stack exchange,提问作者Stephen Graham
相关产品推荐
相关产品推荐

