CDP:Web Storage Archiveパターン
提供:AWS-CloudDesignPattern
大容量データのアーカイブ化
目次 |
解決したい課題
各サーバーで大量に発生するログやバックアップファイルは、一定期間保存しておく必要がある。しかし、そのために大容量のディスクを用意するのはコスト的に効率が悪い。特に成長しているシステムでは、保存するファイルサイズを見積もる(キャパシティープランニング)のは難しい。各サーバーのログを共有ストレージにアーカイブして短期間でローテーションすれば、各サーバーでディスク拡張のメンテナンスを無くすことはできる。しかし共有ストレージに対しては、同様のキャパシティプランニングの課題が残ってしまう。
クラウドでの解決/パターンの説明
クラウドでは、実質キャパシティー無限のインターネットストレージが用意されていることが多く、このインターネットストレージをログのアーカイブ先として利用することができる。この場合、ディスク拡張のメンテナンスと事前のキャパシティプランニングを考える必要が無くなり、容易に共有ストレージへのログアーカイブを実現することが可能となる(コストに関わるキャパシティプランイングは実施する必要がある)。
実装
S3は高い可用性と耐久性を備えており、ログの保存先にふさわしい。S3へのアップロードはツール(例えばs3cmdやs3syncなど)を利用すれば容易に実行できる。
- EC2上で出力される各種ログを、ログローテーションソフトウエア(logrotateなど)でローテーションさせる。
- ローテーションのタイミングで、そのログをS3へ保存する(ローテーションスクリプトにS3へのアップロード処理を記述する)。
- Fluentdと、そのAmazon S3 Output Pluginを利用して短いスパンでログをS3にアーカイブすることも可能。[関連ブログ 1]
構造
利点
- S3にログを保存することで、ディスクスペースを気にすることなく、また、障害による紛失の危険性もなくログを貯め続けることが可能。
- バックアップファイルの保存に関しても同様の仕組みを利用できる。
- EBSはサイズベース課金だが、S3は利用量ベースの課金である。よりリーズナブルに運用が可能。
注意点
- ログローテーションする前にEBSに障害があった場合は、以前のローテーションからのログは紛失してしまう。
- Auto Scalingを利用している場合は、EC2のシャットダウン時にも該当ログをS3に保存する必要がある。[関連ブログ 2]