2016-12-08 1 views
2

C'est assez facile via la console mais je dois faire la même chose avec CLI.AWS Aurora: comment restaurer un snapshot de cluster db via aws cli?

D'abord, je crée un instantané db:

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

CLUSTER ne contient qu'un seul écrivain exemple

Je n'ai pas utilisé create-db-snapshot méthode car elle Projetés une erreur

Une erreur client (InvalidParameterValue) s'est produite lors de l'appel de l'opération CreateDBSnapshot: L'instance spécifiée est membre d'un cluster et un instantané ne peut pas être créé directement. Veuillez utiliser l'API CreateDBClusterSnapshot à la place.

Il fonctionne:

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

Alors, je voulais restaurer un nouveau cluster Aurora de l'instantané, puis j'ai essayé:

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 

J'ai donc essayé de restaurer avec:

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 \ 

Cela fonctionne ...

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

Mais pourquoi le cluster ne contient aucune instance Aurora?

Où est l'erreur?

Répondre

2

Ceci est très contre-intuitif. Si vous restaurez un cluster à partir d'un instantané, mais qu'il n'y a aucune instance de membre dans le cluster, quelle opération a effectivement réussi? Il semble que tout cela crée une entité logique, peut-être le backing store, mais pas de cas.

Étrange. Mais, le API documentation montre les membres du cluster comme un ensemble vide dans l'exemple de réponse.

<DBClusterMembers/> 

Il vous semble créer un cluster, comme vous l'avez fait, vous créez apparemment des instances du cluster, comme expliqué dans un poste Forum 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

Apparemment, la console encapsule plusieurs requêtes API derrière la même action.

0

Si vous créez avec aws rds create-db-cluster-snapshot, vous ne pouvez pas restaurer avec aws rds restore-db-instance-from-db-snapshot. Le premier crée un instantané DB et le second restaure un instantané Cluster, de différents types.

De votre question il semble que votre restauration est correcte, peut-être vous avez besoin de --database-name spécifié. Vous pouvez également essayer la restauration avec uniquement les paramètres requis, par exemple, vpc sg ou sous-réseau DB.

1

Réponse de AWS Support:

Ceci est un problème connu lors de l'utilisation des appels API et nos ingénieurs travaillent là-dessus. Même si le cluster est visible sur AWS Console après la création via CLI, il ne crée aucune instance automatiquement dans votre cluster Aurora. Dans ce cas, vous devrez créer une instance DB et l'associer à votre nouveau cluster restauré. Lors de l'exécution de cette action sur la console AWS, une nouvelle instance est automatiquement créée pour le cluster, mais l'action de la CLI utilise des appels d'API séparés.

La documentation suivante fournit des informations détaillées sur la façon de créer une instance DB: http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html

Vous pouvez décrire vos clusters en utilisant la console AWS ou à l'aide de la CLI: http://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html

Voici un exemple de ligne de commande qui crée l'instance et l'associe à un cluster fictif: aws rds create-db-instance --carte aurore --db-cluster-identificateur yourauroraclusteridentifier --db-instance-classe db.t2.medium --db-instance- identifiant yourinstanceidentifier

Dans mon cas, --db-cluster-identifier est le cluster créé à partir de l'instantané de cluster.