如何将 DynamoDB 表从一个 AWS 账户迁移到另一个账户?

3 分钟阅读
0

我想将我的 Amazon DynamoDB 表中的数据复制到同一账户或不同账户中的新表

简短描述

您可以使用多种方法将数据从一个 AWS 账户的 DynamoDB 表传输到另一个 AWS 账户。最佳选择可能取决于多个因素,包括数据量、实时更新的需求以及数据转换的复杂程度。

要将 DynamoDB 表从一个 AWS 账户迁移到另一个 AWS 账户,请选择以下选项之一:

  • AWS Backup
  • DynamoDB 导出到 Amazon Simple Storage Service (Amazon S3) 和导入
  • Amazon EMR
  • AWS Data Pipeline
  • Amazon S3 和 AWS Glue
  • 自定义导出和导入脚本

解决方法

根据您的用例,完成以下任务。

AWS Backup

对于同一 AWS Organizations 组织中的源 AWS 账户和目标 AWS 账户,AWS Backup 可以执行跨区域和跨账户 DynamoDB 数据传输。有关详细信息,请参阅跨 AWS 账户创建备份副本

在目标账户中,完成以下步骤:

  1. 在 DynamoDB 所在的 AWS 区域的目标账户中创建 AWS Backup 保管库。创建保管库时,请使用您配置的 AWS Key Management Service (AWS KMS) 密钥。这是与同一组织中的源账户共享的密钥。
  2. 向保管库中添加 AWS Identity and Access Management (IAM) 策略,以允许您备份到保管库。为此,请选择 Allow access to a backup vault from organization(允许从组织访问备份保管库)选项。这样一来,同一组织内的其他账户即可复制到保管库中。

在源账户中,完成以下任务:

  1. 在需要将表数据迁移到的区域创建 AWS Backup 保管库。创建保管库时,请使用已配置的 AWS KMS 密钥。这是与组织中其他账户共享的密钥。
  2. 向保管库中添加 IAM 策略,以允许组织中的其他账户复制到保管库中。为此,请选择 Allow access to a backup vault from organization(允许从组织访问备份保管库)选项。
  3. 创建备份计划,以将源账户中 DynamoDB 表的备份生成到目标账户。对于 Backup vault(备份保管库),选择您在源账户中创建的保管库。
  4. 选择 Copy to another account's vault(复制到其他账户的保管库)选项。
  5. 对于分配资源,选择 Include specific resource types(包括特定的资源类型)选项,以包括必须备份的资源。
  6. 对于 Select specific resource types(选择特定的资源类型),选择 DynamoDB。然后,选择所有表,或仅选择必须备份的表。

要查看您的配置并还原表,请完成以下步骤:

  1. 在目标账户中,导航到您创建的保管库。可以看到 Recovery points(恢复点)与源账户中的恢复点相同。
  2. 在目标账户中还原 DynamoDB 表

**注意:**此选项仅适用于属于同一 AWS Organization 的账户。

DynamoDB 导出到 Amazon S3 和导入

使用 DynamoDB 导出到 Amazon S3 功能,可在时间点恢复期内的任意时刻从 Amazon DynamoDB 表中导出数据。有关如何使用此功能的示例,请参阅在不编码的情况下将 Amazon DynamoDB 表数据导出到 Amazon S3 中的数据湖

要使用“DynamoDB 导出到 Amazon S3”功能,请完成以下步骤:

  1. 要迁移 DynamoDB 表数据,请将表导出到目标账户中的 Amazon S3 存储桶
    **注意:**DynamoDB 必须具有对此 S3 存储桶的 s3:ListBucket 权限。S3 存储桶不能有任何拒绝访问导出数据的访问控制列表。
  2. 将数据从 S3 存储桶导入目标账户中的新表

**注意:**此选项要求您设置并管理 AWS Data Pipeline、跨账户权限和 IAM 角色。

Amazon EMR

要使用 Amazon EMR 将数据导出到 S3 存储桶,请使用以下方法之一:

  • 使用 DynamoDBStorageHandler 对 DynamoDB 表运行 Hive 或 Spark 查询。有关详细信息,请参阅从 DynamoDB 导出数据
  • 要导出或导入 DynamoDB 表,请使用 GitHub 上的开源 emr-dynamodb-tool

要使用 Amazon EMR 迁移 DynamoDB 表,请完成以下步骤:

  1. 在源账户和目标账户中启动 EMR 集群。在 Software configuration(软件配置)部分中,选择包含 Apache Hive 的选项。
    **注意:**最佳做法是在私有子网中启动 Amazon EMR 集群。私有子网必须具有 Amazon S3 VPC 端点和指向 DynamoDB 的路由。如果集群必须访问互联网,请使用位于公有子网中的 NAT 网关。有关详细信息,请参阅具有 NAT 且服务器位于私有子网中的 VPC
  2. 更新两个账户中的 EMR_EC2_DefaultRole IAM 角色,使其拥有写入目标账户中的 S3 存储桶的权限。有关详细信息,请参阅为 Amazon EMR 配置 IAM 服务角色对 AWS 服务和资源的权限
  3. 在源账户中,使用 SSH 连接到领导者节点。
  4. 在源账户中,使用 Hive 命令将 DynamoDB 表数据导出到目标账户中的 S3 存储桶。
  5. 在目标账户中,将 Amazon S3 数据导入到新的 DynamoDB 表
    **注意:**如果使用暂存表来捕获迁移期间发生的写入操作,请针对暂存表重复步骤 3 和 4。

为了减少停机时间,您可以将迁移期间发生的所有事务存储在暂存表中。将源表迁移到目标账户后,请将新事务从暂存表推送到目标表。

使用 Amazon EMR 迁移表所需的时间可能会有所不同。时间取决于 DynamoDB 表的预置吞吐量、网络性能和表中存储的数据量。

**注意:**此选项要求您创建并维护 EMR 集群。

AWS Data Pipeline

使用 AWS Data Pipeline 将 DynamoDB 表中的数据导出到 Amazon S3 存储桶中的文件。此选项在 Amazon EMR 中运行托管 Hadoop 集群,以在 DynamoDB 和 Amazon S3 之间执行读取和写入操作。

**注意:**此选项要求您设置并管理 AWS Data Pipeline、跨账户权限和 IAM 角色。

Amazon S3 和 AWS Glue

AWS Glue ETL 作业支持从另一个账户的 DynamoDB 表中读取数据,以及将数据写入另一个账户的 DynamoDB 表。使用 dynamodb.sts.roleArn 参数在作业脚本中代入跨账户角色。代入角色时,您将获得跨账户访问 DynamoDB 时必须使用的临时凭证。有关详细信息,请参阅跨账户、跨区域访问 DynamoDB 表How to export an Amazon DynamoDB table to Amazon S3 using AWS Step Functions and AWS Glue

**注意:**此选项需要大量使用 Spark,并且您需要维护 AWS Glue ETL 作业的源代码。有关详细信息,请参阅 DynamoDB 连接

自定义导出和导入脚本

对于 2 GB 左右的较小数据集,或在进行一次性传输时,您可以使用手动导出和导入流程。例如,您可以使用 C# 代码,该代码使用 DynamoDB 的扫描操作从源表中读取项目。然后,该代码会使用 BatchWriteItem API 调用将数据写入目标账户中的目标表。

**注意:**对于大型数据集,此过程可能很耗时,且需要自定义脚本。对于运行脚本的 IAM 实体,必须配置跨账户 S3 访问权限

相关信息

如何将 Amazon DynamoDB 表从一个 AWS 账户迁移到另一个账户?

如何将 DynamoDB 表备份到 Amazon S3?

AWS 官方
AWS 官方已更新 8 个月前