亚马逊AWS官方博客
使用 Dynamodump 简化 Amazon DynamoDB 跨账号迁移
Amazon DynamoDB 是亚马逊云科技提供的全托管 NoSQL 数据库服务,提供快速且可预测性能,能够实现无缝扩展。全球上万 AWS 的客户使用 Amazon DynamoDB 来承载他们的关节业务负载。在某些情况下,比如公司之间的收购或者为了满足合规要求,客户需要将在一个账户下面的多个 Amazon DynamoDB 的表格搬迁到另外一个账户。
在另一篇“如何将 Amazon DynamoDB 表从一个 AWS 账户迁移到另一 AWS 账户?”的博客中提到了使用 AWS Backup,Amazon DynamoDB 出导入,Amazon Glue 和 Amazon EMR 等几种方式。但是使用这些方式都要满足同一个前提:在目标账号下的 Amazon DynamoDB 里面手动创建目标表格和元数据,然后才能使用博客里面提到的工具将数据导入。当客户有成百上千张表格需要搬迁的时候,手动创建目标表格不但费时费力,还容易出现错误。如果源表里面还有二级索引,将会给搬迁造成更大的困难。
Dynamodump 是由 Benny Chew 和其他贡献者开发的一款开源工具。截止本文发表,这个工具的源代码还在持续更新和维护。本文将演示如何使用这个工具将 Amazon DynamoDB 表格的元数据(attributes/secondary index)轻松搬迁。
1. 先决条件
- 两个不同账号(一个源账号,一个目标账号)下拥有 AmazonDynamoDBFullAccess 权限[1]的 IAM 用户和访问密钥。在以下的范例中,我们将使用 xxxx-xxxx-3710 这个账号作为源账号,使用 xxxx-xxxx-6589 这个账号作为目标账号。
- 源账号下的 Amazon DynamoDB 的表和数据。在这个范例中,我在源账号中有 3 张 Amazon DynamoDB 的表:demo1 的表使用分区键作为主键;demo2 的表使用分区键和排序键作为主键,并且设置了全局二级索引;demo3 使用分区键和排序键作为主键,并且设置了本地二级索引。
- 一台可以远程登录的 EC2 虚机。这台 EC2 必须可以通过互联网或者终端节点访问两个不同账号下的 DynamoDB 服务。
2. 安装 Dynamodump 工具
在 EC2 运行 pip install dynamodump
命令,通过 PyPI 来安装 dynamodump 工具。确认安装版本是 1.8.0 或以上,并在安装成功后运行 dynamodump -h
来确认 dynamodump 的命令可以使用。请阅读帮助信息来了解命令和参数的使用方式。
这个工具也发布了 Docker 版本,详情请参考 Github 项目的说明。
3. 配置源账号 IAM 用户凭据
Dynamodump 工具是使用 AWS SDK for Python(boto3)开发的,所以它支持标准的 AWS 凭据提供商链来查找 IAM 用户凭据。你也可以通过使用命令行参数的方式来指定工具运行时所使用的 IAM 用户凭据。在这个范例中,我是通过配置操作系统的环境变量来提供源账号的 IAM 用户凭据。
4. 在源账户中备份 DynamoDB 表
使用源账号的 IAM 用户运行 dynamodump -m backup -r ap-southeast-1 -s "*"
来备份源账号下在 ap-southeast-1 这个区域所有 DynamoDB 的表。你也可以通过使用命令行参数来指定符合前缀,标签或者名字的表格进行有选择性的备份。详细使用方式可以参考帮助信息。
默认情况下,工具会将表格的元数据和数据备份到名为 dump 的子文目录下,你也可以使用命令行参数,比如 --schemaOnly
,--dataOnly
和 —dumpPath
,来选择只备份元数据或者数据以及备份的目录。
5. 配置目标账号 IAM 用户凭据
在还原源表和数据之前,先要把环境变量中的用户凭证改为目标账号的 IAM 用户凭证。
6. 在目标账号下还原表格元数据
在这个范例中,你可以看到我在目标账号下 ap-northeast-1 地区的 DynamoDB 里面没有任何表。
运行 dynamodump -m restore -r ap-northeast-1 -s "*" –schemaOnly
将本地 dump 目录下的备份的 DynamoDB 表的元数据还原到目标账号。
7. 在目标账号下还原数据
- 如果使用 Amazon DynamoDB 的上层业务负载允许搬迁时中断业务,那么可以在中断业务后,通过使用
dynamodump -m restore -r ap-northeast-1 -s "*" --dataOnly
命令或者 How can I migrate my Amazon DynamoDB tables from one AWS account to another? 文章中提到的任意一种方式来恢复数据。 - 如果需要最小化业务的中断窗口,可以使用 Cross-account replication with Amazon DynamoDB 文章中提到的全量加增量的方式同步数据。
工具的局限性
- Dynamodump 工具目前还不支持将源表的读/写容量配置还原。默认情况下,目标账号的新表读/写容量会被预制为 25。你可以通过使用
--readCapacity
和--writeCapacity
参数来更改预制的容量,或者使用--billingMode PAY_PER_REQUEST
参数将预制容量改成按需容量模式。 - 使用
--billingMode PAY_PER_REQUEST
按需容量模式的时候,不支持配置了全局二级索引的表。如果遇到此类问题,需要先使用默认的预制容量,还原后手动改为按需容量模式。
截止本文发布,以上局限性还存在于 dynamodump 的最新版本 1.8.0 中。后续版本发布可能会进行改进。
[1] 在实际生产环境中,建议根据需要的资源创建更严格的权限策略。