如何将 Amazon DynamoDB 表从一个 AWS 账户迁移到另一 AWS 账户?
我想执行跨账户 Amazon DynamoDB 表迁移。
简短描述
您可以根据自己的使用案例选择以下方法之一,将 DynamoDB 表迁移到其他 AWS 账户:
- AWS Backup
- DynamoDB 导入和导出到 Amazon Simple Storage Service (Amazon S3)
- Amazon S3 和 AWS Glue
- AWS Data Pipeline
- Amazon EMR
解决方法
AWS Backup
您可以使用 AWS Backup 创建跨账户 DynamoDB 备份。有关详细信息,请参阅跨 AWS 账户创建备份副本和 AWS Backup 演示:跨账户和跨区域备份。
在目标账户中,执行以下操作:
- 在您的 DynamoDB 所在区域的目标账户中创建 AWS Backup 文件库。
- 创建文件库时,请使用已配置的 AWS Key Management Service (AWS KMS) 密钥。这是您已与同一组织中的源账户共享的密钥。
- 创建文件库后,向文件库添加 AWS 身份和访问管理 (IAM) 策略,该策略允许同一组织内的其他账户复制到文件库中。您可以通过选择允许从组织访问备份保险库选项来实现。
在源账户中,执行以下操作:
- 在您的 DynamoDB 所在的源账户中,在需要迁移表数据的区域中创建一个 AWS Backup 文件库。
- 创建文件库时,请使用已配置的 AWS KMS 密钥。这是您与组织中的其他账户共享的密钥。
- 向文件库添加 IAM policy,允许组织中的其他账户复制到文件库中。您可以通过选择允许从组织访问备份保管库选项来执行此操作来实现。
- 创建备份计划,将源账户中的 DynamoDB 表备份到目标账户。
- 对于备份保管库,请务必选择您在源账户中创建的保管库。
- 然后,选择复制到另一个账户的保管库选项。
- 对于分配资源,请务必包括您需要备份的资源。您可以选择包括特定资源类型。
- 对于选择特定资源类型,选择 DynamoDB。您可以选择所有表,也可以只选择需要备份的表。
在目标账户中,执行以下操作:
- 在目标账户中,导航到您创建的文件库。
您可以看到恢复点与源账户中的恢复点相同。 - 您可以在目标账户中恢复 DynamoDB 表。
**注:**对于此方法,源账户和目标账户必须在同一个组织中。
DynamoDB 导入和导出到 Amazon S3
- 通过将表导出到目标账户中的 Amazon S3 存储桶来迁移 DynamoDB 表数据。请确保 DynamoDB 具有对此 S3 存储桶的 s3:ListBucket 权限。请确保 S3 存储桶没有任何拒绝访问导出数据的访问控制列表。
- 导出完成后,将数据从 S3 存储桶导入到目标账户中的新表中。有关更多信息,请参阅 DynamoDB 数据从 Amazon S3 导入:工作原理。
**注意:**导出表不会占用表的任何读取容量,也不会影响表的性能或可用性。此外,导入表不会占用任何写入器容量。因此,在导入过程中,您不需要额外的容量。
Amazon S3 和 AWS Glue
您可以使用 S3 存储桶和 AWS Glue 任务将 DynamoDB 表迁移到不同的 AWS 账户。
1.您可以将表导出到其他账户中的 Amazon S3 存储桶,从而执行 DynamoDB 表的初始迁移。
当您将表从账户 A 导出到账户 B 中的 S3 存储桶时,这些对象仍归账户 A 所有。默认情况下,账户 B 中的 AWS Identify Access Management (IAM) 用户将无权访问这些对象。导出功能不会使用访问控制列表(ACL)bucket-owner-full-control 写入数据。要解决此对象所有权问题,请在导出完成后为所有导出的对象添加 PutObjectAcl 权限。此解决方法会向账户 B 中的存储桶拥有者赋予对所有导出对象的访问权限。有关更多信息,请参阅为何我无法访问由另一个 AWS 账户上载到我的 Amazon S3 存储桶的对象?
2.使用 Glue 任务从 S3 存储桶读取文件并将其写入目标 DynamoDB 表。按照步骤 1 所述将数据导出到目标账户中的 S3 存储桶后,请在目标账户中执行以下操作:
在 Amazon S3 中的数据上运行 AWS Glue 爬网程序。爬网程序推断架构并使用该架构定义创建一个 AWS Glue 数据目录表。
使用 AWS Glue Studio 创建 ETL 任务。指定源、转换和目标后,AWS Glue Studio 会根据这些输入自动生成 PySpark 代码。对于此任务,请将 AWS Glue Data Catalog 表指定为源,将 ApplyMApplyMapping 指定为转换。不要指定目标。AWS Glue Studio 生成 PySpark 代码来从 S3 创建 DynamicFrame。
请确保 AWS Glue Studio 所生成代码的密钥名称和数据类型映射正确。如果映射不正确,则修改代码并更正映射。由于您在创建 AWS Glue 任务时未指定目标,因此请添加一个与本示例中的以下内容类似的接收器操作。添加此操作可允许任务直接写入目标 DynamoDB 表:
glueContext.write_dynamic_frame_from_options ( frame = Mapped, connection_type = "dynamodb", connection_options = { "dynamodb.region": "", "dynamodb.output.tableName": "", "dynamodb.throughput.write.percent": "1.0" } )
要将数据加载到目标表,请从 AWS Glue Studio 或 AWS Glue 控制台上的“任务”页面运行任务。
3.将表导出到 Amazon S3 存储桶后,使用 DynamoDB Streams 和 AWS Lambda 将源表中的数据插入和更新迁移到另一个账户中的目标表。有关更多信息,请参阅使用 Amazon DynamoDB 进行跨账户复制。
AWS Glue
AWS Glue ETL 任务支持从另一个账户的 DynamoDB 表读取数据以及将数据写入另一个账户的 DynamoDB 表。使用 dynamodb.sts.roleArn 参数在任务脚本中代入跨账户角色。代入此角色可让您获取跨账户存取 DynamoDB 时必须使用的临时凭证。有关更多信息,请参阅跨账户跨区域访问 DynamoDB 表以及如何使用 AWS Step Functions 和 AWS Glue 将 Amazon DynamoDB 表导出到 Amazon S3。
Data Pipeline
要使用数据管道将 DynamoDB 表移动到其他账户,您还可以执行以下操作:
- 将 DynamoDB 表从源账户导出到目标账户中的 Amazon S3。
- 从 S3 存储桶导入导出的数据。
有关更多信息,请参阅如何使用 Data Pipeline 将 DynamoDB 表备份到另一个账户中的 S3 存储桶?以及如何使用 AWS Data Pipeline 将 Amazon DynamoDB 表从一个 AWS 账户迁移到另一个 AWS 账户。
**注意:**目标账户无法访问 S3 存储桶中的 DynamoDB 数据。要使用这些数据,请将其还原到 DynamoDB 表。Data Pipeline 提供了以最少的手动操作来移动表的最简单方法。但是,自定义选项较少。
Amazon EMR
当您使用 Amazon EMR 迁移 DynamoDB 表时,请根据您的用例使用以下选项之一:
- 如果您能够承受迁移期间的停机时间,则停止对源表的写入操作。这是为了确保目标表与源表保持同步。
- 如果无法承受停机时间,则必须将迁移期间发生的所有事务存储在暂存表中。在将原始表迁移到其他 AWS 账户后,可将新交易从暂存表推送到目标表。
**注意:**使用 Amazon EMR 迁移表所需的时间会因 DynamoDB 表提供的吞吐量网络性能和表中存储的数据量的不同而有很大差异。
要使用 Amazon EMR 迁移 DynamoDB 表,请执行以下操作:
- 在源账户和目标账户中启动 EMR 集群。在 Software configuration(软件配置)部分中,确保您选择了包含 Apache Hive 的选项。注意:为确保安全性,最佳实践是在私有子网中启动 Amazon EMR 集群。私有子网必须具有 Amazon S3 VPC 端点和指向 DynamoDB 的路由。有关更多信息,请参阅私有子网。如果集群需要访问互联网,则请使用位于公有子网中的 NAT 网关。有关更多信息,请参阅带有公有子网和私有子网 (NAT) 的 VPC。
- 确保两个账户中的 EMR_EC2_DefaultRole IAM 角色都有写入目标账户中的 S3 存储桶的权限。有关更多信息,请参阅为 IAM 服务角色配置访问 AWS 服务和资源所需的 Amazon EMR 权限。
- 在源账户中,使用 SSH 连接到主节点。
- 在源账户中,使用 Hive 命令将 DynamoDB 表数据导出到目标账户中的 S3 存储桶。
- 在目标账户中,将 Amazon S3 数据导入到新 DynamoDB 表。
- 如果您使用暂存表捕获在迁移过程中发生的写入,请在暂存表上重复步骤 4 和 5。
相关信息

相关内容
- 已提问 3 个月前lg...
- 已提问 5 个月前lg...
- 已提问 1 个月前lg...
- 已提问 5 个月前lg...
- 已提问 2 个月前lg...
- AWS 官方已更新 3 个月前
- AWS 官方已更新 4 个月前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 8 个月前