バックアップ設定を行う 2
S3のバックアップスクリプトを作成する
サンプルとして、MySQLからダンプを取りS3に保存するスクリプトを作成します。
まずAWS Management Consoleから、S3でバックアップ用のバケットを一つ作成します。次に、フォルダを一つ作成します。名前はサービスやインスタンスを特定できるものにするとよいかと思います。このサンプルでは「s3-backup-test」としておきます。
#!/bin/sh
BucketName={バケット名}
DirName=s3-backup-test
Gen=3
User=root
Pass=
DbName={DB名}
PostfixDate=`date +%Y%m%d%H%M%S`
resultUpload="success"
resultDelete="success"
createFile(){
if [ -z $PASS ]; then
mysqldump -u$User --single-transaction $DbName | gzip > /tmp/$DbName-$PostfixDate.gz
else
mysqldump -u$User -p$Pass --single-transaction $DbName | gzip > /tmp/$DbName-$PostfixDate.gz
fi
}
deleteLocalFile(){
rm -f /tmp/$DbName-$PostfixDate.gz
}
uploadFile(){
/usr/bin/aws s3 cp /tmp/$DbName-$PostfixDate.gz s3://${BucketName}/${DirName}/
if [ $? -ne 0 ]; then
resultUpload="failure"
fi
}
deleteS3Files(){
fileList=`aws s3 ls s3://${BucketName}/${DirName}/ | grep $DbName | sort -r | sed -e "1,${Gen}d" | awk '{print $4}'`
for s3file in ${fileList}
do
/usr/bin/aws s3 rm s3://${BucketName}/${DirName}/$s3file
if [ $? -ne 0 ]; then
resultDelete="failure"
fi
done
}
echo "[`date '+%Y/%m/%d %H:%M:%S'`] s3 backup start"
createFile
uploadFile
deleteLocalFile
deleteS3Files
if [ "$resultUpload" = "success" -a "$resultDelete" = "success" ]; then
echo "[`date '+%Y/%m/%d %H:%M:%S'`] s3 backup success"
else
echo "[`date '+%Y/%m/%d %H:%M:%S'`] s3 backup failure"
fi
テスト実行します。
chmod +x s3-backup.sh ./s3-backup.sh
「s3 backup success」と表示されれば成功です。AWS Management Consoleでは以下のようになります。
cronの設定を行います。 3時間おきにバックアップするようにします。
0 */3 * * * /path/to/script/s3-backup.sh >> /var/log/s3-backup.log 2>&1
これでS3にバックアップする設定は完了です。
まとめ
AMIを使ったバックアップと、S3を使ったバックアップの設定を行いました。 サーバー運用の手助けになればと思います。
このスクリプトは、Python版のAWSコマンドラインインターフェイスとbashのみを使用して作成していますので、AWSのAPIキーの保存場所が1か所で済んでいます。他のバックアップツールを使っていてキー情報が分散化し、管理が手間になっていたら、使用してみると良いかと思います。
AMIを使ったバックアップやS3へのバックアップは、専用サーバーなどでNASを用意してバックアップしていたときに比べると、非常に便利です。またAMIを使うと気軽にステージング環境を構築できるため、アプリケーションのアップデート検証なども安心して行うことができます。運用上では大変大きい恩恵を得ることができるのではないでしょうか。


