

# 将 DynamoDB 表从一个账户迁移到另一个账户
<a name="bp-migrating-table-between-accounts"></a>

您可以将 Amazon DynamoDB 表从一个账户迁移到另一个账户，以实施多账户策略或备份策略。您也可以出于测试、调试或合规性原因执行此操作。一个常见的用例是在生产、生产前调试、测试和开发环境中复制 DynamoDB 表，其中每个环境都使用不同的 AWS 账户。

DynamoDB 提供两种将表从一个 AWS 账户迁移到另一个账户的选项：
+ **AWS Backup 跨账户备份和还原**：AWS Backup 是一项完全托管的备份服务，可帮助您集中管理多个 AWS 服务的备份。借助其跨账户备份和还原功能，您可以在一个账户中备份 DynamoDB 表，然后将该备份还原到同一 AWS 组织中的另一个账户。
+ **DynamoDB 导出和导入至 Amazon S3**：使用 DynamoDB 导出和导入至 Amazon S3 功能，您可以将数据完全导出到 Amazon S3 存储桶，然后将这些数据导入另一个 AWS 账户的新表中。当您需要在不属于同一 AWS 组织的账户之间迁移或者不想使用 AWS Backup 时，这种方法非常有用。

**注意**  
从 Amazon S3 导入不支持带有本地二级索引（LSI）的表，但支持全局二级索引（GSI）。有关 LSI 和 GSI 的更多信息，请参阅[在 DynamoDB 中使用二级索引改进数据访问](SecondaryIndexes.md)。

**Topics**
+ [使用用于跨账户备份和还原的 AWS Backup 迁移表](bp-migrating-table-between-accounts-backup.md)
+ [使用导出到 S3 和从 S3 导入功能来迁移表](bp-migrating-table-between-accounts-s3.md)

# 使用用于跨账户备份和还原的 AWS Backup 迁移表
<a name="bp-migrating-table-between-accounts-backup"></a>

**先决条件**
+ 源和目标 AWS 账户在 AWS Organizations 服务中必须属于同一组织
+ 验证 AWS Identity and Access Management（IAM）权限，以创建和使用 AWS Backup 保管库

有关设置跨账户备份的更多信息，请参阅[跨 AWS 账户创建备份副本](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-cross-account-backup.html)。

**定价信息**

AWS 对备份（基于表大小）、AWS 区域之间的任何数据复制（基于数据量）、还原（基于数据量）以及任何正在进行的存储活动收费。为避免持续收费，如果在还原后不需要备份，可以删除该备份。

有关定价的更多信息，请参阅 [AWS Backup 定价](https://aws.amazon.com/backup/pricing/)。

## 步骤 1：启用 DynamoDB 和跨账户备份高级功能。
<a name="bp-migrating-table-between-accounts-backup-enable-advanced-features"></a>

1. 在源和目标 AWS 账户中，访问 AWS 管理控制台并打开 AWS Backup 控制台。

1. 选择**设置**选项。

1. 在 **Amazon DynamoDB 备份高级功能**下，确认已启用**高级功能**。如果没有，请选择**启用**。

1. 在**跨账户管理**的**跨账户备份**下，选择**开启**。

## 步骤 2：在源账户和目标账户中创建备份保管库
<a name="bp-migrating-table-between-accounts-backup-create-backup-vault"></a>

1. 在源 AWS 账户中，打开 AWS Backup 控制台。

1. 选择**备份保管库**。

1. 选择**创建备份保管库**。

1. 复制并保存已创建备份保管库和目标 AWS 账户的 **Amazon 资源名称（ARN）**。

1. 在账户之间复制 DynamoDB 表备份时，您将需要源和目标备份保管库的 ARN。

## 步骤 3：在源账户中，创建 DynamoDB 表备份。
<a name="bp-migrating-table-between-accounts-backup-create-table-backup"></a>

1. 在 **AWS Backup 控制面板**页面上，选择**创建按需备份**。

1. 在**设置**部分，选择 **DynamoDB** 作为**资源类型**，然后选择表名。

1. 在**备份保管库**下拉列表，选择您在源账户中创建的备份保管库。

1. 选择所需的**保留期**。

1. 选择**创建按需备份**。

1. 在 **AWS Backup 作业**页面的**备份作业**选项卡上，监控备份作业的状态。

## 步骤 4：将 DynamoDB 表备份从源账户复制到目标账户
<a name="bp-migrating-table-between-accounts-backup-copy-table-backup"></a>

1. 完成备份作业后，在源账户中打开 AWS Backup 控制台，然后选择**备份保管库**。

1. 在**备份**下，选择 DynamoDB 表备份。选择**操作**，然后选择**复制**。

1. 输入目标账户所在的 AWS 区域。

1. 对于**外部保管库 ARN**，请输入您在目标账户中创建的备份保管库的 ARN。

1.  在目标账户的备份保管库中，启用允许从源账户访问的权限以便复制备份。

## 步骤 5：还原目标账户中的 DynamoDB 表备份
<a name="bp-migrating-table-between-accounts-restore-table-backup"></a>

1. 在目标 AWS 账户中，打开 AWS Backup 控制台并选择**备份保管库**。

1. 在**备份**下，选择从源账户复制的备份。选择**操作**，然后选择**还原**。

1. 输入新 DynamoDB 表的名称、此新表将采用的加密方式、加密还原时要使用的密钥以及任何其他选项。

1. 还原完成后，表的状态将显示为**活动**。

# 使用导出到 S3 和从 S3 导入功能来迁移表
<a name="bp-migrating-table-between-accounts-s3"></a>

**先决条件**
+ 必须为表启用时间点故障恢复（PITR）才能执行导出到 S3 的操作。有关更多信息，请参阅[在 DynamoDB 中启用时间点恢复](PointInTimeRecovery_Howitworks.md)。
+ 具有执行导出的有效 IAM 权限。有关更多信息，请参阅 [在 DynamoDB 中请求表导出](S3DataExport_Requesting.md)。
+ 具有足以执行导入的有效 IAM 权限。有关更多信息，请参阅 [在 DynamoDB 中请求表导入](S3DataImport.Requesting.md)。

**定价信息**

AWS 对 PITR（基于表大小和启用 PITR 的时长）收费。如果您除了导出之外不需要 PITR 功能，则可以在导出结束后将其关闭。AWS 还会对向 S3 发出请求、将导出的数据存储在 S3 中以及导入（基于导入数据的未压缩大小）收费。

有关 DynamoDB 定价的更多信息，请参阅 [DynamoDB 定价](https://aws.amazon.com/dynamodb/pricing/)。

**注意**  
 从 S3 导入 DynamoDB 时，对对象的大小和数量有一些限制。有关更多信息，请参阅 [导入配额](S3DataImport.Validation.md#S3DataImport.Validation.limits)。

## 请求将表导出到 Amazon S3
<a name="bp-migrating-table-between-accounts-s3-table-export"></a>

1. 登录 AWS 管理控制台，打开 DynamoDB 控制台。

1. 在控制台左侧的导航窗格中，选择**导出到 S3**。

1. 选择源表和目标 S3 存储桶。使用 `s3://bucketname/prefix` 格式输入目标账户存储桶的 URL。`/prefix` 是一个可选文件夹，有助于您的目标存储桶保持井然有序。

1. 选择**完整导出**。完整导出会按照您指定的时间点输出表的完整表快照。

   1. 选择**当前时间**以导出最新的完整表快照。

   1. 对于**导出的文件格式**，请在 DynamoDB JSON 和 Amazon Ion 之间进行选择。默认选项是 DynamoDB JSON。

1. 单击**导出**按钮开始导出。

1. 小型表导出应在几分钟内完成，但 TB 级别的表可能需要一个多小时。

## 请求从 Amazon S3 导入表
<a name="bp-migrating-table-between-accounts-s3-table-import"></a>

1. 登录 AWS 管理控制台，打开 DynamoDB 控制台。

1. 在控制台左侧的导航窗格中，选择 **Import from S3**（从 S3 导入）。

1. 在显示的页面上选择 **Import from S3**（从 S3 导入）。

1. 输入 Amazon S3 源 URL。也可以使用**浏览 S3** 按钮查找该 URL。预期的路径采用格式 `s3://bucket/prefix/AWSDynamoDB/<XXXXXXXX-XXXXXX>/data/`。

1. 指定您是否为 S3 存储桶拥有者。

1. 在**导入文件压缩**下，选择 **GZIP** 以匹配导出。

1. 在**导入文件格式**下，选择 **DynamoDB JSON** 以匹配导出。

1. 选择**下一步**。对于**指定表详细信息**，为将创建用于存储数据的新表选择相应选项。

1. 选择**下一步**。对于**配置表设置**，请自定义任何其它表设置（如果适用）。

1. 选择**下一步**再次查看导入选项，然后单击**导入**开始导入任务。您会在**从 S3 导入**下看到列出了新表，其状态为**正在导入**。此时无法访问您的表。小规模导入应在几分钟内完成，但 TB 级别的表可能需要一个多小时。

1. 导入完成后，状态显示为**活动**，您可以开始使用该表。

## 在迁移期间保持表同步
<a name="bp-migrating-table-between-accounts-s3-table-sync"></a>

如果可以在迁移期间暂停对源表的写入操作，那么在迁移后源表和输出应该完全匹配。如果无法暂停写入操作，则迁移后目标表通常会稍微落后于源表。要追踪源表，可以使用流媒体（DynamoDB Streams 或 Kinesis Data Streams for DynamoDB）来重播自备份或导出以来源表中发生的写入操作。

在将源表导出到 S3 时，您应该在时间戳之前开始读取流记录。例如，如果向 S3 的导出活动发生在下午 2:00，向目标表的导入活动在晚上 11:00 结束，则应在下午 1:58 启动 DynamoDB 流读取活动。用于更改数据捕获表的流式处理选项总结了每种流式处理模式的功能。

将 DynamoDB Streams 与 Lambda 结合使用提供了一种在源表和目标 DynamoDB 表之间同步数据的简化方法。可以使用 Lambda 函数重播目标表中的每一次写入操作。

**注意**  
项目会在 DynamoDB Streams 中保存 24 小时，因此您应该计划在该时段内完成备份和还原或导出和导入。