CodeZine(コードジン)

特集ページ一覧

AWSのバックアップをAmazon Machine ImageやAmazon S3ではじめよう

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/10/09 14:00

目次

バックアップ設定を行う 2

S3のバックアップスクリプトを作成する

 サンプルとして、MySQLからダンプを取りS3に保存するスクリプトを作成します。

 まずAWS Management Consoleから、S3でバックアップ用のバケットを一つ作成します。次に、フォルダを一つ作成します。名前はサービスやインスタンスを特定できるものにするとよいかと思います。このサンプルでは「s3-backup-test」としておきます。

/path/to/script/s3-backup.sh
#!/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時間おきにバックアップするようにします。

crontab
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を使うと気軽にステージング環境を構築できるため、アプリケーションのアップデート検証なども安心して行うことができます。運用上では大変大きい恩恵を得ることができるのではないでしょうか。

参考資料

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 越川祐次(コシカワユウジ)

    株式会社エイムラック所属 グループウェア「Aipo」の開発のほか、サーバー運用、移行、システム開発をおこなっています。 kousoku AWS Aipo.com

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5