BLOGTIMES
2013/12/09

さくらのクラウド API を使ってローカルにバックアップを取る

  sakura  sh  cli  systemmanagemant  integration 
このエントリーをはてなブックマークに追加

さくらのクラウドにはREST API*1がついていて、コントロールパネルから行える作業については、APIからも行うことができるようになっています。

クラウドはある程度多重化されているとは言っても、1つくらいはローカルにバックアップを持っておきたいもの。
今回はさくらのクラウド API をつかってローカルにイメージバックアップを取るスクリプトを書いてみました。

サーバについているディスクはそのままでは FTP できないので、一旦アーカイブを作成し、FTPを有効にしてから、ファイルを FTP 転送し、最後にアーカイブを削除するという一連の流れをスクリプト化してみました。Node.js を使うとかいろいろ方法は考えられたのですが、単純に bash で curl*2json コマンドを駆使しているだけという単純なものです。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 -V curl 7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 Protocols: tftp ftp telnet dict ldap http file https ftps Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

こんなエラーが出ます。

Warning: Transient problem: timeout Will retry in 1 seconds. 10 retries left. Throwing away 21474836480 bytes curl: (56) SSL read: error:00000000:lib(0):func(0):reason(0), errno 110 2013-12-11 01:09:06 [27790]: FTP Error: exit code -> 141

curl を自分でビルドしたら動くようになりました。うーむ。

$ ./curl -V curl 7.33.0 (x86_64-unknown-linux-gnu) libcurl/7.33.0 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp Features: AsynchDNS IDN IPv6 Largefile NTLM NTLM_WB SSL libz

2013/12/14 追記

続編として、日次でアーカイブをとるスクリプトを書いてみました


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6323
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン