はじめに
サーバのあるディレクトリ内のファイルをIDCFのオブジェクトストレージに定期バックアップするItamaeプラグインを作ったので紹介します!
nownabe/itamae-plugin-recipe-idcf-backup_to_object_storage
結論
作ったのはitamae-plugin-recipe-idcf-backup_to_object_storage
というクソ長い名前のGem(Itamaeプラグイン)です。
このプラグインを使うと、下の図のように任意の期間のバックアップファイルをオブジェクトストレージに保存することができます。
概要
このプラグインを使ってプロビジョニングするとどうなるのか簡単に説明します。
- バックアップスクリプトが作成される
- バックアップスクリプトを叩くcronジョブが作成される
- バックアップスクリプトは
- 指定されたサーバのディレクトリと指定されたオブストのバケットを同期する
- 指定された期間より古いファイルはサーバからもオブストからも削除する
- バックアップ実行前に任意のコマンドを実行できる
- mysqldumpとかtar zcfとか
- このコマンドで、指定したディレクトリ内にバックアップファイルを生成する
使い方
サンプル
サンプルを見てもらうのが一番はやいと思います。
https://github.com/nownabe-infra/example-idcf-backup_to_object_storage
Gemfile
Gemfileにプラグインを追加します。
# Gemfile
source "https://rubygems.org"
gem "itamae-plugin-recipe-idcf-backup_to_object_storage"
bundle installも忘れずにやっておきましょう。
$ bundle install
node.yml
node.ymlでいろいろ設定します。
# node.yml
idcf:
backup_to_object_storage:
access_key: YOUR_ACCESS_KEY
secret_key: YOUR_SECRET_KEY
directories:
- schedule: 30 3 * * *
path: /backups
bucket: backup.yourbucket
expire: 7
command: mysqldump -u root -x --all-databases > /backups/dump_`date +\%Y\%m\%d\%H\%M`.sql
idcf.backup_to_object_storage.access_key
: オブストのアクセスキーidcf.backup_to_object_storage.secret_key
: オブストのシークレットキーidcf.backup_to_object_storage.directories
: バックアップの設定の配列
バックアップの設定は、次のようになってます。
schedule
: バックアップを実行するスケジュール。みんなおなじみのcron形式path
: バックアップ元のディレクトリ。この中のファイルをオブストに同期しますbucket
: 同期先のバケットexpire
: ファイルを保持する期間。ここで設定した日数より前に作成されたファイルは、サーバーからもオブストからも削除されますcommand
: (optional) バックアップ前に実行するコマンド。だいたいはこのコマンドでpath
のディレクトリ内にバックアップファイルを作ることになると思います
上記のサンプルだと、
- 毎日3時30分に
- mysqldumpで/backupsディレクトリに全データベースのdumpをとる
- 7日前より古く作成されたファイルを削除する
- /backupsディレクトリをbackup.yourbucketに同期する
という一連の処理になります。
recipe
recipeには、1行追加するだけでOKです。
# recipe.rb
include_recipe "idcf-backup_to_object_storage"
プロビジョニング
最後に、SSH経由でプロビジョニングします。
$ bundle exec itamae ssh -h ${YOURHOST} -y node.yml recipe.rb
ユーザを指定する場合は-u
オプション、ポートを指定する場合は-p
オプションを使います。
プロビジョニングが完了してスケジュールが実行されると、オブストにバックアップファイルがアップロードされているはずです。 コントロールパネルでファイル一覧を表示できるので確認してみてください。
おわりに
プルリクお待ちしております!