跨亚马逊云账户迁移Amazon DynamoDB 表

数据迁移
云迁移
0
0
<!--StartFragment--> ## 简短描述 您可以根据自己的使用案例选择以下方法之一,将 DynamoDB 表迁移到其他 AWS 账户: * [AWS Backup](https://aws.amazon.com/cn/backup/?trk=cndc-detail) * DynamoDB 导入和导出到 [Amazon Simple Storage Service](https://aws.amazon.com/cn/s3/?trk=cndc-detail) ([Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)) * [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 和 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) * [AWS Data Pipeline](https://aws.amazon.com/cn/datapipeline/?trk=cndc-detail) * [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) ## 解决方法 ### AWS Backup 您可以使用 [AWS Backup](https://aws.amazon.com/cn/backup/?trk=cndc-detail) 创建跨账户 DynamoDB 备份。有关详细信息,请参阅[跨 AWS 账户创建备份副本](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-cross-account-backup.html)和 [AWS Backup 演示:跨账户和跨区域备份](https://www.youtube.com/watch?v=dCy7ixko3tE\\&t=147s)。 在目标账户中,执行以下操作: 1. 在您的 DynamoDB 所在区域的目标账户中创建 [AWS Backup](https://aws.amazon.com/cn/backup/?trk=cndc-detail) 文件库。 2. 创建文件库时,请使用已配置的 [AWS Key Management Service](https://aws.amazon.com/cn/kms/?trk=cndc-detail) (AWS KMS) 密钥。这是您已与同一组织中的源账户共享的密钥。 3. 创建文件库后,向文件库添加 AWS 身份和访问管理 (IAM) 策略,该策略允许同一组织内的其他账户复制到文件库中。您可以通过选择**允许从组织访问备份保险库**选项来实现。 在源账户中,执行以下操作: 1. 在您的 DynamoDB 所在的源账户中,在需要迁移表数据的区域中创建一个 [AWS Backup](https://aws.amazon.com/cn/backup/?trk=cndc-detail) 文件库。 2. 创建文件库时,请使用已配置的 AWS KMS 密钥。这是您与组织中的其他账户共享的密钥。 3. 向文件库添加 IAM policy,允许组织中的其他账户复制到文件库中。您可以通过选择**允许从组织访问备份保管库选项来执行此操作**来实现。 4. [创建备份计划](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-cross-account-backup.html),将源账户中的 DynamoDB 表备份到目标账户。 5. 对于备份保管库,请务必选择您在源账户中创建的保管库。 6. 然后,选择**复制到另一个账户的保管库**选项。 7. 对于分配资源,请务必包括您需要备份的资源。您可以选择**包括特定资源类型**。 8. 对于**选择特定资源类型**,选择 **DynamoDB**。您可以选择所有表,也可以只选择需要备份的表。 在目标账户中,执行以下操作: 1. 在目标账户中,导航到您创建的文件库。\ 您可以看到**恢复点**与源账户中的恢复点相同。 2. 您可以在目标账户中[恢复 DynamoDB 表](https://docs.aws.amazon.com/aws-backup/latest/devguide/restoring-a-backup.html)。 \*\*注:\*\*对于此方法,源账户和目标账户必须在同一个组织中。 ### DynamoDB 导入和导出到 Amazon S3 1. 通过[将表导出到目标账户中的 Amazon S3 存储桶](https://repost.aws/zh-Hans/knowledge-center/back-up-dynamodb-s3)来迁移 DynamoDB 表数据。请确保 DynamoDB 具有对此 S3 存储桶的 **s3:ListBucket** 权限。请确保 S3 存储桶没有任何拒绝访问导出数据的访问控制列表。 2. 导出完成后,将[数据从 S3 存储桶导入到目标账户中的新表](https://aws.amazon.com/blogs/database/amazon-dynamodb-can-now-import-amazon-s3-data-into-a-new-table/)中。有关更多信息,请参阅 [DynamoDB 数据从 Amazon S3 导入:工作原理](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataImport.HowItWorks.html)。 \*\*注意:\*\*导出表不会占用表的任何读取容量,也不会影响表的性能或可用性。此外,导入表不会占用任何写入器容量。因此,在导入过程中,您不需要额外的容量。 ### Amazon S3 和 AWS Glue 您可以使用 S3 存储桶和 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) 任务将 DynamoDB 表迁移到不同的 AWS 账户。 1.您可以将表导出到其他账户中的 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 存储桶,从而执行 DynamoDB 表的初始迁移。 当您将表从账户 A 导出到账户 B 中的 S3 存储桶时,这些对象仍归账户 A 所有。默认情况下,账户 B 中的 AWS Identify Access Management (IAM) 用户将无权访问这些对象。导出功能不会使用访问控制列表(ACL)bucket-owner-full-control 写入数据。要解决此对象所有权问题,请在导出完成后为所有导出的对象添加 [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html) 权限。此解决方法会向账户 B 中的存储桶拥有者赋予对所有导出对象的访问权限。有关更多信息,请参阅[为何我无法访问由另一个 AWS 账户上载到我的 Amazon S3 存储桶的对象?](https://repost.aws/zh-Hans/knowledge-center/s3-bucket-owner-access) 2.使用 Glue 任务从 S3 存储桶读取文件并将其写入目标 DynamoDB 表。按照步骤 1 所述将数据导出到目标账户中的 S3 存储桶后,请在目标账户中执行以下操作: [在 Amazon S3 中的数据上运行 AWS Glue 爬网程序](https://docs.aws.amazon.com/glue/latest/ug/tutorial-add-crawler.html#tutorial-add-crawler-step2)。爬网程序推断架构并使用该架构定义创建一个 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) 数据目录表。 使用 [AWS Glue Studio 创建 ETL 任务](https://docs.aws.amazon.com/glue/latest/ug/creating-jobs-chapter.html#create-jobs-start)。指定源、转换和目标后,[AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) Studio 会根据这些输入自动生成 PySpark 代码。对于此任务,请将 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) Data Catalog 表指定为源,将 **ApplyMApplyMapping** 指定为转换。不要指定目标。[AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) Studio 生成 PySpark 代码来从 S3 创建 DynamicFrame。 请确保 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) Studio 所生成代码的密钥名称和数据类型映射正确。如果映射不正确,则修改代码并更正映射。由于您在创建 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) 任务时未指定目标,因此请添加一个与本示例中的以下内容类似的接收器操作。添加此操作可允许任务直接写入目标 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](https://aws.amazon.com/cn/glue/?trk=cndc-detail) Studio 或 [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) 控制台上的“任务”页面运行任务。 3.将表导出到 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 存储桶后,使用 DynamoDB Streams 和 [AWS Lambda](https://aws.amazon.com/cn/lambda/?trk=cndc-detail) 将源表中的数据插入和更新迁移到另一个账户中的目标表。有关更多信息,请参阅[使用 Amazon DynamoDB 进行跨账户复制](https://aws.amazon.com/blogs/database/cross-account-replication-with-amazon-dynamodb/)。 ### AWS Glue [AWS Glue](https://aws.amazon.com/cn/glue/?trk=cndc-detail) ETL 任务支持从另一个账户的 DynamoDB 表读取数据以及将数据写入另一个账户的 DynamoDB 表。使用 **dynamodb.sts.roleArn** 参数在任务脚本中代入跨账户角色。代入此角色可让您获取跨账户存取 DynamoDB 时必须使用的临时凭证。有关更多信息,请参阅[跨账户跨区域访问 DynamoDB 表](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-dynamo-db-cross-account.html)以及[如何使用 AWS Step Functions 和 AWS Glue 将 Amazon DynamoDB 表导出到 Amazon S3](https://aws.amazon.com/blogs/big-data/how-to-export-an-amazon-dynamodb-table-to-amazon-s3-using-aws-step-functions-and-aws-glue/)。 ### Data Pipeline 要使用数据管道将 DynamoDB 表移动到其他账户,您还可以执行以下操作: 1. 将 DynamoDB 表从源账户导出到目标账户中的 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)。 2. 从 S3 存储桶导入导出的数据。 有关更多信息,请参阅[如何使用 Data Pipeline 将 DynamoDB 表备份到另一个账户中的 S3 存储桶?](https://repost.aws/zh-Hans/knowledge-center/data-pipeline-account-access-dynamodb-s3)以及[如何使用 AWS Data Pipeline 将 Amazon DynamoDB 表从一个 AWS 账户迁移到另一个 AWS 账户](https://aws.amazon.com/blogs/database/how-to-migrate-amazon-dynamodb-tables-from-one-aws-account-to-another-with-aws-data-pipeline/)。 \*\*注意:\*\*目标账户无法访问 S3 存储桶中的 DynamoDB 数据。要使用这些数据,请将其还原到 DynamoDB 表。Data Pipeline 提供了以最少的手动操作来移动表的最简单方法。但是,自定义选项较少。 ### Amazon EMR 当您使用 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 迁移 DynamoDB 表时,请根据您的用例使用以下选项之一: * 如果您能够承受迁移期间的停机时间,则停止对源表的写入操作。这是为了确保目标表与源表保持同步。 * 如果无法承受停机时间,则必须将迁移期间发生的所有事务存储在暂存表中。在将原始表迁移到其他 AWS 账户后,可将新交易从暂存表推送到目标表。 \*\*注意:\*\*使用 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 迁移表所需的时间会因 DynamoDB 表提供的吞吐量网络性能和表中存储的数据量的不同而有很大差异。 要使用 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 迁移 DynamoDB 表,请执行以下操作: 1. 在源账户和目标账户中[启动 EMR 集群](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs-launch-sample-cluster.html)。在 **Software configuration**(软件配置)部分中,确保您选择了包含 Apache Hive 的选项。注意:为确保安全性,最佳实践是在私有子网中启动 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 集群。私有子网必须具有 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) VPC 端点和指向 DynamoDB 的路由。有关更多信息,请参阅[私有子网](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-clusters-in-a-vpc.html#emr-vpc-private-subnet)。如果集群需要访问互联网,则请使用位于公有子网中的 NAT 网关。有关更多信息,请参阅[带有公有子网和私有子网 (NAT) 的 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html)。 2. 确保两个账户中的 **EMR_EC2\_DefaultRole** IAM 角色都有写入目标账户中的 S3 存储桶的权限。有关更多信息,请参阅[为 IAM 服务角色配置访问 AWS 服务和资源所需的 Amazon EMR 权限](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html)。 3. 在源账户中,[使用 SSH 连接到主节点](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)。 4. 在源账户中,[使用 Hive 命令将 DynamoDB 表数据导出](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMR_Hive_Commands.html#EMR_Hive_Commands_exporting)到目标账户中的 S3 存储桶。 5. 在目标账户中,[将 Amazon S3 数据导入到新 DynamoDB 表](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMR_Hive_Commands.html#EMR_Hive_Commands_importing)。 6. 如果您使用暂存表捕获在迁移过程中发生的写入,请在暂存表上重复步骤 4 和 5。 *** ## 相关信息 [在 DynamoDB 和 Amazon S3 之间复制数据](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.CopyingData.S3.html) <!--EndFragment-->
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭