2016-12-08 8 views
2

Это довольно легко через консоль, но мне нужно сделать то же самое с CLI.AWS Aurora: как восстановить моментальный снимок кластера db через aws cli?

Сначала я создал дб снимок:

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

Кластер содержит только один экземпляр писатель

Я не использовал create-db-snapshot метод, поскольку он throwned ошибку

Ошибка клиента (InvalidParameterValue) при вызове операции CreateDBSnapshot: указанный экземпляр является членом кластера, и моментальный снимок не может быть создан напрямую. Вместо этого используйте API CreateDBClusterSnapshot.

Он работает:

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

Итак, я хотел восстановить новый кластер 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 

Так что я попытался восстановить с:

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 \ 

Это работает ...

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

Но почему кластер не содержит экземпляра Aurora?

Где ошибка?

ответ

2

Это очень противоречиво. Если вы восстанавливаете кластер из моментального снимка, но в кластере нет экземпляров-членов, какая операция на самом деле преуспела? Кажется, что все это делает, создает какой-то логический объект, возможно, резервный магазин, но нет экземпляров.

Странно. Но, API documentation показывает члены кластера как пустые множества в ответе примера.

<DBClusterMembers/> 

Так что, кажется, вы создаете кластер, как вы это делали, то вы, очевидно, создавать экземпляры в кластере, как описано в посте 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 за одно и то же действие.

0

Если вы создаете с помощью aws rds create-db-cluster-snapshot, вы не сможете восстановить с помощью aws-rds restore-db-instance-from-db-snapshot. Первый создает моментальный снимок БД, а второй восстанавливает моментальный снимок кластера, разные типы.

С вашего вопроса, похоже, что ваше восстановление правильное, возможно, вам нужно указать имя базы данных. Также вы можете попробовать восстановить только с необходимыми параметрами, т. Е. Нет vpc sg или подсети DB.

1

Ответ Поддержка AWS:

Это известная проблема при использовании вызовов API, и наши инженеры работают над этим. Даже если кластер будет виден на AWS Console после создания через CLI, он не создаст экземпляр автоматически в вашем кластере Aurora. В этом случае вам нужно будет создать db-экземпляр и связать его с недавно восстановленным кластером. При выполнении этого действия в Консоли AWS для кластера автоматически создается новый экземпляр, но действие из CLI использует раздельные вызовы API.

Следующая документация содержит подробную информацию о том, как создать экземпляр DB: http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html

Вы можете описать свои кластеры с помощью AWS консоли или с помощью интерфейса командной строки: 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- идентификатор yourinstanceidentifier

В моем случае --db-cluster-identifier - это кластер, созданный из моментального снимка кластера.