よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

データやログのバックアップを楽に実現するために活用すべきライブラリ〜Backup〜

サービスを提供する上で欠かせないのがデータやログ等のバックアップの設定です。
構築/運用するサービスが増えると、その時に必ずバックアップの設定などを行なわなければなりませんね。

ですがこのバックアップを仕込む作業、実に面倒ですよね。
面倒な理由として以下があります。

  • 環境構築の度にアプリケーションの仕組みに合わせたスクリプトを作成しなければならない
  • アプリケーションエンジニアにバックアップ対象を確認しないといけない
  • バックアップしておくデータの世代管理をしないといけない
  • バックアップしたデータからリストアのテストをしないといけない
  • バックアップ失敗時にエラー検出するようにしないといけない
  • バックアップ失敗時にエラー通知のテストをしないといけない
  • ... etc.

バックアップの仕組みを整備するのもひと苦労です。
さらに、サービスが増えるごとに上記の作業をくり返しているとホント嫌になりますよね。

SonicGardenでは、このバックアップの設定する作業を簡素化/適切化するためのRubyのgemであるBackupを昨年から導入しています。
このBackupというgemがどのようなものかというのは、「BackupライブラリでプロジェクトのバックアップもD.R.Y化しよう」で紹介されていますので、読んでみてください。

上記ので紹介された以降も着実に開発が進み、今はバージョン3が開発中で、バージョン2と比較し、以下のような改善がみられます。

  • 単体テスト(spec)や内部で利用しているライブラリのAPIコールのテスト等が充実
  • 設定に応じて導入する関連ライブラリが決定される(バージョン2では利用しないgemもインストールされていた)


なお、このBackupの特徴はこのようになっています。

  • さまざまなDBに対応(MySQL/PostgreSQL/MongoDB/Redis)
  • バックアップ先にさまざまなストレージサービスを選択可能(Amazon S3/Packspace Cloud Files/Dropbox/自前:FTP/SFTP/SCP/Rsync)
  • 世代管理が容易
  • 暗号化保存が可能
  • エラー通知/実行終了通知が可能(Mail/Twitter/Campfire/Presently)

フレームワークに依存することなく利用可能で、もちろんRailsアプリに組み込むこともできます


このBackupを利用するようになり、SonicGardenでは、アプリケーション開発と運用の役割も変化させています。

■ バックアップの設定を書くのはアプリケーション開発者

SonicGardenはRubyアジャイル開発方式を組み合わせた開発を実践しており、開発が進むとデータ保持の仕組みなども変わります。
この仕組みの変更を検討/設計するのは、基本的にアプリケーション開発者です。
そのため、データ保持の仕組みが変わったときに同時にバックアップの設定も変えてやることができれば効率的ですね。
もし、リリース1週間くらい前になってリリースの準備をはじめ、その時にデータ保持の仕組みが変わったことをインフラの人に伝えてバックアップの仕組みを変えてもらうということをしていると効率的な開発/運用はできませんよね。
そういう理由で、基本的にデータの保持方式が変わったら、変更した当事者であるアプリケーション開発者がバックアップ設定についても変更するようにしています。
複雑なシステム構成では上記のような体制にすることは難しいかもしれませんが、システムをシンプルな構成の場合は実現できるはずですよね。


上記のようにアプリケーション開発と運用の役割も見直すことで、他にも副次的効果がありました。

  • アプリケーション開発者がバックアップの設定も把握するようになることで、システムがよりシンプルな構成になった
  • アプリケーション開発者と運用担当者間の伝達ミスが減った
  • インフラエンジニアにかかる負荷が減り、インフラエンジニアもアプリケーション開発ができるゆとりができた


最後に。
最近は、Amazon S3以外にもREST APIに対応したオンラインストレージも増えてき、S3以外のストレージにバックアップデータを保存することができる世の中になってきましたので、耐障害性を高める/信頼性を向上させる目的で、ストレージ保存先を簡単に切り替えられるようにするためにも、ここらでBackupを導入してみてはいかがでしょうか。

導入も簡単なのでぜひ試してみてください。英語ですが、こちらのReadMeにマニュアルがまとめられているので参考にしてください。



補足情報
このBackupですが、S3にデータを保存する際に5GB以上のデータを転送しようとすると失敗します。これはAmazon S3の仕様で、5GB以上のオブジェクトを保存するためには、Multipartアップロードをしないといけないためです。
このライブラリのissueとして登録されてはいますが、まだ対応はさせていないという状況です。
これでは困るので修正パッチを実装してこちらで公開し、Pull Requestを出しています。
すぐにでもパッチが当てられたものを利用したいという方は、こちらのブランチを利用してください。