さくらのクラウドもAPIを公開しているので諸々の作業をプログラマブルに制御できます。
オペミスでサーバが大変なことになった時のためにディスクのアーカイブ化(バックアップ)するためのプログラムを書いたとしても、実行するための環境をクラウドの上に構築するのもいいのですが、その環境を維持運営するのはちょっと面倒。
最近流行りのサーバレスの環境で完結させるためにAWS Lambdaを使ってみました。
Lambdaは最近Pythonに対応という話が出ていたことと、curlの呼び出しに対応しているという噂を掴んたので簡単に試すには便利かなと。
ちょうど、さくらのクラウドのAPIのサンプルはcurlでサンプルコードが公開されているので、今回はコピペでやってみました;-p
サンプルコードはこちら。
https://gist.github.com/dalice/40544c999788832531c2
import commands
import datetime
def _(cmd):
return commands.getoutput(cmd)
def lambda_handler(event, context):
access_token = "access_token"
access_token_secret = "access_token_secret"
zone ="tk1v" #is1a:石狩第1ゾーン,is1b:石狩第2ゾーン,tk1a:東京第1ゾーン,tk1v:サンドボックス
disk_id = "DISK ID"
days = datetime.datetime.today().strftime("%Y-%m-%d")
cmds ='''curl --user "%s":"%s" -X POST -d '{"Archive":{"Name":"%s","SourceDisk":{"ID":"%s"}}}' https://secure.sakura.ad.jp/cloud/zone/%s/api/cloud/1.1/archive'''
print _(cmds % (access_token,access_token_secret,'DiskbackUP_' + days,disk_id,zone))
こちらをAWS LambdaにPythonランタイムで登録。
コードの一部を編集する必要があるので諸々準備。
まずコード中に書かれている「access_token」 と「access_token_secret」 をクラウドのコントロールパネルのAPIキーから発行します。
次にバックアップしたいディスクのリソースIDとディスクのあるゾーン情報を確認します。
今回はSandboxなので「zone」のところに”tk1v”と入れています。それ以外のゾーンの場合にはコメントにも書いているゾーンを記載します。
「disk_id」の部分にはディスクのリソースIDを記載します。
バックアップしたいディスクとゾーンの情報は揃えるようにしてください。
いつの間にかLambdaがスケジュール実行に対応していたので、Schedule expressionに「1 day」を指定。これでうまく動くと一番上の画像のように毎日どっかのタイミングで指定したディスクを対象としたアーカイブ処理が動きます。
cron記法でも実行時間の記述ができるようなので厳密に処理開始を指定することも可能です。
ね、簡単でしょ。
今回はPythonからOS上のcurlコマンドを呼び出すという邪道なことしましたが、実際にはピュアPythonで記述すればもっとゴニョゴニョできると思います。
サーバにつながっているディスクの一覧を抜き出して一気にアーカイブ作成を行うとか結構実用的な気がします。