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:
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?
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?
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
Si vous souhaitez le faire par programme,
Instantané de l'instance RDS à l'aide de rds-create-db-snapshot
http://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-CopyDBSnapshot.html
Supprimez l'instance en cours d'exécution à l'aide de rds-delete-db-instance
http://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-DeleteDBInstance.html
Restaurez la base de données à partir de l'instantané à l'aide de rds-restore-db-instance-from-db-snapshot
http://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.
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.
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.