Boto3 и AWS RDS: правильно дождитесь создания базы данных из моментального снимка

#amazon-web-services #lambda #boto3 #amazon-rds

Вопрос:

У меня есть следующий код в моей Лямбде (Python и Boto3):

     rds.restore_db_instance_from_db_snapshot(
        DBSnapshotIdentifier=snapshot_name,
        DBInstanceIdentifier=db_id,
        DBInstanceClass=rds_instance_class,
        VpcSecurityGroupIds=secgroup,
        DBSubnetGroupName=rds_subnet_groupname,
        MultiAZ=False,
        PubliclyAccessible=False,
        CopyTagsToSnapshot=True
    )


    waiter = rds.get_waiter('db_instance_available')
    waiter.wait(DBInstanceIdentifier=db_id)

# some other operation that expects that DB is up and running.

 

Официант был добавлен в качестве попытки должным образом дождаться DB. Однако, похоже, у официанта истекает время ожидания.

Каким был бы правильный официант в этом случае?

Ответ №1:

попробуйте установить waiter.config.delay и/или waiter.config.max_attempts .

 waiter = rds.get_waiter('db_instance_available')
waiter.config.delay = 123 # this is in seconds
waiter.config.max_attempts = 123
waiter.wait(DBInstanceIdentifier=db_id)
 

или

 waiter = rds.get_waiter('db_instance_available')
waiter.wait(
    DBClusterIdentifier=db_id
    WaiterConfig={
        'Delay': 123,
        'MaxAttempts': 123
    }
)
 

Официантконфиг (дикт) Словарь, предоставляющий параметры для управления
поведением в режиме ожидания.

Задержка (целое число) Количество времени в секундах для ожидания между попытками. По умолчанию: 30

maxAttempts (целое число) Максимальное количество попыток, которые необходимо предпринять. По умолчанию: 60

Ответ №2:

Может ли быть так, что ваш официант на самом деле проверяет существующую базу данных и видит, что она доступна, прежде чем статус сможет обновиться по предыдущей команде для восстановления моментального снимка?