さくらのクラウドのディスクをローカルにバックアップするツールを作ってみました

さくらのクラウドのディスクをローカルホストにバックアップするツールを作ってみましたので公開します。

バックアップツール Sacback

バックアップツールの名称は Sakura Cloud Backup を縮めて「Sacback」としました。

Github:

Rubygems: https://rubygems.org/gems/sacback


Sacbackは以下の一連の処理を順番に実行します。

  1. さくらのクラウド上でディスクのアーカイブを作成
  2. アーカイブをローカルホストにダウンロード
  3. さくらのクラウド上のアーカイブを削除
  4. ローカルのアーカイブファイルを圧縮

また、それぞれの処理を単独で実行することもできます。

セットアップ

まず、gemをインストールします。

$ gem install sacback

さくらのクラウドの認証情報とゾーン名を環境変数にセットしておきます。

  • SACLOUD_TOKEN: アクセス・トークン
  • SACLOUD_SECRET: アクセス・トークン・シークレット
  • SACLOUD_ZONE: ゾーン名(石狩第1: is1a, 石狩第2: is1b)

※トークンとシークレットは APIキー のものを指定します。

使い方

すべての処理を一気に実行:

$ sacback a DISK_NAME [LOCAL_DIR_PATH]

さくらのクラウド上でディスクからアーカイブを作成:

$ sacback c DISK_NAME

アーカイブをローカルホストにダウンロード:

$ sacback g ARCHIVE_ID [LOCAL_DIR_PATH]

さくらのクラウド上でアーカイブを削除:

$ sacback r ARCHIVE_ID

ローカルホストのファイルを圧縮:

$ sacback z LOCAL_DIR [FILE_NAME]

オプションや注意事項などもありますが、詳細は GitHubのREADME を見てください。

さくらのクラウドへのアクセス

さくらのクラウドへのアクセスには、主に SaklientRubyライブラリを使用しています。

ただし、Saklientにはアーカイブを削除する機能がまだ含まれていないため、その処理だけREST APIを使用しています。

Saklientが対応したら、Saklientで置き換える予定です。

※追記(2014/11/26): id:cloud_hobby さんから教えていただき、すべてSaklientで実装できました。

その他

アーカイブのダウンロードは、当初は DoubleBagFTPS で実装していたのですが、あまりに遅いため、curl コマンドを使うオプションも追加しました。

この辺はよくわからないのですが、Rubyだとこんなものなのか、もしくはFTPS実行時の注意点があるのでしょうか?

また、アーカイブのダウンロード時に、どういう訳かさくらのクラウドのコンソール上でステータスが「アップロード」と表示されてしまいます(ダウンロードはうまくいきます)。

これもまだ謎です。

こういった部分も含めてまだまだざっくりした実装ですが、改善できる部分がありましたら、Pull Request をいただけると助かります。