LoginSignup
0
0

More than 1 year has passed since last update.

Vultr APIを使ったお手軽スナップショット取得

Last updated at Posted at 2019-10-08

'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分くらい後に走らせたほうが安全でしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0