AWS — восстановление Neptune из моментального снимка с помощью SDK

Я пытаюсь протестировать восстановление экземпляров Neptune из моментального снимка с помощью python (boto3). Короче говоря, мы хотим ежедневно запускать и удалять экземпляр Dev с помощью автоматизации.

При восстановлении мое восстановление, похоже, создает только кластер без создания прикрепленного экземпляра. Я также пытался создать экземпляр после того, как кластер был запущен, и добавить его в кластер, но это тоже не работает. (ссылка: client.create_db_instance)

Мой код работает следующим образом: получает самый последний снимок. Используйте эту переменную для создания кластера, чтобы там были самые последние данные.

import boto3

client = boto3.client('neptune')

response = client.describe_db_cluster_snapshots(
    DBClusterIdentifier='neptune',
    MaxRecords=100,
    IncludeShared=False,
    IncludePublic=False
)

snaps = response['DBClusterSnapshots']
snaps.sort(key=lambda c: c['SnapshotCreateTime'], reverse=True)

latest_snapshot = snaps[0]
snapshot_ID = latest_snapshot['DBClusterSnapshotIdentifier']

print("Latest snapshot: " + snapshot_ID)

db_response = client.restore_db_cluster_from_snapshot(
    AvailabilityZones=['us-east-1c'],
    DBClusterIdentifier='neptune-test',
    SnapshotIdentifier=snapshot_ID,
    Engine='neptune',
    Port=8182,
    VpcSecurityGroupIds=['sg-randomString'],
    DBSubnetGroupName='default-vpc-groupID'
)

time.sleep(60)

db_instance_response = client.create_db_instance(
    DBName='neptune',
    DBInstanceIdentifier='brillium-neptune',
    DBInstanceClass='db.r4.large',
    Engine='neptune',
    DBSecurityGroups=[
        'sg-string',
    ],
    AvailabilityZone='us-east-1c',
    DBSubnetGroupName='default-vpc-string',
    BackupRetentionPeriod=7,
    Port=8182,
    MultiAZ=False,
    AutoMinorVersionUpgrade=True,
    PubliclyAccessible=False,
    DBClusterIdentifier='neptune-test',
    StorageEncrypted=True
)

Документация мало чем помогает. Это очень хорошо для предоставления переменных, необходимых для базового создания, но не для фактического экземпляра. Если я попытаюсь создать экземпляр с тем же именем кластера, он либо выдаст ошибку, либо создаст новый кластер с тем же именем, к которому добавлено «-1».


person LiquidCourage11    schedule 18.10.2018    source источник
comment
Привет, LiquidCourage, есть ли что-то еще, на что вы хотели бы ответить в рамках этого поста?   -  person The-Big-K    schedule 10.10.2020


Ответы (1)


Если вы хотите программно сделать восстановление из снапшота, то вам необходимо:

  1. Создайте снимок кластера с помощью create-db-cluster-snapshot
  2. Восстановить кластер из моментального снимка с помощью restore-db-cluster-from-snapshot
  3. Создайте экземпляр в новом кластере, используя create-db-instance

Вы упомянули, что в конце концов сделали вызов create-db-instance, но в вашем фрагменте примера его нет. Если этот вызов действительно удался, вы должны увидеть экземпляр, подготовленный внутри этого кластера.

Когда вы выполняете восстановление из моментального снимка с помощью консоли Neptune, шаги № 2 и № 3 выполняются за вас.

Похоже, вы сделали следующее:

  1. Создайте снимок через CLI
  2. Создайте кластер через CLI
  3. Создайте экземпляр в кластере через консоль

Сегодня мы рекомендуем восстанавливать моментальный снимок полностью через Консоль или полностью с помощью CLI.

person The-Big-K    schedule 18.10.2018
comment
Спасибо. Сейчас работаем над кодом снимка. Это должен был быть второй этап для части «отключения» среды разработки. Я обновлю позже сегодня днем. Тем не менее, мой процесс заключался в том, чтобы просто создать снимок вручную через консоль только для тестирования, чтобы проверить имя и т. д., чтобы я мог проверить некоторые вещи в своем коде. Еще раз спасибо! Я скоро обновлю информацию о том, что происходит и где я приземлюсь на это. Я отредактировал свой исходный комментарий, чтобы показать дополнительный код, создающий экземпляр. - person LiquidCourage11; 19.10.2018
comment
Итак, есть некоторые проблемы. У меня возникают проблемы с добавлением экземпляра в кластер при создании. Я получаю следующую ошибку на основе моего кода в исходном сообщении: botocore.exceptions.ClientError: An error occurred (InvalidParameterCombination) when calling the CreateDBInstance operation: The requested DB Instance will be a member of a DB Cluster. Set database name for the DB Cluster. . Однако я использовал «DBClusterIdentifier» с точным именем кластера. Теоретически я должен иметь возможность добавить экземпляр или дополнительные экземпляры, используя это, верно? - person LiquidCourage11; 19.10.2018
comment
Да, вы должны иметь возможность добавлять такие экземпляры. Можете ли вы попробовать удалить DBName из ваших аргументов в CreateDbInstance? - person The-Big-K; 19.10.2018