AWS Aurora:如何通过AWS CLI还原数据库集群快照?

Ben*_*aux 6 amazon-web-services aws-rds

通过控制台非常简单,但是我需要在CLI中执行相同的操作。

首先,我创建了一个数据库快照:

aws rds create-db-cluster-snapshot \
    --db-cluster-snapshot-identifier $SNAPSHOT_ID \
    --db-cluster-identifier $CLUSTER \
Run Code Online (Sandbox Code Playgroud)

CLUSTER仅包含一个writer实例

我没有使用create-db-snapshot方法,因为它引发了错误

调用CreateDBSnapshot操作时发生客户端错误(InvalidParameterValue):指定的实例是群集的成员,并且无法直接创建快照。请改用CreateDBClusterSnapshot API。

有用:

aws rds create-db-cluster-snapshot \
  --db-cluster-snapshot-identifier $SNAPSHOT_ID \
  --db-cluster-identifier $CLUSTER \
{
    "DBClusterSnapshot": {
        "Engine": "aurora", 
        "SnapshotCreateTime": "2016-12-08T11:48:07.534Z", 
    ....
}
Run Code Online (Sandbox Code Playgroud)

因此,我想从快照中还原新的Aurora群集,然后尝试进行以下操作:

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier from-snap2 \
    --db-snapshot-identifier snap2 \

 A client error (DBSnapshotNotFound) occurred when calling the RestoreDBInstanceFromDBSnapshot operation: DBSnapshot not found: snap2
Run Code Online (Sandbox Code Playgroud)

所以我尝试用以下方法还原:

aws rds restore-db-cluster-from-snapshot \
    --db-cluster-identifier from-snap2 \
    --snapshot-identifier snap2 \
    --engine aurora \
    --vpc-security-group-ids $PREPROD_SG \
    --db-subnet-group-name my-db-subnet-group \
Run Code Online (Sandbox Code Playgroud)

有用...

{
    "DBCluster": {
        ...
        "EngineVersion": "5.6.10a", 
        "DBClusterIdentifier": "from-snap2", 
...
        "DBClusterMembers": [], 
...
}
Run Code Online (Sandbox Code Playgroud)

但是,为什么群集不包含任何Aurora实例?

错误在哪里?

Mic*_*bot 6

这是非常违反直觉的。如果从快照恢复集群,但集群中没有成员实例,那么实际上什么操作成功了?似乎所有这些都是创建某种逻辑实体,可能是后备存储,但没有实例。

奇怪的。但是,API 文档确实将集群成员显示为示例响应中的空集。

<DBClusterMembers/>
Run Code Online (Sandbox Code Playgroud)

因此,您似乎创建了一个集群,就像您所做的那样,然后您显然在集群中创建了实例,如 AWS 论坛帖子中所述:

aws rds create-db-instance --db-instance-identifier my-instance --db-instance-class db.r3.large --engine aurora --db-subnet-group-name default-vpc-xxxxxx --db-cluster-identifier my-instance-cluster

https://forums.aws.amazon.com/thread.jspa?messageID=688727

显然控制台在同一个动作后面封装了多个 API 请求。


Ben*_*aux 5

AWS Support 的回复:

这是使用 API 调用时的一个已知问题,我们的工程师正在解决这个问题。即使集群在通过 CLI 创建后在 AWS 控制台上可见,它也不会在您的 Aurora 集群中自动创建任何实例。在这种情况下,您需要创建一个 db-instance 并将其关联到您新恢复的集群。在 AWS 控制台上执行此操作时,会自动为集群创建一个新实例,但来自 CLI 的操作使用单独的 API 调用。

以下文档提供了有关如何创建数据库实例的详细信息:http : //docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html

您可以使用 AWS 控制台或 CLI 描述您的集群:http : //docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html

这是一个创建实例并将其关联到虚构集群的命令行示例: aws rds create-db-instance --engine aurora --db-cluster-identifier yourauroraclusteridentifier --db-instance-class db.t2.medium - -db-instance-identifier yourinstanceidentifier

在我的情况下,--db-cluster-identifier是从集群快照创建的集群。