さくらのクラウドにはREST API*1がついていて、コントロールパネルから行える作業については、APIからも行うことができるようになっています。
クラウドはある程度多重化されているとは言っても、1つくらいはローカルにバックアップを持っておきたいもの。
今回はさくらのクラウド API をつかってローカルにイメージバックアップを取るスクリプトを書いてみました。
サーバについているディスクはそのままでは FTP できないので、一旦アーカイブを作成し、FTPを有効にしてから、ファイルを FTP 転送し、最後にアーカイブを削除するという一連の流れをスクリプト化してみました。Node.js を使うとかいろいろ方法は考えられたのですが、単純に bash で curl*2 とjson コマンドを駆使しているだけという単純なものです。API ということでちょっと取っつきづらいイメージがありましたが、API リファレンスには curl コマンドのサンプルもついているので楽ちんでした。
† 全てのディスクのイメージを取るスクリプト
実行にあたっては、APIキー(ACCESS TOKEN と ACCESS SECRET) が必要になります。
取得方法についてはAPIキーの作成方法*3を参考にしてください。
起動すると全てのディスクのバックアップをローカルに取ります。
エラーハンドリングはちょっと甘いところがありますが、たまに使うくらいなら大丈夫でしょう。
† 2015/2/3 追記
さくらのクラウドの中の人から以下のツッコミをいただいたので、スクリプトを修正しました。
スクリプト内:95~98行の部分で’available’となるまで繰り返す仕様となっておりますが、アーカイブ作成時に’failed’(失敗)となった場合に無限ループに陥る事象が発生しております。当該箇所にて無限ループとならないよう繰り返し回数の上限を設けていただくなどの修正や、記事中に当該箇所が無限ループにつながることを注意喚起をいただけませんでしょうか?
ソースコートは GitHub に移動していますので、以下からご利用ください。
† 2013/12/10 追記
転送中のステータスが表示されるようにアップデート。
† 2013/12/12 追記
curl の引数に --keepalive-time 60 を追加 ( curlのバージョンによっては上手く動かないかも)。
CentOS5.x に付属のcurl ではなぜかうまく動きませんでした。
こんなエラーが出ます。
curl を自分でビルドしたら動くようになりました。うーむ。
† 2013/12/14 追記
続編として、日次でアーカイブをとるスクリプトを書いてみました。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6323
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。