2016-12-08 6 views
2

Es ist ziemlich einfach über die Konsole, aber ich muss das gleiche von CLI tun.AWS Aurora: Wie stelle ich einen Datenbank-Cluster-Snapshot über aws cli wieder her?

Zuerst habe ich einen db Schnappschuss:

aws rds create-db-cluster-snapshot \ 
    --db-cluster-snapshot-identifier $SNAPSHOT_ID \ 
    --db-cluster-identifier $CLUSTER \ 

CLUSTER enthält nur ein Schriftsteller Beispiel

ich nicht create-db-snapshot Methode nicht genutzt, weil es einen Fehler throwned

Ein Client-Fehler (InvalidParameterValue) trat beim Aufrufen der Operation CreateDBSnapshot auf: Die angegebene Instanz ist Mitglied eines Clusters und ein Snapshot kann nicht direkt erstellt werden. Bitte verwenden Sie stattdessen die CreateDBClusterSnapshot-API.

Es funktioniert:

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", 
    .... 
} 

Also, ich einen neuen Aurora-Cluster aus dem Snapshot wiederherstellen wollte, dann habe ich versucht:

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 

Also habe ich versucht, mit wiederherzustellen:

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 \ 

Es funktioniert ...

{ 
    "DBCluster": { 
     ... 
     "EngineVersion": "5.6.10a", 
     "DBClusterIdentifier": "from-snap2", 
... 
     "DBClusterMembers": [], 
... 
} 

Aber warum enthält der Cluster keine Aurora-Instanz?

Wo ist der Fehler?

Antwort

2

Dies ist sehr kontraintuitiv. Wenn Sie einen Cluster aus einem Snapshot wiederherstellen, aber keine Memberinstanzen im Cluster vorhanden sind, welche Operation ist tatsächlich erfolgreich? Es scheint, als ob all dies eine Art logische Entität erzeugt, vielleicht den Backing Store, aber keine Instanzen.

Seltsam. Aber die API documentation zeigt die Cluster-Mitglieder als eine leere Menge in der Beispielantwort.

<DBClusterMembers/> 

So scheint es, Sie einen Cluster erstellen, wie du getan hast, dann anscheinend Sie Instanzen im Cluster erstellen, wie sie in einer AWS Forum Post erklärt:

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

Anscheinend kapselt die Konsole mehrere API-Anfragen hinter der gleichen Aktion ein.

0

Wenn Sie mit aws rds create-db-cluster-snapshot erstellen, können Sie mit aws rds restore-db-instance-from-db-snapshot nicht wiederherstellen. Der erste erstellt einen DB-Snapshot und der zweite stellt einen Cluster-Snapshot mit unterschiedlichen Typen wieder her.

Von Ihrer Frage aus sieht es aus wie Ihre Wiederherstellung korrekt ist, vielleicht müssen Sie --database-name angegeben. Sie können auch versuchen, die Wiederherstellung mit nur den erforderlichen Parametern, d. H. Kein vpc SG oder DB-Subnetz.

1

Antwort von AWS Support:

Dies ist ein bekanntes Problem, wenn die Anrufe API und unsere Ingenieure arbeiten daran. Auch wenn der Cluster nach der Erstellung über CLI in der AWS Console sichtbar ist, wird in Ihrem Aurora-Cluster keine Instanz automatisch erstellt. In diesem Fall müssen Sie eine db-Instanz erstellen und sie Ihrem neu wiederhergestellten Cluster zuordnen. Wenn Sie diese Aktion in der AWS-Konsole ausführen, wird automatisch eine neue Instanz für den Cluster erstellt, die Aktion von der CLI verwendet jedoch getrennte API-Aufrufe.

Die folgende Dokumentation enthält detaillierte Informationen darüber, wie eine DB-Instanz zu erstellen: http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html

Sie können Ihre Cluster mit der AWS-Konsole oder über die CLI beschreiben: http://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html

Hier ist ein Kommandozeilen-Beispiel erstellt die Instanz und verknüpft sie mit einem fiktiven Cluster: aws rds create-db-instanz --engine aurora --db-cluster-identifier yourauroraclusteridentifier --db-instanzklasse db.t2.medium --db-instance- Bezeichner yourinstanceidentifier

In meinem Fall ist --db-cluster-identifier der aus dem Cluster-Snapshot erstellte Cluster.