SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8146 2014/10/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー