web-dev-qa-db-fra.com

Amazon RDS - En ligne uniquement en cas de besoin?

J'avais une question sur Amazon RDS. Je n'ai besoin de la base de données en ligne que pendant environ 2 heures par jour, mais j'ai affaire à une base de données assez volumineuse à environ 1 Go.

J'ai deux questions principales:

  1. Puis-je automatiser la mise en ligne et hors ligne de ma base de données RDS via des scripts pour économiser de l'argent?

  2. Lorsque je mets un RDS hors ligne pour arrêter le fonctionnement du compteur "d'heures de travail" et me facturer, quand je le remets en ligne, aura-t-il toujours le même contenu (c'est-à-dire que toutes mes données y resteront, ou devra-t-il être une base de données vierge ?). Si oui, y a-t-il un moyen de contourner cela plutôt que de sauvegarder sur S3 et de le réimporter à chaque fois?

41
Jimmy

Voici un script qui arrêtera/démarrera/redémarrera une instance RDS

#!/bin/bash

# usage ./startStop.sh lhdevices start

INSTANCE="$1"
ACTION="$2"



# export vars to run RDS CLI
export Java_HOME=/usr;
export AWS_RDS_HOME=/home/mysql/RDSCli-1.15.001;
export PATH=$PATH:/home/mysql/RDSCli-1.15.001/bin;
export EC2_REGION=us-east-1;
export AWS_CREDENTIAL_FILE=/home/mysql/RDSCli-1.15.001/keysLightaria.txt;

if [ $# -ne 2 ]
then
echo "Usage: $0 {MySQL-Instance Name} {Action either start, stop or reboot}"
echo ""
exit 1
fi


shopt -s nocasematch

if [[ $ACTION == 'start' ]]
then
echo "This will $ACTION a MySQL Instance"  
rds-restore-db-instance-from-db-snapshot lhdevices 
--db-snapshot-identifier        dbStart --availability-zone us-east-1a     
--db-instance-class db.m1.small 

echo "Sleeping while instance is created"
sleep 10m
echo "waking..."

rds-modify-db-instance lhdevices --db-security-groups kfarrell

echo "Sleeping while instance is modified for security group name"
sleep 5m
echo "waking..."

Elif [[ $ACTION == 'stop' ]]
then
echo "This will $ACTION a MySQL Instance" 

yes | rds-delete-db-snapshot dbStart

echo "Sleeping while deleting old snapshot "
sleep 10m

#rds-create-db-snapshot lhdevices --db-snapshot-identifier dbStart

# echo "Sleeping while creating new snapshot "
# sleep 10m
# echo "waking...."

#rds-delete-db-instance lhdevices --force --skip-final-snapshot 
rds-delete-db-instance lhdevices --force --final-db-snapshot-identifier dbStart

echo "Sleeping while instance is deleted"
sleep 10m
echo "waking...."

Elif [[ $ACTION == 'reboot' ]]
then
echo "This will $ACTION a MySQL Instance" 
rds-reboot-db-instance lhdevices ;

echo "Sleeping while Instance is rebooted"
sleep 5m
echo "waking...."

else

echo "Did not recognize command: $ACTION"
echo "Usage: $0 {MySQL-Instance Name} {Action either start, stop or reboot}"

fi
shopt -u nocasematch
9
kevin

Si vous souhaitez le faire par programme,

  1. Instantané de l'instance RDS à l'aide de rds-create-db-snapshothttp://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-CopyDBSnapshot.html

  2. Supprimez l'instance en cours d'exécution à l'aide de rds-delete-db-instancehttp://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-DeleteDBInstance.html

  3. Restaurez la base de données à partir de l'instantané à l'aide de rds-restore-db-instance-from-db-snapshothttp://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-RestoreDBInstanceFromDBSnapshot.html

Vous pouvez également effectuer tout cela à partir de la console Web AWS, si vous souhaitez le faire manuellement.

30
BestPractices

Vous pouvez démarrer des instances EC2 * à l'aide de scripts Shell, donc je suppose que vous pouvez également le faire pour RDS. (voir http://docs.aws.Amazon.com/AmazonRDS....html )

Mais contrairement à EC2 *, vous ne pouvez pas "arrêter" une instance RDS sans la "détruire". Vous devez créer un instantané de base de données lors de la fermeture de votre base de données. Vous utiliserez cet instantané de base de données lors du redémarrage de la base de données.

* EC2: Elastic Computing, location d'un serveur virtuel ou d'un serveur.

9
Thibault D.

Amazon a récemment mis à jour sa CLI pour inclure un moyen de démarrer et d'arrêter les instances RDS. stop-db-instance et start-db-instance détaillent les étapes nécessaires pour effectuer ces opérations.

6
Richard Hurt