克隆 Aurora 数据库集群卷 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

克隆 Aurora 数据库集群卷

使用 Aurora 克隆功能,您可以快速且经济高效地创建一个新集群,该集群使用相同的 Aurora 集群卷并具有与原始集群卷相同的数据。我们将新集群及其关联的数据卷称为克隆。与使用其他技术(如还原快照)实际复制数据相比,创建克隆速度更快且空间利用效率更高。

Aurora 支持多种不同类型的克隆。您可以从预置的 Aurora 数据库集群创建 Aurora 预置的克隆。您可以从 Aurora Serverless v1 数据库集群创建 Aurora Serverless v1 克隆。但您也可以从 Aurora 预置的数据库集群创建 Aurora Serverless v1 克隆,且您可以从 Aurora Serverless v1 数据库集群创建预置克隆。使用与源不同的部署配置创建克隆时,源的 Aurora 数据库引擎的最新次要版本将被用于创建克隆。

克隆的Aurora Serverless 数据库集群与其他 Aurora Serverless v1 数据库集群具有相同的行为和限制。有关更多信息,请参阅“使用 Amazon Aurora Serverless v1”。

当您从 Aurora 数据库集群创建克隆时,将在您的Amazon账户中创建克隆,该账户即是拥有源 Aurora 数据库集群的账户。但是,您也可以与其他 Amazon 账户共享预置的 Aurora 数据库集群和克隆。有关更多信息,请参阅使用 Amazon RAM 与 Amazon Aurora 进行跨账户克隆

跨账户克隆目前不支持克隆 Aurora Serverless v1 数据库集群。有关更多信息,请参阅“跨账户克隆的限制”。

Aurora 克隆概述

Aurora 使用写入时复制协议创建克隆。此机制占用最少的额外空间来创建初始克隆。首次创建克隆时,Aurora 会保留源 Aurora 数据库集群和新(克隆的)Aurora 数据库集群使用的数据的单个副本。只有当源 Aurora 数据库集群或 Aurora 数据库集群克隆对数据(在 Aurora 存储卷上)进行更改时,才会分配额外的存储空间。如需了解有关写入时复制协议的更多信息,请参阅 Aurora 克隆的工作原理

Aurora 克隆非常适合使用您的生产数据快速设置测试环境,且不会有损坏数据的风险。您可以将克隆用于多种类型的应用程序,例如:

  • 对潜在的变化(例如模式变化和参数组变化)进行试验,以评估所有影响。

  • 执行工作负载密集型操作,例如导出数据或在克隆上运行分析查询。

  • 为开发、测试或其他用途创建生产数据库集群的副本。

您可以从同一个 Aurora 数据库集群创建多个克隆。您还可以从另一个克隆创建多个克隆。

创建 Aurora 克隆后,您可以以不同于源 Aurora 数据库集群的方式配置 Aurora 数据库实例。例如,您可能不需要用于开发目的的克隆来满足与源生产 Aurora 数据库集群相同的高可用性要求。在这种情况下,您可以使用单个 Aurora 数据库实例来配置克隆,而不是使用 Aurora 数据库集群使用的多个数据库实例。

当克隆完成测试、开发等使用目的时,您可以将其删除。

Aurora 克隆的限制

Aurora 克隆具有以下限制:

  • 您不能在与源 Aurora 数据库集群不同的Amazon区域中创建克隆。

  • 您无法从未加密的预置 Aurora 数据库集群创建 Aurora Serverless v1 克隆。

  • 您无法从 MySQL 5.6 兼容的预置集群或 MySQL 5.6 兼容 Aurora Serverless v1 集群的预置克隆创建 Aurora Serverless v1 克隆。

  • 基于一个副本或另一个克隆创建的克隆数不能超过 15 个。创建 15 个克隆后,您只能创建副本。但是,您最多可以为每个副本创建 15 个克隆。

  • 不支持并行查询功能的 Aurora 数据库集群无法创建克隆到使用并行查询的集群。要将数据传输到使用并行查询的集群,请创建原始集群的快照,并将其还原到使用并行查询功能的集群。

  • 您无法从没有数据库实例的 Aurora 数据库集群创建克隆。您只能克隆具有至少一个数据库实例的 Aurora 数据库集群。

  • 您可以在与 Aurora 数据库集群不同的 Virtual Private Cloud (VPC) 中创建克隆。不过,这些 VPC 的子网必须映射到相同的可用区。

Aurora 克隆的工作原理

Aurora 克隆运行于 Aurora 数据库集群的存储层。它使用写入时复制协议,该协议在支持 Aurora 存储卷的底层持久介质方面既快速又节省空间。有关 Aurora 集群卷的更多信息,请参阅 Aurora 存储概述

了解写入时复制协议

Aurora 数据库集群将数据存储在底层 Aurora 存储卷中的页面中。

例如,在下图中,您可以找到拥有四个数据页(1、2、3 和 4)的 Aurora 数据库集群(A)。假设从 Aurora 数据库集群创建了一个克隆 B。创建克隆时,未复制任何数据。相反,克隆指向与源 Aurora 数据库集群相同的页面集。


                    Amazon Aurora 集群卷包含 4 个页面,适用于源集群 A 和克隆 B

创建克隆时,通常不需要额外的存储空间。写入时复制协议在物理存储介质上使用与源段相同的数据段。只有当源段的容量不足以容纳整个克隆段时,才需要额外的存储空间。如果是这种情况,源段将被复制到另一个物理设备。

在下图中,您可以找到使用相同集群 A 及其克隆 B 的写入操作时复制协议的示例,如前所示。如果您对 Aurora 数据库集群(A)进行更改,那么第 1 页上保存的数据也将随之而发生改变。Aurora 没有写入原始页面 1,而是创建了一个新页面 1[A]。集群(A)的 Aurora 数据库集群卷现在指向页面 1[A]、2、3 和 4,而克隆(B)仍引用原始页面。


              Amazon Aurora 源数据库集群卷及其克隆,均已更改。

在克隆上,对存储卷的第 4 页进行了更改。Aurora 没有写入原始页面 4,而是创建了一个新页面 4[B]。克隆现在指向页面 1、2、3 和页面 4[B],而集群(A)继续指向 1[A]、2、3 和 4。


        Amazon Aurora 源数据库集群卷及其克隆,均已更改。

随着时间推移,当源 Aurora 集群卷和克隆上出现了更多更改时,因此需要更多存储空间来捕获和存储更改。

删除源集群卷

删除与一个或多个克隆关联的源集群卷时,克隆不会受到影响。克隆继续指向以前由源集群卷拥有的页面。

创建 Amazon Aurora 克隆

您可以在与源 Aurora 数据库集群相同的Amazon账户中创建克隆。为此,您可以使用 Amazon Web Services Management Console 或 Amazon CLI 并按照以下步骤进行操作。

若要允许其他 Amazon 帐户创建克隆或与其他 Amazon 帐户共享克隆,请遵照 使用 Amazon RAM 与 Amazon Aurora 进行跨账户克隆 中的步骤。

通过使用 Aurora 克隆,您可以执行以下类型的克隆操作:

  • 从预置的 Aurora 数据库集群创建预置的 Aurora 数据库集群克隆。

  • 从 Aurora Serverless v1 数据库集群创建 Aurora Serverless v1 集群克隆。

  • 从预置的 Aurora 数据库集群创建 Aurora Serverless v1 数据库集群克隆。

  • 从 Aurora Serverless v1 数据库集群创建 Aurora 预置数据库集群克隆。

Aurora Serverless v1 数据库集群始终加密。当您将 Aurora Serverless v1 数据库集群克隆到预置的 Aurora 数据库集群时,配置的 Aurora 数据库集群将被加密。您可以选择加密密钥,但不能禁用加密。从预置的 Aurora 数据库集群克隆到 Aurora Serverless v1 cluster, you need 加密的预置 Aurora 数据库集群。

以下过程介绍了如何使用 Amazon Web Services Management Console 克隆 Aurora 数据库集群。

在含有一个 Aurora 数据库实例的 Aurora 数据库集群中使用 Amazon Web Services Management Console 结果创建克隆。

这些说明适用于创建克隆的同一 Amazon 账户所拥有的数据库集群。如果数据库集群由其他 Amazon 账户拥有,请改为参阅 使用 Amazon RAM 与 Amazon Aurora 进行跨账户克隆

使用 Amazon 创建 Amazon Web Services Management Console 账户拥有的数据库集群的克隆

  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 从列表中选择您的 Aurora 数据库集群,从 Actions (操作) 中选择 Create clone (创建克隆)

    
                  创建克隆首先需要选择 Aurora 数据库集群。

    进入 Create clone (创建克隆) 页面后,您可以配置 Aurora 数据库集群克隆的 Instance specifications (实例规格)Connectivity (连接) 和其他选项。

  4. Instance specifications (实例规格) 部分中,请执行以下操作:

    1. DB cluster identifier (数据库集群标识符),请输入您要为克隆的 Aurora 数据库集群拟定的名称。

      
                  创建克隆首先需要选择 Aurora 数据库集群。
    2. Capacity type (容量类型) 中,根据您的使用案例需要选择 Provisioned (预置) 或者 Serverless (无服务器)

      仅当源 Aurora 数据库集群是 Aurora Serverless v1 数据库集群或者是加密的预置 Aurora 数据库集群时,您才可以选择 Serverless (无服务器)

      • 如果选择 Provisioned (预置),您会看到 DB instance size (数据库实例大小) 配置卡。

        
                          要从 Aurora 数据库集群创建预置克隆,请指定数据库实例大小。

        您可以使用所提供的设置,也可以为克隆使用不同的数据库实例类。

      • 如果您选择 Serverless (无服务器),您会看到 Capacity settings (容量设置) 配置卡。

        
                      要从 Aurora 数据库集群创建 Serverless 克隆,请指定容量。

        您可以使用提供的设置,也可以根据您的使用案例进行更改。

    3. 对于 Additional configuration (其他配置),选择您通常为 Aurora 数据库集群所做的设置。

      其他设置包括对数据库名称的选择以及是否要使用许多可选功能。这些功能包括备份、增强监控、将日志导出到 Amazon CloudWatch、删除保护等。

      显示哪些选项取决于您正在创建的克隆类型。例如,Aurora Serverless 不支持 Amazon RDS 性能详情,因此在此用例中不显示该选项。

      加密是 Additional configuration (其他配置) 中可用的标准选项。Aurora Serverless数据库集群始终加密。您只能从 Aurora 无服务器数据库集群或加密的预置 Aurora 数据库集群创建 Aurora Serverless 克隆。但是,您可以为 Aurora Serverless 克隆选择不同于加密预置集群所使用的密钥。

      
                      只有加密的预置 Aurora 数据库集群才能用于创建 Aurora Serverless 克隆。

      从 Aurora Serverless 数据库集群创建 Aurora Serverless 克隆时,您可以为克隆选择不同的密钥。

      
                      您可以为克隆使用与源 Aurora Serverless 数据库集群不同的加密密钥。
    4. 完成 Aurora 数据库集群克隆的所有设置。要了解有关 Aurora 数据库集群和实例设置的更多信息,请参阅 创建 Amazon Aurora 数据库集群

  5. 选择 Create clone (创建克隆) 以启动所选 Aurora 数据库集群的 Aurora 克隆。

克隆创建完成后,它将会与您的其他 Aurora 数据库集群一起列在控制台 Databases (数据库) 部分,而且其当前状态也会一起显示。当其状态为可用时,您的克隆即可以使用。

使用 Amazon CLI 克隆您的 Aurora 数据库集群需要执行几个步骤。

您使用的 restore-db-cluster-to-point-in-time Amazon CLI 命令会生成一个具有 0 个 Aurora 数据库实例的空 Aurora 数据库集群。也就是说,此命令仅还原 Aurora 数据库集群,而不还原该集群的数据库实例。在克隆可用之后,您可以单独执行此操作。该过程的两个步骤如下:

  1. 使用 restore-db-cluster-to-point-in-time CLI 命令创建克隆。与此命令一起使用的参数控制正在创建的空 Aurora 数据库集群(克隆)的容量类型和其他详细信息。

  2. 使用 create-db-instance CLI 命令为克隆创建 Aurora 数据库实例,进而在还原的 Aurora 数据库集群中重新创建 Aurora 数据库实例。

以下命令假定 Amazon CLI 和您的Amazon区域被设置为默认值。这种方法使您无需在每个命令中传递 --region 名称。有关更多信息,请参阅配置 Amazon CLI。您还可以在后面的每个 CLI 命令中指定 --region

创建克隆

您传递给 restore-db-cluster-to-point-in-time CLI 命令的特定参数会有所不同。您传递的内容取决于源数据库集群的引擎模式类型(Serverless 或预置)以及您要创建的克隆类型。

使用以下过程从 Aurora Serverless 数据库集群创建Aurora Serverless 克隆,或从预置 Aurora 数据库集群创建预置 Aurora 克隆。

创建与源 Aurora 数据库集群引擎模式相同的克隆

  • 使用 restore-db-cluster-to-point-in-time CLI 命令并指定以下参数的值:

    • --db-cluster-identifier – 为克隆选择一个有意义的名称。使用 restore-db-cluster-to-point-in-time CLI 命令命名克隆。然后在 create-db-instance CLI 命令中传递克隆的名称。

    • --restore-type – 使用 copy-on-write 创建源数据库集群的克隆。如果没有此参数,restore-db-cluster-to-point-in-time 将还原 Aurora 数据库集群,而不会创建克隆。

    • --source-db-cluster-identifier – 使用要克隆的源 Aurora 数据库集群的名称。

    • --use-latest-restorable-time – 此值指向克隆的最新可还原卷数据。

以下示例从名为 my-source-cluster 的集群创建一个名为 my-clone 的克隆。

对于 Linux、macOS 或 Unix:

aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier my-source-cluster \ --db-cluster-identifier my-clone \ --restore-type copy-on-write \ --use-latest-restorable-time

对于 Windows:

aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifier my-source-cluster ^ --db-cluster-identifier my-clone ^ --restore-type copy-on-write ^ --use-latest-restorable-time

该命令返回包含克隆详细信息的 JSON 对象。在尝试为您的克隆创建数据库实例之前,请检查以确保您的克隆数据库集群可用。有关更多信息,请参阅“检查状态并获取克隆的详细信息”。

使用与源 Aurora 数据库集群不同的引擎模式创建克隆

  • 使用 restore-db-cluster-to-point-in-time CLI 命令并指定以下参数的值:

    • --db-cluster-identifier – 为克隆选择一个有意义的名称。使用 restore-db-cluster-to-point-in-time CLI 命令命名克隆。然后在 create-db-instance CLI 命令中传递克隆的名称。

    • --engine-mode – 此参数仅用于创建与源 Aurora 数据库集群类型不同的克隆。选择与 --engine-mode 一起传递的值,如下所示:

      • 使用 provisioned 从 Aurora Serverless 数据库集群创建预置 Aurora 数据库集群克隆。

      • 使用 serverless 从预置 Aurora 数据库集群创建 Aurora Serverless 数据库集群克隆。当您指定 serverless 引擎模式时,您也可以选择 --scaling-configuration

    • --restore-type – 使用 copy-on-write 创建源数据库集群的克隆。如果没有此参数,restore-db-cluster-to-point-in-time 将还原 Aurora 数据库集群,而不会创建克隆。

    • --scaling-configuration –(可选)仅与 --engine-mode serverless 一起使用以配置克隆的最小和最大容量。如果您不使用此参数,Aurora 将使用最小容量 1 创建克隆。它使用与源配置的 Aurora 数据库集群容量相匹配的最大容量。

    • --source-db-cluster-identifier – 使用要克隆的源 Aurora 数据库集群的名称。

    • --use-latest-restorable-time – 此值指向克隆的最新可还原卷数据。

以下示例从名为 my-source-cluster 的预置 Aurora 数据库集群创建 Aurora Serverless 克隆 (my-clone)。预置 Aurora 数据库集群已加密。

对于 Linux、macOS 或 Unix:

aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier my-source-cluster \ --db-cluster-identifier my-clone \ --engine-mode serverless \ --scaling-configuration MinCapacity=8, MaxCapacity=64 \ --restore-type copy-on-write \ --use-latest-restorable-time

对于 Windows:

aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifier my-source-cluster ^ --db-cluster-identifier my-clone ^ --engine-mode serverless ^ --scaling-configuration MinCapacity=8, MaxCapacity=64 ^ --restore-type copy-on-write ^ --use-latest-restorable-time

这些命令返回包含创建数据库实例所需的克隆的详细信息的 JSON 对象。在克隆(空的 Aurora 数据库集群)的状态变为可用之前,您不能这样做。

注意

restore-db-cluster-to-point-in-time Amazon CLI 命令仅还原数据库集群,而不还原该数据库集群的数据库实例。您必须调用 create-db-instance 命令为还原的数据库集群创建数据库实例,并在 --db-cluster-identifier 中指定还原的数据库集群的标识符。只有在完成 restore-db-cluster-to-point-in-time 命令并且数据库集群可用后,您才能创建数据库实例。

例如,假设您有一个名为 tpch100g 的集群需要克隆。下面的 Linux 示例创建了一个名为 tpch100g-clone 的克隆集群并为每个新集群创建名为 tpch100g-clone-instance 的主实例。有些参数并不需要提供,例如 --master-username reinvent--master-user-password。Aurora 会自动从原始集群中确定那些参数。您需要指定的是要使用的数据库引擎。因此,该示例测试新集群以确定要用于 --engine 参数的正确值。

$ aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier tpch100g \ --db-cluster-identifier tpch100g-clone \ --restore-type copy-on-write \ --use-latest-restorable-time $ aws rds describe-db-clusters \ --db-cluster-identifier tpch100g-clone \ --query '*[].[Engine]' \ --output text aurora $ aws rds create-db-instance \ --db-instance-identifier tpch100g-clone-instance \ --db-cluster-identifier tpch100g-clone \ --db-instance-class db.r5.4xlarge \ --engine aurora

检查状态并获取克隆的详细信息

您可以使用以下命令检查新创建的空数据库集群的状态。

$ aws rds describe-db-clusters --db-cluster-identifier my-clone --query '*[].[Status]' --output text

或者,您可以使用下面的 Amazon CLI 查询获取为您的克隆创建数据库实例所需的状态和其他值。

对于 Linux、macOS 或 Unix:

aws rds describe-db-clusters --db-cluster-identifier my-clone \ --query '*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion,EngineMode:EngineMode}'

对于 Windows:

aws rds describe-db-clusters --db-cluster-identifier my-clone ^ --query "*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion,EngineMode:EngineMode}"

此查询返回类似于下述信息的输出:

[ { "Status": "available", "Engine": "aurora-mysql", "EngineVersion": "5.7.mysql_aurora.2.09.1", "EngineMode": "provisioned" } ]

为克隆创建 Aurora 数据库实例

使用 create-db-instance CLI 命令为您的克隆创建数据库实例。

--db-instance-class 参数仅用于预置的 Aurora 数据库集群。

对于 Linux、macOS 或 Unix:

aws rds create-db-instance \ --db-instance-identifier my-new-db \ --db-cluster-identifier my-clone \ --db-instance-class db.r5.4xlarge \ --engine aurora-mysql

对于 Windows:

aws rds create-db-instance ^ --db-instance-identifier my-new-db ^ --db-cluster-identifier my-clone ^ --db-instance-class db.r5.4xlarge ^ --engine aurora-mysql

对于从 Aurora Serverless 数据库集群创建的 Aurora Serverless 克隆,您只需指定几个参数。数据库实例从源数据库集群继承 --engine-mode--master-username--master-user-password 属性。您可以更改 --scaling-configuration

对于 Linux、macOS 或 Unix:

aws rds create-db-instance \ --db-instance-identifier my-new-db \ --db-cluster-identifier my-clone \ --engine aurora-postgresql

对于 Windows:

aws rds create-db-instance ^ --db-instance-identifier my-new-db ^ --db-cluster-identifier my-clone ^ --engine aurora-postgresql

用于克隆的参数

下表总结了与 restore-db-cluster-to-point-in-time 一起用于克隆 Aurora 数据库集群的各种参数。

参数 描述

--source-db-cluster-identifier

使用要克隆的源 Aurora 数据库集群的名称。

--db-cluster-identifier

为克隆选择一个有意义的名称。您可以使用 restore-db-cluster-to-point-in-time 命令为您的克隆命名。然后将此名称传递给 create-db-instance 命令。

--engine-mode

此参数用于创建与源 Aurora 数据库集群类型不同的克隆。选择与 --engine-mode 一起传递的值,如下所示:

  • 使用 provisioned 从 Aurora Serverless 数据库集群创建预置 Aurora 数据库集群克隆。

  • 使用 serverless 从预置 Aurora 数据库集群创建 Aurora Serverless 数据库集群克隆。指定 serverless 引擎模式时,您也可以选择 --scaling-configuration

--restore-type

copy-on-write 指定为 --restore-type 以创建源数据库集群的克隆,而不是还原源 Aurora 数据库集群。

--scaling-configuration

将此参数与 --engine-mode serverless 一起使用可配置克隆的最小和最大容量。如果您不使用此参数,Aurora 将使用最小容量 1 和最大容量 16 创建 Aurora Serverless 克隆。

--use-latest-restorable-time

此值指向克隆的最新可还原卷数据。

使用 Amazon RAM 与 Amazon Aurora 进行跨账户克隆

通过将 Amazon Resource Access Manager(Amazon RAM)与 Amazon Aurora 结合使用,您可以与另一个Amazon账户或企业共享属于您的Amazon账户的 Aurora 数据库集群和克隆。这种跨账户克隆比创建和恢复数据库快照快很多。您可以为您的 Aurora 数据库集群创建一个克隆并共享该克隆。或者,您可以与另一个Amazon账户共享您的 Aurora 数据库集群,并让账户持有人创建克隆。方式的选择因使用案例而定。

如,您可能需要定期与组织的内部审计团队共享财务数据库的克隆。在这种情况下,您的审计团队对其使用的应用程序拥有自己的 Amazon 帐户。您可以授予审计团队的Amazon账户访问 Aurora 数据库集群,并根据需要进行克隆的权限。

另一方面,如果外部供应商审核您的财务数据,您可能更愿意自己创建克隆。然后,您只允许外部供应商访问该克隆。

您还可以使用跨账户克隆来支持在同一Amazon账户内进行克隆的许多相同用例,例如开发和测试。例如,您的企业可能会使用不同的 Amazon 帐户进行生产、开发、测试等。有关更多信息,请参阅“Aurora 克隆概述”。

因此,您可能希望与另一个Amazon账户共享一个克隆或允许其他Amazon账户创建您的 Aurora 数据库集群的克隆。无论哪种情况,请先使用 Amazon RAM 来创建共享对象。有关在 Amazon 帐户之间共享 Amazon 资源的完整信息,请参阅 Amazon RAM 用户指南

创建跨账户克隆需要来自拥有原始集群的 Amazon 账户和创建克隆的 Amazon 账户的操作。首先,原始集群拥有者修改集群以允许一个或多个其他账户克隆它。对于在不同的Amazon组织中的任何账户,Amazon会生成共享邀请。另一个帐户必须接受邀请,然后才能继续。之后,每个授权账户便能克隆集群。在整个过程中,集群由其唯一的 Amazon Resource Name (ARN) 标识。

与在同一 Amazon 帐户内进行克隆一样,只有在源或克隆对数据进行更改时才使用额外的存储空间。届时将会收取存储费用。如果删除源集群,则会在剩余的克隆集群中平均分配存储成本。

跨账户克隆的限制

Aurora 跨账户克隆具有以下限制:

  • 您无法跨 Aurora Serverless 账户克隆 Amazon 集群。

  • 您无法使用 Amazon Web Services Management Console 来查看或接受共享资源的邀请。使用 Amazon CLI、Amazon RDS API 或 Amazon RAM 控制台查看和接受共享资源的邀请。

  • 您无法从与您的 Amazon 帐户共享的克隆创建新的克隆。

  • 您无法共享已与您的Amazon账户共享的资源(克隆或 Aurora 数据库集群)。

  • 您从任何单个 Aurora 数据库集群创建的跨账户克隆不能超过 15 个。这 15 个克隆中的每一个都必须由不同的 Amazon 帐户拥有。也就是说,任何Amazon账户都只能创建一个集群的跨账户克隆。

  • 除非集群处于 ACTIVE 状态,否则您无法与其他Amazon账户共享 Aurora 数据库集群。

  • 您无法重命名与其他Amazon账户共享的 Aurora 数据库集群。

  • 您无法创建使用默认 RDS 密钥加密的集群的跨账户克隆。

  • 对于从另一个 Amazon 账户共享的加密 Aurora 数据库集群,您无法在 Amazon 账户中创建非加密克隆。集群拥有者必须授予访问源集群的 Amazon KMS key 的权限。但是,您可以在创建克隆时使用不同的密钥。

允许其他 Amazon 账户克隆您的集群

要允许其他 Amazon 账户克隆您拥有的集群,请使用 Amazon RAM 设置共享权限。这样做还会向位于其他 Amazon 组织中的所有其他账户发送邀请。

有关在 Amazon RAM 控制台中共享您拥有的资源的过程,请参阅 Amazon RAM 用户指南中的共享您拥有的资源

向其他 Amazon 账户授予克隆集群的权限

如果您共享的集群已加密,则您还可以共享集群的 Amazon KMS key。您可以允许一个 Amazon 账户中的 Amazon Identity and Access Management (IAM) 用户或角色使用其他账户中的 KMS 密钥。

为此,您首先通过 Amazon KMS 将外部账户(根用户)添加到 KMS 密钥的密钥策略中。您不能将单个 IAM 用户或角色添加到密钥策略中,只有外部账户才能拥有这些用户或角色。您只能共享您创建的 KMS 密钥,而不能共享默认 RDS 服务密钥。有关 KMS 密钥的访问控制的信息,请参阅 Amazon KMS 的身份验证和访问控制

授予克隆您的集群的权限

  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择要共享的数据库集群以查看其 Details (详细信息) 页面,并选择 Connectivity & security (连接和安全性) 选项卡。

  4. 与其他 Amazon 账户共享数据库集群 部分中,输入要允许克隆此集群的 Amazon 账户的数字账户 ID。对于同一组织中的账户 ID,您可以开始在框中键入,然后从菜单中选择。

    重要

    在某些情况下,您可能需要使用一个不在您的账户所在的 Amazon 组织中的账户来克隆集群。在这些情况下,出于安全原因,控制台不会报告谁拥有账户 ID 或该账户是否存在。

    请小心输入不在您的 Amazon 账户所在的 Amazon 组织中的账号。立即验证您是否与目标账户共享。

  5. 在确认页面上,验证您指定的账户 ID 是否正确。在确认框中输入 share 以进行确认。

    Details (详细信息) 页面上,Accounts that this DB cluster is shared with (此数据库集群与之共享的账户) 下显示一个条目,该条目显示指定的Amazon账户 ID。Status (状态) 列最初显示 Pending (待处理) 状态。

  6. 联系另一个 Amazon 账户的拥有者,或者如果您同时拥有这两个账户,则登录到该账户。指示其他账户的拥有者接受共享邀请并克隆数据库集群,如下所述。

授予克隆您的集群的权限

  1. 收集所需参数的信息。您需要集群的 ARN 和其他 Amazon 账户的数字 ID。

  2. 运行 Amazon RAM CLI 命令 create-resource-share

    对于 Linux、macOS 或 Unix:

    aws ram create-resource-share --name descriptive_name \ --region region \ --resource-arns cluster_arn \ --principals other_account_ids

    对于 Windows:

    aws ram create-resource-share --name descriptive_name ^ --region region ^ --resource-arns cluster_arn ^ --principals other_account_ids

    要包含 --principals 参数的多个账户 ID,请用空格将各个 ID 分隔开。要指定允许的账户 ID 是否能位于 Amazon 组织外部,请包含 --allow-external-principals--no-allow-external-principalscreate-resource-share 参数。

授予克隆您的集群的权限

  1. 收集所需参数的信息。您需要集群的 ARN 和其他 Amazon 账户的数字 ID。

  2. 调用 Amazon RAM API 操作 CreateResourceShare,并指定以下值:

    • 指定一个或多个Amazon账户的账户 ID 作为 principals 参数。

    • 指定一个或多个 Aurora 数据库集群的 ARN 作为 resourceArns 参数。

    • 通过包含 allowExternalPrincipals 参数的布尔值来指定允许的账户 ID 是否能位于您的 Amazon 企业外部。

重新创建使用默认 RDS 密钥的集群

如果您计划共享的加密集群使用默认 RDS 密钥,请确保重新创建集群。为此,请为数据库集群创建手动快照,使用 Amazon KMS key,然后将集群还原到新集群。然后共享新集群。要执行此过程,请按以下步骤进行操作。

重新创建使用默认 RDS 密钥的加密集群

  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Snapshots (快照)

  3. 选择您的快照。

  4. 对于 Actions (操作),选择 Copy Snapshot (复制快照),然后选择 Enable encryption (启用加密)

  5. 对于 Amazon KMS key,选择要使用的新加密密钥。

  6. 还原复制的快照。为此,请按照 中的过程操作从数据库集群快照还原 新数据库实例使用新的加密密钥。

  7. (可选)如果您不再需要旧的数据库集群,请将其删除。为此,请按照 中的过程操作删除数据库集群快照 在这样做之前,请确认您的新集群拥有所有必要的数据,并且您的应用程序能够成功地访问该数据。

检查是否与其他Amazon账户共享您拥有的集群

您可以检查其他用户是否有权共享集群。这样做可以帮助您了解集群是否正在接近跨账户克隆的最大数量限制。

有关使用 Amazon RAM 控制台共享资源的过程,请参阅 Amazon RAM 用户指南中的共享您拥有的资源

要查明您拥有的集群是否与其他Amazon账户共享

  • 调用 Amazon RAM CLI 命令 list-principals,将账户 ID 用作资源拥有者,并将集群 ARN 用作资源 ARN。可使用以下命令来查看所有共享。结果指示允许哪些 Amazon 账户克隆集群。

    aws ram list-principals \ --resource-arns your_cluster_arn \ --principals your_aws_id

要查明您拥有的集群是否与其他Amazon账户共享

  • 调用 Amazon RAM API 操作 ListPrincipals。将账户 ID 用作资源拥有者,并将集群 ARN 用作资源 ARN。

克隆另一个Amazon账户拥有的集群

要克隆另一个 Amazon 账户拥有的集群,请使用 Amazon RAM 获取创建克隆的权限。在获得必需权限后,您可以使用克隆 Aurora 集群的标准过程。

您还可以检查您拥有的集群是否为其他 Amazon 账户拥有的集群的克隆。

有关在 Amazon RAM 控制台中使用其他账户拥有的资源的过程,请参阅 Amazon RAM 用户指南中的访问与您共享的资源

查看克隆其他Amazon账户拥有的集群的邀请

要处理克隆其他 Amazon 组织中的 Amazon 账户拥有的集群的邀请,请使用 Amazon CLI、Amazon RAM 控制台或 Amazon RAM API。目前,您无法使用 Amazon RDS 控制台执行此过程。

有关在 Amazon RAM 控制台中处理邀请的过程,请参阅 Amazon RAM 用户指南中的访问与您共享的资源

查看克隆其他Amazon账户拥有的集群的邀请

  1. 运行 Amazon RAM CLI 命令 get-resource-share-invitations

    aws ram get-resource-share-invitations --region region_name

    上述命令的结果显示所有克隆集群的邀请,包括您已接受或拒绝的任何邀请。

  2. (可选)筛选列表,以便仅查看需要您执行操作的邀请。为此,请添加参数 --query 'resourceShareInvitations[?status==`PENDING`]'

查看克隆其他Amazon账户拥有的集群的邀请

  1. 调用 Amazon RAM API 操作 GetResourceShareInvitations。此操作返回所有此类邀请,包括您已接受或拒绝的任何邀请。

  2. (可选)通过在 resourceShareAssociations 返回字段中检查 statusPENDING,仅查找需要您执行操作的邀请。

接受共享其他 Amazon 账户拥有的集群的邀请

您可以接受共享其他 Amazon 组织中的其他 Amazon 账户拥有的集群的邀请。要处理这些邀请,请使用 Amazon CLI、Amazon RAM 和 RDS API 或 Amazon RAM 控制台。目前,您无法使用 RDS 控制台执行此过程。

有关在 Amazon RAM 控制台中处理邀请的过程,请参阅 Amazon RAM 用户指南中的访问与您共享的资源

接受共享其他Amazon账户的集群的邀请

  1. 通过运行 Amazon RAM CLI 命令 get-resource-share-invitations 查找邀请 ARN,如上所示。

  2. 通过调用 Amazon RAM CLI 命令 accept-resource-share-invitation 接受邀请,如下所示。

    对于 Linux、macOS 或 Unix:

    aws ram accept-resource-share-invitation \ --resource-share-invitation-arn invitation_arn \ --region region

    对于 Windows:

    aws ram accept-resource-share-invitation ^ --resource-share-invitation-arn invitation_arn ^ --region region

接受共享他人集群的邀请

  1. 通过调用 Amazon RAM API 操作 GetResourceShareInvitations 查找邀请 ARN,如上所示。

  2. 将 ARN 作为 resourceShareInvitationArn 参数传递到 RDS API 操作 AcceptResourceShareInvitation

克隆另一个Amazon账户拥有的 Aurora 集群

接受来自拥有数据库集群的 Amazon 账户的邀请后(如上所示),您可以克隆集群。

克隆另一个Amazon账户拥有的 Aurora 集群

  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

    在数据库列表的顶部,您应看到一个或多个 Role (角色) 值为 Shared from account #account_id 的项。出于安全原因,您只能看到有关原始集群的有限信息。您可以看到的属性是数据库引擎和版本等属性,这些属性在克隆的集群中必须相同。

  3. 选择您打算克隆的集群。

  4. 对于 Actions (操作),选择 Create clone (创建克隆)

  5. 按照Console中的过程进行操作以完成对克隆集群的设置。

  6. 根据需要,为克隆的集群启用加密。如果要克隆的集群已加密,则必须为克隆的集群启用加密。与您共享集群的 Amazon 账户还必须共享用于加密集群的 KMS 密钥。您可以使用相同的 KMS 密钥来加密克隆,也可以使用您自己的 KMS 密钥。无法为使用原定设置 KMS 密钥加密的集群创建跨账户克隆。

    拥有加密密钥的账户必须通过使用密钥策略来向目标账户授予密钥的使用权限。此过程类似于共享加密快照的方式,使用密钥策略来向目标账户授予密钥的使用权限。

克隆另一个Amazon账户拥有的 Aurora 集群

  1. 接受来自拥有数据库集群的 Amazon 账户的邀请,如上所示。

  2. 通过在 RDS CLI 命令 source-db-cluster-identifierrestore-db-cluster-to-point-in-time 参数中指定源集群的完整 ARN 来克隆集群,如下所示。

    如果未共享作为 source-db-cluster-identifier 传递的 ARN,则返回相同的错误,就像指定的集群不存在一样。

    对于 Linux、macOS 或 Unix:

    aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier=arn:aws:rds:arn_details \ --db-cluster-identifier=new_cluster_id \ --restore-type=copy-on-write \ --use-latest-restorable-time

    对于 Windows:

    aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifier=arn:aws:rds:arn_details ^ --db-cluster-identifier=new_cluster_id ^ --restore-type=copy-on-write ^ --use-latest-restorable-time
  3. 如果要克隆的集群已加密,请通过包含 kms-key-id 参数来加密克隆的集群。此 kms-key-id 值可以是用于加密原始数据库集群的值,也可以是您自己的 KMS 密钥。您的账户必须具有使用该加密密钥的权限。

    对于 Linux、macOS 或 Unix:

    aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier=arn:aws:rds:arn_details \ --db-cluster-identifier=new_cluster_id \ --restore-type=copy-on-write \ --use-latest-restorable-time \ --kms-key-id=arn:aws:kms:arn_details

    对于 Windows:

    aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifier=arn:aws:rds:arn_details ^ --db-cluster-identifier=new_cluster_id ^ --restore-type=copy-on-write ^ --use-latest-restorable-time ^ --kms-key-id=arn:aws:kms:arn_details

    拥有加密密钥的账户必须通过使用密钥策略来向目标账户授予密钥的使用权限。此过程类似于共享加密快照的方式,使用密钥策略来向目标账户授予密钥的使用权限。下面是密钥策略的示例。

    { "Id": "key-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} } ] }
注意

restore-db-cluster-to-point-in-time Amazon CLI 命令仅还原数据库集群,而不还原该数据库集群的数据库实例。要为恢复的数据库集群创建数据库实例,请调用 create-db-instance 命令。在 --db-cluster-identifier 中指定恢复的数据库集群的标识符。

只有在完成 restore-db-cluster-to-point-in-time 命令并且数据库集群可用后,您才能创建数据库实例。

克隆另一个Amazon账户拥有的 Aurora 集群

  1. 接受来自拥有数据库集群的 Amazon 账户的邀请,如上所示。

  2. 通过在 RDS API 操作 SourceDBClusterIdentifierRestoreDBClusterToPointInTime 参数中指定源集群的完整 ARN 来克隆集群。

    如果未共享作为 SourceDBClusterIdentifier 传递的 ARN,则返回相同的错误,就像指定的集群不存在一样。

  3. 如果要克隆的集群已加密,请包含 KmsKeyId 参数以加密克隆的集群。此 kms-key-id 值可以是用于加密原始数据库集群的值,也可以是您自己的 KMS 密钥。您的账户必须具有使用该加密密钥的权限。

    在克隆卷时,目标账户必须具有使用用于加密源集群的加密密钥的权限。Aurora 使用 KmsKeyId 中指定的加密密钥对新的克隆集群进行加密。

    拥有加密密钥的账户必须通过使用密钥策略来向目标账户授予密钥的使用权限。此过程类似于共享加密快照的方式,使用密钥策略来向目标账户授予密钥的使用权限。下面是密钥策略的示例。

    { "Id": "key-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} } ] }
注意

RestoreDBClusterToPointInTime RDS API 操作仅还原数据库集群,而不还原该数据库集群的数据库实例。要为恢复的数据库集群创建数据库实例,请调用 CreateDBInstance RDS API 操作。在 DBClusterIdentifier 中指定恢复的数据库集群的标识符。只有在完成 RestoreDBClusterToPointInTime 操作并且数据库集群可用后,您才能创建数据库实例。

检查数据库集群是否为跨账户克隆

DBClusters 对象标识每个集群是否是跨账户克隆。在运行 RDS CLI 命令 include-shared 时,可使用 describe-db-clusters 选项查看您有权克隆的集群。但是,您看不到此类集群的大部分配置详细信息。

检查数据库集群是否为跨账户克隆

  • 调用 RDS CLI 命令 describe-db-clusters

    以下示例说明实际或潜在的跨账户克隆数据库集群在 describe-db-clusters 输出中的显示方式。对于您的 Amazon 账户现在拥有的集群,CrossAccountClone 字段指示集群是否为另一个 Amazon 账户拥有的数据库集群的克隆。

    在某些情况下,条目具有的Amazon账号可能与您在DBClusterArn字段中的账号不同。在此情况下,该条目表示由其他 Amazon 账户拥有且可克隆的集群。此类条目仅具有 DBClusterArn 字段。在创建克隆的集群时,指定与原始集群中相同的 StorageEncryptedEngineEngineVersion 值。

    $ aws rds describe-db-clusters --include-shared --region us-east-1 { "DBClusters": [ { "EarliestRestorableTime": "2019-05-01T21:17:54.106Z", "Engine": "aurora", "EngineVersion": "5.6.10a", "CrossAccountClone": false, ... }, { "EarliestRestorableTime": "2019-04-09T16:01:07.398Z", "Engine": "aurora", "EngineVersion": "5.6.10a", "CrossAccountClone": true, ... }, { "StorageEncrypted": false, "DBClusterArn": "arn:aws:rds:us-east-1:12345678:cluster:cluster-abcdefgh", "Engine": "aurora", "EngineVersion": "5.6.10a", } ] }

检查数据库集群是否为跨账户克隆

  • 调用 RDS API 操作 DescribeDBClusters

    对于您的 Amazon 账户现在拥有的集群,CrossAccountClone 字段指示集群是否为另一个 Amazon 账户拥有的数据库集群的克隆。在 Amazon 字段中具有其他 DBClusterArn 账号的条目表示其他 Amazon 账户拥有且可克隆的集群。这些条目仅具有 DBClusterArn 字段。在创建克隆的集群时,指定与原始集群中相同的 StorageEncryptedEngineEngineVersion 值。

    以下示例显示一个返回值,该值说明了实际和潜在的克隆的集群。

    { "DBClusters": [ { "EarliestRestorableTime": "2019-05-01T21:17:54.106Z", "Engine": "aurora", "EngineVersion": "5.6.10a", "CrossAccountClone": false, ... }, { "EarliestRestorableTime": "2019-04-09T16:01:07.398Z", "Engine": "aurora", "EngineVersion": "5.6.10a", "CrossAccountClone": true, ... }, { "StorageEncrypted": false, "DBClusterArn": "arn:aws:rds:us-east-1:12345678:cluster:cluster-abcdefgh", "Engine": "aurora", "EngineVersion": "5.6.10a" } ] }