'2023/03/13追記 ここから
VULTR API v1は廃止間近のため、v2版を作成しました。
Vultr APIを使ったお手軽スナップショット取得 API v2版
今後はこちらを参照してください。
'2021/10/8追記 ここから
長いことスナップショット無料だったVultrですが、一部のユーザーがバカスカ使って割が合わなくなったようで、'2021/10/以降は $0.05/GB/month の金額が課金されることになりました。AWSと同額ですね。
自分が使っているインスタンスではスナップショット1本10GB程度なので、この記事のように3本残す設定にすると $1.5/month 程度の追加支出になります。
'2021/10/8追記 ここまで
個人的お気に入りVPSのVultrは、AWSほど作り込まれてはいませんがAPIによるコントロールも可能で、curlによる呼び出しだけでOSとアプリケーションを指定して仮想マシンを立てたりファイアウォールを設定することも可能です。
以下にAPIのリファレンスがあります。
Vultr API
Vultr Metadata API
ここでは、自分がcronに仕掛けて実用しているインスタンスのSSDのスナップショット取得、整理のシェルスクリプトを公開しておきます。curl,jqがインストールされている前提です。
なお、スクリプト中の"YOUR_VULTR_API_PERSONAL_ACCESS_TOKEN"は各自のアクセストークンに置き換えてください。
Vultrの管理画面の右上、アカウント名が表示されている箇所をクリックして出るドロップダウンから「API」を選択して表示されたページに、"Personal Access Token"の項目があります。ここに表示されているのが各自のアクセストークンです。
また、このページ下部には"Access Control"の欄があり、APIを発行できるIPアドレスを制限しています。ここにスクリプトを動かすインスタンスのIPを追加しておきましょう(重要)。
スナップショット取得
#!/bin/bash
METADATA='http://169.254.169.254'
API='https://api.vultr.com'
KEY='YOUR_VULTR_API_PERSONAL_ACCESS_TOKEN'
echo '-------------------'
date
SERVERID=$(curl -sS $METADATA/v1.json|jq -r .instanceid)
echo $SERVERID
EPOCH=$(perl -e 'print time();')
echo $EPOCH
SNAPSHOTID=$(curl -sS -H "API-Key: ${KEY}" ${API}/v1/snapshot/create --data "SUBID=${SERVERID}" --data "description=${SERVERID}-${EPOCH}" |jq .)
echo $SNAPSHOTID
curl -sS -H "API-Key: ${KEY}" ${API}/v1/snapshot/list |jq -r '.[]|[.SNAPSHOTID,.description]|@tsv' |grep $SERVERID |sort
スナップショット整理
#!/bin/bash
METADATA='http://169.254.169.254'
API='https://api.vultr.com'
KEY='YOUR_VULTR_API_PERSONAL_ACCESS_TOKEN'
SNAP_MAX=3
echo '-------------------'
date
SERVERID=$(curl -sS ${METADATA}/v1.json|jq -r .instanceid)
echo $SERVERID
LIST_REMOVE=$(curl -sS -H "API-Key: ${KEY}" ${API}/v1/snapshot/list \
|jq -r '.[]|[.description,.SNAPSHOTID]|@tsv'|grep $SERVERID \
|sort|awk '{print $2}'|head -n-${SNAP_MAX})
echo "[ $LIST_REMOVE ]"
for SNAPID in $LIST_REMOVE; do
curl -sS -H "API-Key: ${KEY}" ${API}/v1/snapshot/destroy --data "SNAPSHOTID=${SNAPID}"
done
シェル変数のSNAP_MAXが残すスナップショットの本数です。
Vultrでは今の所スナップショットは無料ですが、無限に溜め込み続けてサーバーリソースを圧迫するのも悪いので最新の数本以外削除するようにしています。
なお、感覚的に一瞬で終わるAWS EBSのスナップショットなどとは異なり、スナップショットの取得に$6インスタンスの32GB SSDで20~30分くらいかかる様子なので(AWSのスナップショット取得の速さが異常)、スナップショット整理は取得の30分くらい後に走らせたほうが安全でしょう。