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

3 分钟阅读
0

我想在不同账户之间迁移 Amazon DynamoDB 表。

概述

从以下方法中选出适合您用例的方法,将您的 DynamoDB 表迁移到其他 AWS 账户:

  • AWS Backup
  • DynamoDB 导入和导出到 Amazon Simple Storage Service (Amazon S3)
  • Amazon S3 和 AWS Glue
  • Amazon EMR

解决方法

AWS Backup

您可以使用 AWS Backup 创建跨账户 DynamoDB 备份。有关更多信息,请参阅在 AWS 账户之间创建备份副本AWS Backup 演示: 跨账户和跨区域备份

在目标账户中,执行以下操作:

  1. 在您的 DynamoDB 所在区域的目标账户中创建 AWS Backup 保管库。
  2. 创建保管库时,请使用已配置的 AWS Key Management Service (AWS KMS) (AWS KMS) 密钥。您之前已将此密钥告知同一组织中的源账户。
  3. 创建保管库后,向该保管库添加 AWS Identity and Access Management (AWS IAM) 策略。您可以选择允许从组织访问备份保管库 进行操作。这样一来,同一组织内的其他账户即可复制到保管库中。

在源账户中,执行以下操作:

  1. 在您的 DynamoDB 所在的源账户中,在需要迁移表数据的区域中创建 AWS Backup 保管库。
  2. 创建保管库时,请使用已配置的 AWS KMS 密钥。您之前已将此密钥告知组织内的其他帐户。
  3. 向保管库中添加 IAM Policy,允许组织中的其他账户复制到保管库中。您可以通过允许从组织访问备份保管库选项进行操作。
  4. 创建备份计划,将源账户中 DynamoDB 表的备份生成到目标账户。
  5. 对于备份保管库,请务必选择您在源账户中创建的保管库。
  6. 然后,启用复制到其他账户的保管库选项。
  7. 对于分配资源,请务必纳入必须备份的资源。您可以选择包括特定资源类型
  8. 选择特定资源类型中,选择 DynamoDB。您可以选择所有表,也可以只选择必须备份的表。

在目标账户中,执行以下操作:

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

**注意:**对于这种方法,源账户和目标账户必须位于同一个组织中。

DynamoDB 导入和导出到 Amazon S3

  1. 将表导出到目标账户中的 Amazon S3 存储桶,可以迁移 DynamoDB 表数据。请确保 DynamoDB 拥有对此 Amazon S3 存储桶的 s3:ListBucket 权限。确保 Amazon S3 存储桶的访问控制列表均未拒绝访问导出数据的。
  2. 导出完成后,将 Amazon S3 存储桶中的数据导入目标账户中的新表中。有关更多信息,请参阅从 Amazon S3 导入 DynamoDB 数据:工作原理

**注意:**导出表不会消耗表上的任何读取容量,也不会影响表的性能或可用性。此外,导入表也不会消耗任何写入容量。因此,在导入过程中不需要额外的容量。

Amazon S3 和 AWS Glue

您可以使用 Amazon S3 存储桶和 AWS Glue 任务将 DynamoDB 表迁移到其他 AWS 账户。

  1. 您可以通过将 DynamoDB 表导出到另一个账户中的 Amazon S3 存储桶来执行 DynamoDB 表的初始迁移。

将表从账户 A 导出到账户 B 中的 Amazon S3 存储桶时,这些对象仍归账户 A 所有。默认情况下,账户 B 中的 AWS Identify Access Management (AWS IAM) 用户无法访问这些对象。导出功能不会使用访问控制列表 (ACL) 的 bucket-owner-full-control 命令写入数据。要解决此对象所有权问题,请在导出完成后添加对所有导出对象的 PutObjectAcl 权限。此解决方法向账户 B 中的存储桶所有者授予访问所有导出对象的权限。有关更多信息,请参阅为什么我无法访问由其他 AWS 账户上传到我的 Amazon S3 存储桶中的对象?

  1. 使用 Glue 任务从 Amazon S3 存储桶中读取文件并将其写入目标 DynamoDB 表。

按照步骤 1 所述将数据导出到目标账户中的 Amazon S3 存储桶后,在目标账户中执行以下操作:

对 Amazon S3 中的数据运行 AWS Glue 爬网程序。爬网程序推断架构并使用该架构定义创建一个 AWS Glue Data Catalog 表。

使用 AWS Glue Studio 创建 ETL 任务。在您指定来源、转换和目标后,AWS Glue Studio 会根据这些输入内容自动生成 PySpark 代码。对于此任务,请将 AWS Glue Data Catalog 表指定为源,将 ApplyMApplyMapping 指定为转换。不要指定目标。AWS Glue Studio 生成 PySpark 代码来从 Amazon 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 控制台上的任务页面运行任务。

  1. 将表导出到 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

Amazon EMR

使用 Amazon EMR 迁移 DynamoDB 表时,请根据您的用例在以下选项中选择一项进行操作:

  • 如果您可以接受迁移造成的停机,则无需对源表执行写入操作。对源表执行写入操作,是为了确保目标表与源表同步。
  • 如果您无法接受迁移造成的停机,则必须将迁移期间发生的所有事务存储在暂存表中。将原始表迁移到其他 AWS 账户后,将新交易从暂存表推送到目标表。

**注意:**使用 Amazon EMR 迁移表所需的时间可能会有很大差异。这一差异取决于 DynamoDB 表的配置吞吐量、网络性能和表中存储的数据量。

要使用 Amazon EMR 迁移 DynamoDB 表,请执行以下操作:

  1. 在源账户和目标账户中启动 EMR 集群。在软件配置部分,请务必选择包含 Apache Hive 的选项。注意: 在私有子网中启动 Amazon EMR 集群是一种安全最佳实践。私有子网必须具有 Amazon S3 VPC 端点和通往 DynamoDB 的路由。有关更多信息,请参阅私有子网。如果集群必须访问互联网,则使用位于公共子网中的 NAT 网关。有关更多信息,请参阅带有公共和私有子网 (NAT) 的 VPC
  2. 请确保两个账户中的 EMR_EC2_DefaultRole IAM 角色都具有写入目标账户中的 Amazon S3 存储桶的权限。有关更多信息,请参阅配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限
  3. 在源帐户中,使用 SSH 连接到主节点。
  4. 在源账户中,使用 Hive 命令将 DynamoDB 表数据导出到目标账户中的 Amazon S3 存储桶。
  5. 在目标账户中,将 Amazon S3 数据导入到新的 DynamoDB 表中
  6. 如果您使用暂存表来捕获迁移期间发生的写入操作,请针对暂存表重复步骤 4 和 5。

相关信息

在 DynamoDB 和 Amazon S3 之间复制数据

AWS 官方
AWS 官方已更新 7 个月前
没有评论