Amazon RDSについて質問がありました。データベースは1日約2時間だけオンラインで必要ですが、1 GB程度の非常に大きなデータベースを扱っています。
主に2つの質問があります。
お金を節約するために、スクリプトを使用してRDSデータベースをオンラインおよびオフラインにすることを自動化できますか?
RDSをオフラインにして「稼働時間」カウンターの実行と請求を停止し、オンラインに戻すと、同じコンテンツが残ります(つまり、すべてのデータがそこに残るか、空のDBになる必要があります) ?)。もしそうなら、S3にバックアップして毎回それを再インポートするのではなく、これを回避する方法はありますか?
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
プログラムでこれを行いたい場合は、
rds-create-db-snapshot
を使用してRDSインスタンスのスナップショットを作成 http://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-CopyDBSnapshot.html
rds-delete-db-instance
http://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-DeleteDBInstance.html を使用して、実行中のインスタンスを削除します
rds-restore-db-instance-from-db-snapshot
を使用してスナップショットからデータベースを復元します http://docs.aws.Amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-RestoreDBInstanceFromDBSnapshot.html
これを手動で行う場合は、AWS Webコンソールからもこれらすべてを実行できます。
シェルスクリプトを使用してEC2 *インスタンスを起動できるため、RDSでも同様に起動できると思います。 ( http://docs.aws.Amazon.com/AmazonRDS....html を参照)
ただし、EC2 *とは異なり、RDSインスタンスを「破壊」せずに「停止」することはできません。データベースを終了するときに、DBスナップショットを作成する必要があります。データベースを再起動するときに、このDBスナップショットを使用します。
* EC2:Elastic Computing、仮想サーバーまたはサーバーをレンタルします。
Amazonは最近、RDSインスタンスを開始および停止する方法を含むようにCLIを更新しました。 stop-db-instance および start-db-instance これらの操作を実行するために必要な手順の詳細。