Как определить, завершено ли и завершено действие создания реплики чтения

#amazon-web-services #amazon-rds #aws-cli

#amazon-web-services #amazon-rds #aws-cli

Вопрос:

Я пытаюсь создать реплику чтения рабочей базы данных, а затем хочу продвинуть реплику чтения в тестовую базу данных.

Я использовал эту команду awscli для создания реплики чтения

 aws rds create-db-instance-read-replica --db-instance-identifier test-database --source-db-instance-identifier production-database --region eu-central-1
  

Я знаю, что не могу немедленно выполнить команду promote read replica, поскольку я получу сообщение об ошибке.

 bash-3.2$ aws rds promote-read-replica --db-instance-identifier test-database --region eu-central-1

An error occurred (InvalidDBInstanceState) when calling the PromoteReadReplica operation: DB Instance is not in an available state.
  

Как я могу проверить, успешно ли создана реплика чтения, чтобы я мог выполнить команду promote read replica?

Я попытался запросить события для базы данных, но они возвращаются пустыми.

 bash-3.2$ aws rds describe-events --source-identifier test-database --source-type db-instance
{
    "Events": []
}
  

Я пытаюсь сделать это в конвейере Дженкинса, поэтому его нужно проверять программно.

Пожалуйста, сообщите.

Ответ №1:

Вы можете использовать describe-db-instances и создать простой официант на основе while, чтобы реплика была доступна.

Например:

 while true; do 

    db_status=$(aws rds describe-db-instances 
                --db-instance-identifier test-database 
                --query 'DBInstances[0].DBInstanceStatus' 
                --output text)
                
    [[ $db_status != "available" ]] 
        amp;amp; (echo $db_status; sleep 5) 
        || break    
done

echo "Finally ${db_status}"
  

Вышеуказанное будет проверять статус test-database каждые 5 секунд, пока его available .

Ответ №2:

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

  db_status=$(aws rds describe-db-instances 
                --db-instance-identifier db-replica 
                --profile xxx 
                --region us-west-2 
                --query 'DBInstances[0].DBInstanceStatus' 
                --output text)               
    [[ $db_status != "available" ]] 
        amp;amp; (echo $db_status; sleep 15)
        || break 
    
 echo "Finally ${db_status}"
if [ $db_status == "available" ]
    then
        echo "replica created successfully"
        echo "Rebooting replica"
        aws rds reboot-db-instance --db-instance-identifier db-replica 
        sleep 5;
else
   echo "replica rebooted successfully"
fi
       
exit 1