

# 将 RDS for PostgreSQL 数据库的快照迁移到 Aurora PostgreSQL 数据库集群
<a name="AuroraPostgreSQL.Migrating.RDSPostgreSQL.Import.Console"></a>

要创建 Aurora PostgreSQL 数据库集群，您可以迁移 RDS for PostgreSQL 数据库实例的数据库快照。将使用原始 RDS for PostgreSQL 数据库实例中的数据填充新的 Aurora PostgreSQL 数据库集群。有关创建数据库快照的信息，请参阅[创建数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)。

在某些情况下，数据库快照可能不在要查找数据的 AWS 区域 中。如果是这样的话，请使用 Amazon RDS 控制台将数据库快照复制到该 AWS 区域。有关复制数据库快照的信息，请参阅[复制数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)。

您可以迁移与给定 AWS 区域 中可用 Aurora PostgreSQL 版本兼容的 RDS for PostgreSQL 快照。例如，您可以将 RDS for PostgreSQL 11.1 数据库实例中的快照迁移到美国西部（加利福尼亚北部）区域中的 Aurora PostgreSQL 版本 11.4、11.7、11.8 或 11.9。您可以将 RDS for PostgreSQL 10.11 快照迁移到 Aurora PostgreSQL 10.11、10.12、10.13 和 10.14。换言之，RDS for PostgreSQL 快照必须使用与 Aurora PostgreSQL 相同的版本或较低的次要版本。

您还可以选择使用 AWS KMS key 静态加密新的 Aurora PostgreSQL 数据库集群。该选项仅适用于未加密的数据库快照。

要将 RDS for PostgreSQL 数据库快照迁移到 Aurora PostgreSQL 数据库集群，您可以使用 AWS 管理控制台、AWS CLI 或 RDS API。使用 AWS 管理控制台 时，控制台将执行必要的操作创建数据库集群和主实例。

## 控制台
<a name="AuroraPostgreSQL.Migrating.RDSPostgreSQL.Import.Console.console"></a>

**使用 RDS 控制台迁移 PostgreSQL 数据库快照**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 选择 **Snapshots**。

1. 在 **Snapshots (快照) **页面上，选择要迁移到 Aurora PostgreSQL 数据库集群的 RDS for PostgreSQL 快照。

1. 选择 **Actions**（操作），然后选择 **Migrate snapshot**（迁移快照）。

1. 在 **Migrate Database**（迁移数据库）页面上设置以下值：
   + **DB engine version**（数据库引擎版本）：选择要用于新迁移实例的数据库引擎版本。
   + **DB instance identifier**（数据库实例标识符）：为数据库集群输入一个名称，该名称在您选择的 AWS 区域 中对于您的账户是唯一的。此标识符将在数据库集群中实例的终端节点地址中使用。您可以选择对该名称进行一些巧妙处理，例如，包括选定的 AWS 区域 和数据库引擎（例如 **aurora-cluster1**）。

     数据库实例标识符具有以下限制：
     + 它必须包含 1–63 个字母数字字符或连字符。
     + 它的第一个字符必须是字母。
     + 它不能以连字符结尾，也不能包含两个连续连字符。
     + 它对于每个 AWS 区域 的每个 AWS 账户的所有数据库实例必须是唯一的。
   + **DB instance class (数据库实例类)**：选择具有数据库所需的存储和容量的数据库实例类，例如 `db.r6g.large`。Aurora 集群卷随着数据库中数据量的增加自动增大。因此，您只需选择满足当前存储要求的数据库实例类。有关更多信息，请参阅 [Amazon Aurora 存储概述](Aurora.Overview.StorageReliability.md#Aurora.Overview.Storage)。
   + **Virtual Private Cloud (VPC)**：如果已具有 VPC，您可以选择 VPC 标识符（如 `vpc-a464d1c1`）以将该 VPC 用于 Aurora PostgreSQL 数据库集群。有关如何创建 VPC 的信息，请参阅[教程：创建 VPC 以用于数据库集群（仅限 IPv4）](CHAP_Tutorials.WebServerDB.CreateVPC.md)。

     否则，可以通过选择 **Create a new VPC**（新建 VPC），让 Amazon RDS 为您创建 VPC。
   + **DB subnet group**（数据库子网组）：如果已具有子网组，则可通过选择您的子网组标识符（例如 `gs-subnet-group1`）来将该子网组用于 Aurora PostgreSQL 数据库集群。
   + **Public access**（公开访问）：选择 **No**（否）可指定数据库集群中的实例只能由 VPC 内的资源访问。选择 **Yes (是)** 可指定数据库集群中的实例可以由公用网络上的资源访问。
**注意**  
您的生产数据库集群可能不需要位于公有子网中，因为仅应用程序服务器将需要访问数据库集群。如果数据库集群不需要位于公有子网中，请将 **Public access**（公开访问）设置为 **No**（否）。
   + **VPC security group**（VPC 安全组）：选择 VPC 安全组以允许访问数据库。
   + **Availability Zone (可用区)**：选择为 Aurora PostgreSQL 数据库集群托管主实例的可用区。要让 Amazon RDS 为您选择可用区，请选择 **No Preference**（无首选项）。
   + **Database port**（数据库端口）：输入在连接到 Aurora PostgreSQL 数据库集群中的实例时使用的默认端口。默认为 `5432`。
**注意**  
您可能位于企业防火墙后面，该防火墙不允许访问默认端口 (例如，PostgreSQL 默认端口 5432)。在此情况下，请提供企业防火墙允许的端口值。请记住此端口值，以便在稍后连接到 Aurora PostgreSQL 数据库集群时使用。
   + **Enable Encryption**（启用加密）：为要静态加密的新 Aurora PostgreSQL 数据库集群选择 **Enable Encryption**（启用加密）。另外，选择 KMS 密钥作为 **AWS KMS key** 值。
   + **Auto minor version upgrade (自动次要版本升级)**：选择 **Enable auto minor version upgrade (启用自动次要版本升级)** 可让您的 Aurora PostgreSQL 数据库集群在次要 PostgreSQL 数据库引擎版本升级可用时自动接收这些升级。

     **Auto Minor Version Upgrade**（自动次要版本升级）选项仅适用于升级到 Aurora PostgreSQL 数据库集群的 PostgreSQL 次要引擎版本。它不适用于应用于维持系统稳定性的常规修补程序。

1. 选择 **Migrate** 以迁移您的数据库快照。

1. 选择 **Databases**（数据库）以查看新的数据库集群。选择新的数据库集群以监控迁移进度。迁移完成后，集群的状态为 **Available**（可用）。在 **Connectivity & security**（连接和安全性）选项卡上，您可以找到用于连接数据库集群主写入器实例的集群终端节点。有关连接到 Aurora PostgreSQL 数据库集群的更多信息，请参阅[连接到 Amazon Aurora 数据库集群](Aurora.Connecting.md)。

## AWS CLI
<a name="AuroraPostgreSQL.Migrating.RDSPostgreSQL.Import.Console.CLI"></a>

使用 AWS CLI 将 RDS for PostgreSQL 数据库快照迁移到 Aurora PostgreSQL 涉及两个单独的 AWS CLI 命令。首先，请使用 `restore-db-cluster-from-snapshot` AWS CLI 命令创建新的 Aurora PostgreSQL 数据库集群。然后，使用 `create-db-instance` 命令在新集群中创建主数据库实例来完成迁移。以下过程创建 Aurora PostgreSQL 数据库集群，其主数据库实例配置与用于创建快照的数据库实例配置相同。

**将 RDS for PostgreSQL 数据库快照迁移到 Aurora PostgreSQL 数据库集群**

1. 使用 [describe-db-snapshots](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-snapshots.html) 命令来获取要迁移的数据库快照的信息。您可以在命令中指定 `--db-instance-identifier` 参数或 `--db-snapshot-identifier`。如果未指定参数，则将获得所有快照。

   ```
   aws rds describe-db-snapshots --db-instance-identifier <your-db-instance-name>
   ```

1. 该命令返回从指定数据库实例创建的快照的所有配置详细信息。在输出中，找到要迁移的快照及其 Amazon Resource Name (ARN)。要了解有关 Amazon RDS ARN 的更多信息，请参阅 [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-rds)。ARN 看上去类似于以下输出。

   ```
   “DBSnapshotArn": "arn:aws:rds:aws-region:111122223333:snapshot:<snapshot_name>"
   ```

   此外，您还可以在输出中找到 RDS for PostgreSQL 数据库实例的配置详细信息，例如引擎版本、分配的存储空间、数据库实例是否加密，等等。

1. 使用 [restore-db-cluster-from-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-from-snapshot.html) 命令启动迁移。指定以下参数：
   + `--db-cluster-identifier`：要为 Aurora PostgreSQL 数据库集群指定的名称。此 Aurora 数据库集群是数据库快照迁移的目标。
   + `--snapshot-identifier`：待迁移数据库快照的 Amazon Resource Name (ARN)。
   + `--engine`：为 Aurora 数据库集群引擎指定 `aurora-postgresql`。
   + `--kms-key-id`：此可选参数允许您从未加密的数据库快照创建加密的 Aurora PostgreSQL 数据库集群。此参数还允许您为数据库集群选择与数据库快照所用密钥不同的加密密钥。
**注意**  
您无法从加密的数据库快照创建未加密的 Aurora PostgreSQL 数据库集群。

   如果没有如下所示指定的 `--kms-key-id` 参数，[restore-db-cluster-from-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-from-snapshot.html) AWS CLI 命令将创建一个空的 Aurora PostgreSQL 数据库集群，该集群将使用与数据库快照相同的密钥加密，如果源数据库快照未加密，则该集群将不会加密。

   对于 Linux、macOS 或 Unix：

   ```
   aws rds restore-db-cluster-from-snapshot \
       --db-cluster-identifier cluster-name \
       --snapshot-identifier arn:aws:rds:aws-region:111122223333:snapshot:your-snapshot-name \
       --engine aurora-postgresql
   ```

   对于：Windows

   ```
   aws rds restore-db-cluster-from-snapshot ^
       --db-cluster-identifier new_cluster ^
       --snapshot-identifier arn:aws:rds:aws-region:111122223333:snapshot:your-snapshot-name ^
       --engine aurora-postgresql
   ```

1. 该命令将返回为迁移创建的 Aurora PostgreSQL 数据库集群的详细信息。您可以使用 [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clussters.html) AWS CLI 命令查看 Aurora PostgreSQL 数据库集群的状态。

   ```
   aws rds describe-db-clusters --db-cluster-identifier cluster-name
   ```

1. 当数据库集群变为“可用”时，您可以使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 命令，使用基于 Amazon RDS 数据库快照的数据库实例填充 Aurora PostgreSQL 数据库集群。指定以下参数：
   + `--db-cluster-identifier`：在前述步骤中创建的新 Aurora PostgreSQL 数据库集群的名称。
   + `--db-instance-identifier`：要为该数据库实例指定的名称。此实例将成为 Aurora PostgreSQL 数据库集群中的主节点。
   + `----db-instance-class `：指定要使用的数据库实例类。从要迁移到的 Aurora PostgreSQL 版本支持的数据库实例类中进行选择。有关更多信息，请参阅 [数据库实例类类型](Concepts.DBInstanceClass.Types.md) 和 [数据库实例类支持的数据库引擎](Concepts.DBInstanceClass.SupportAurora.md)。
   + `--engine`：为数据库实例指定 `aurora-postgresql`。

   您还可以使用与源数据库快照不同的配置来创建数据库实例，方法是在 `create-db-instance` AWS CLI 命令中传入适当选项。有关更多信息，请参阅 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 命令。

   对于 Linux、macOS 或 Unix：

   ```
   aws rds create-db-instance \
       --db-cluster-identifier cluster-name \
       --db-instance-identifier --db-instance-class db.instance.class \
       --engine aurora-postgresql
   ```

   对于：Windows

   ```
   aws rds create-db-instance ^
       --db-cluster-identifier cluster-name ^
       --db-instance-identifier --db-instance-class db.instance.class ^
       --engine aurora-postgresql
   ```

迁移过程完成后，Aurora PostgreSQL 集群拥有已填充的主数据库实例。