- blogs:
- cles::blog

さくらのクラウド API を使って日次でアーカイブをとるスクリプトを書いてみた





先日の「さくらのクラウド API を使ってローカルにバックアップを取る」の続き。
ローカルにバックアップを引っ張ってくるというのも大事なことではあるんですが、通常の運用としては日次でディスクのアーカイブを自動的に取得しておいて、そこから復旧というパターンの方がお手軽なわけです。現状のさくらのクラウドのコントロールパネルでは自動的にアーカイブを作成する機能はありませんが、自動アーカイブについてはOSC2013 Kansai@Kyotoで触れられていた*1ので、後々標準になるものを今さら作るまでもないかなと思っていました。
ところが、先日のバックアップスクリプトを書いたら API の使い方がいろいろ分かってしまったので、ついでに日次アーカイブを取るスクリプトを書いてみました。
† さくらのクラウド日次アーカイブスクリプト
起動すると全てディスクのアーカイブを作成します。作成されたアーカイブの名前は (ディスク名)-YYYYMMDD 、説明は daily autobackup となるので、手動で取った他のアーカイブと区別できます。また、最新以外のアーカイブについては自動的に削除されます(説明文と元ディスクIDによってアーカイブの情報を検索して、該当するものだけを削除しています。手動で作成したアーカイブを削除することはありません。)。このスクリプト cron 等にしかけて、日次で実行すると毎日アーカイブを作成して、古いものは自動的に消えるという運用ができるはずです。
前回と同じく Token と Secret は予め取得しておいてください。
相変らずエラーハンドリングが甘いので、実際に仕込む前にもうちょっとそのあたりを直した方がいいかも。
† 2015/2/3 追記
さくらのクラウドの中の人から以下のツッコミをいただいたので、スクリプトを修正しました。
スクリプト内:95~98行の部分で’available’となるまで繰り返す仕様となっておりますが、アーカイブ作成時に’failed’(失敗)となった場合に無限ループに陥る事象が発生しております。当該箇所にて無限ループとならないよう繰り返し回数の上限を設けていただくなどの修正や、記事中に当該箇所が無限ループにつながることを注意喚起をいただけませんでしょうか?
ソースコートは GitHub に移動していますので、以下からご利用ください。
† 実行結果
こんな感じで実行できるはずです。
- *1: VPSも良いけど、クラウドもね!~さくらの社長と所長が教える、How to 「さくらのクラウド」~,p.25参照(PDF/2.3MB)
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6333
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
日次アーカイブスクリプト、利用させていただいています。
ありがとうございます。
get_old_archive_list()
ですが、SourceDiskがnull(例えば、アーカイブの元となるサーバーとディスクを削除したけど、アーカイブだけ残している、というケース)の場合、JSONtoolsで
「TypeError: Cannot read property 'ID' of null」
のエラーとなり、古いアーカイブのリストが取得できません。
その結果、日次アーカイブスクリプトを実行しても、古いアーカイブが削除されず残ってしまう、という現象が発生します。
get_old_archive_list()
で、
&& this.SourceDisk.ID == '${1}
の部分を
&& this.SourceDisk != null && this.SourceDisk.ID == '${1}
とするとよいようです。
ありがとうございます。
早速取り込ませていただきました。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112851)
3 . 年次の人間ドックへ(112293)
4 . 2023 年分の確定申告完了!(1つめ)(111858)
5 . 三菱鉛筆がラミーを買収(111736)