IMPOV::In My Point Of View

仕事、SEO、ウェブマーケティング、時事問題、健康、生き方などなど、書きたいことを勝手に書き倒しているブログです。とどのつまり「便所の落書き」

さくらVPS から AWS S3 にバックアップファイルを低冗長化ストレージで自動的に保存する (s3cmd または awscli)

さくらVPS(CentOS 6.6)のバックアップをMondorescueで取っている。(以前に書いた記事 : バックアップ - Mondorescue のインストール

今まで1年近くに渡りバックアップイメージを手動ダウンロードで保管していたのだが、最近、仕事上の都合で毎日バックアップをしなければならなくなったため、バックアップイメージの保管を自動化することにした。

バックアップの保管先

バックアップの保管先としては、さくらVPS 1Gプランの新規契約や事務所PCを使用することも検討したが、今回は AWS S3 を利用することにした。

バックアップポリシー

  • Mondorescueで毎日夜間バックアップ
  • tmpwatch でVPS上にある7日超のバックアップイメージを削除
  • バックアップイメージ保管ディレクトリを AWS S3 に同期

費用

バックアップイメージのサイズは現状で一回分が2.5GBほど。MySQLのバックアップファイルを含めても今のところ20GBほどの容量があれば充分だ。

AWSの簡易見積りツールで計算してみたところ月額1ドル以下。1ヶ月してみないと本当かどうかわからないが・・・と疑いたくなる安さ。
(2015/01/21追記:およそ半月経過時点で0.3ドル。やっぱり1ドル以下で済みそうだ。)

先々容量が肥大化していった場合でも、(費用の問題は発生するが・・・)S3なら安心だ。

自動化の設定

バックアップイメージ保管ディレクトリとAWS S3に作成したバケットとの同期には以下のいずれかのツールでsyncコマンドを実行する。

  • s3cmd (開発は1年近く止まっている様子)
  • awscli (アマゾン謹製のAPI)

今回は、両方共インストールして稼働することを確認した上で、本家のawscliを採用した。

なお、いずれも環境としてPythonが必須。

バケットの作成など

以下の記事を参考にS3にバケットを作成し、IAMでアクセス可能なアカウントを作成した。
s3cmdを使ってEC2からS3にDBバックアップ - Qiita

また作成したバケットにS3の管理画面で、あらかじめ同期用フォルダ(backupISOなど)を作成しておく。

s3cmd または awscliのインストール

VPSサーバーにログインし、su - で root アカウントに昇格してインストール。*1
どちらもインストール後に、configure コマンドでアクセスキーやらシークレットキーを入力し設定を完了する。

s3cmd
yum --enablerepo=epel install s3cmd
s3cmd --configure

Access Key: #############################
Secret Key: ########################################

Encryption password: 何も入力せずにEnter
Path to GPG program [/usr/bin/gpg]:何も入力せずにEnter
Use HTTPS protocol [No]:Yes
HTTP proxy server name: 何も入力せずにEnter
Test access with supplied credentials? [Y/n] y
Save settings? [y/N] y
awscli

これまでPythonを使う機会がなかったので、pipをインストールするところから。

easy_install pip
pip install awscli
aws configure

AWS Access Key ID [None]: #############################
AWS Secret Access Key [None]: ########################################
Default region name [None]: ap-northeast-1 #東京のリージョン名
Default output format [None]: json

コマンドラインで同期

ファイルはお値段が若干安い低冗長化ストレージで保存。
下記のコマンドラインは、保存場所を以下の通りとした場合の例。

  • VPS側ディレクトリ : /home/backup/
  • S3側フォルダ : /backup/backupISO/
s3cmd
s3cmd sync --delete-removed --reduced-redundancy /home/backup/ s3://backup/backupISO/
awscli
s3 sync --delete --storage-class REDUCED_REDUNDANCY /home/backup/ s3://backup/backupISO/

cronに登録

cronにはコマンドラインをそのまま登録して実行可能。
以下はawscliを毎日7時に動かす場合

0 7 * * * root aws s3 sync --delete --storage-class REDUCED_REDUNDANCY /home/backup/ s3://backup/backupISO/

その他

アップロード速度

s3cmdでアップロードした場合、終了時に実行にかかった時間が表示される。
さくらVPS 東京リージョン → AWS S3 東京リージョンでアップした際の実際のログは以下の通り。

2640205824 bytes in 237.7 seconds, 10.59 MB/s

2.46GBをおよそ4分であった。

AWS SNSを設定

S3 Event Notifications を以下の記事を参考にAWS SNSに設定して、ファイルがPUTされた時にメールが飛ぶようにした。
AWS - Amazon S3 Event Notificationsを設定してみる - Qiita

*1:当然 root でなくても問題ないが、設定ファイル類はインストールしたアカウントのhomeディレクトリ直下に保存されるようである。s3cmdは ~/.s3cfg 、awscliは ~/.aws/config