こんにちは、UOZUです!
さくらのVPSは、OS再インストールも簡単で検証環境として使いやすいですが、電源操作のたびに会員メニューへログインするのは少し手間に感じることがあります。
今回は、VPSコントロールパネルで発行できるAPIキーを利用して、curlからVPSサーバーの電源状態確認、シャットダウン、起動を実行してみます。

APIキー発行まで
APIキーの発行・利用には、ロールの作成を行い、ロールをAPIキーに設定する必要があります。進めて行きましょう。
ロールの作成
まずは、VPS管理画面のAPIキー管理に進みましょう。+ロールの追加が表示されるはずですので、クリックしてロールを登録しましょう。

続けて、ロールの名前を決めましょう。今回はOS再起動とします。

続けてサーバーの再起動に必要な権限をロールに設定します。
デフォルトではすべての権限が許可されていますが、サーバーの電源操作に関わる操作のみに関わる操作のみ実施したいので、許可する権限を選択するを選び、サーバー情報一覧を取得する、サーバーの電源状態を取得する、サーバーを起動する、サーバーをシャットダウンする、サーバーを強制再起動するの5つを設定します。

あとはロールを追加をクリックし、ロールの作成は完了です。


ロールの追加が完了すると、ロールの一覧にOS再起動が表示されるはずです。
APIキーの追加
では続けて、OS再起動のロールが利用可能なAPIキーを発行します。APIキー管理、APIキーのタブをクリックし、APIキー一覧の画面まで移動しましょう。その後+APIキーの追加をクリックしましょう。

APIキーに設定するロール、名前の決定画面が出てきますので、APIキーに利用するロールには先に設定したOS再起動を、名前はOS再起動APIキーとしておきます。設定が出来たらAPIキーの追加をクリックし、APIキーの発行に進みます。

次の画面で実際のAPIキーが表示されるので、APIキーをコピーしておきましょう!

コマンドでAPIを実行
では続けてAPIキーを利用してサーバーの停止・起動を実施します。
サーバー情報一覧の取得
まずサーバー情報一覧を取得してみます。変数にAPIキーを設定しておきます。
$ export SAKURA_VPS_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxx'
マニュアルに沿って curl で実施してみます。
$ curl -sH "Authorization: Bearer $SAKURA_VPS_TOKEN" \
-H 'Content-Type: application/json' \
'https://secure.sakura.ad.jp/vps/api/v7/servers'|jq .
サーバーID("id": zzzzzzzz)、電源の状態("power_status": "power_on")が取得できましたね。
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": zzzzzzzz,
"name": "ishikari.uozu",
"description": "",
"contract": {
"plan_code": 3440,
"plan_name": "さくらのVPS(v5) 2G IK01 ストレージ変更オプション付き",
"service_code": "yyyyyyyyyyyy"
},
"cpu_cores": 3,
"memory_mebibytes": 2048,
"storage": [
{
"port": 0,
"type": "ssd",
"size_gibibytes": 200
}
],
"zone": {
"code": "is1",
"name": "石狩第1"
},
"options": [],
"version": "v5",
"ipv4": {
"address": "203.0.113.189",
"netmask": "255.255.254.0",
"gateway": "203.0.113.1",
"nameservers": [
"133.242.0.3",
"133.242.0.4"
],
"hostname": "ik1-xxx-xxxxxx.vs.sakura.ne.jp",
"ptr": "ik1-xxx-xxxxxx.vs.sakura.ne.jp"
},
"ipv6": {
"address": "2001:db8:102:2120:153:120:7:189",
"prefixlen": 64,
"gateway": "fe80::1",
"nameservers": [
"2001:db8::1"
],
"hostname": "xxx-xxxxxx.v6.sakura.ne.jp",
"ptr": "xxx-xxxxxx.v6.sakura.ne.jp"
},
"power_status": "power_on",
"service_type": "linux",
"service_status": "in_use",
"migration_status": null
}
]
}
指定したサーバーの電源状態を取得
サーバーIDを指定することで、サーバの電源状態のみを確認できます、
$ curl -H "Authorization: Bearer $SAKURA_VPS_TOKEN" \
-H 'Content-Type: application/json' \
'https://secure.sakura.ad.jp/vps/api/v7/servers/zzzzzzzz/power-status'
{"status":"power_on"}
サーバーの停止(シャットダウン)
では続けてシャットダウンをしてみます。
curl -X POST -H "Authorization: Bearer $SAKURA_VPS_TOKEN" \
-H 'Content-Type: application/json' \
'https://secure.sakura.ad.jp/vps/api/v7/servers/zzzzzzzz/shutdown'
$ curl -H "Authorization: Bearer $SAKURA_VPS_TOKEN" \
-H 'Content-Type: application/json' \
'https://secure.sakura.ad.jp/vps/api/v7/servers/zzzzzzzz/power-status'
{"status":"power_off"}

VPSコンソール画面からも、サーバーが停止していることを確認できました。
サーバーの起動
今度はサーバーを起動してみます。
curl -X POST -H "Authorization: Bearer $SAKURA_VPS_TOKEN" \
-H 'Content-Type: application/json' \
'https://secure.sakura.ad.jp/vps/api/v7/servers/zzzzzzzz/power-on'
$ curl -H "Authorization: Bearer $SAKURA_VPS_TOKEN" \
-H 'Content-Type: application/json' \
'https://secure.sakura.ad.jp/vps/api/v7/servers/zzzzzzzz/power-status'
{"status":"power_on"}

起動も問題なく完了しました。
さいごに
今回は、さくらのVPS APIを利用して、サーバーの電源状態確認、シャットダウン、起動を実行してみました。
APIキーとロールを用意しておけば、会員メニューに都度ログインしなくても、curlなどのコマンドからVPSの電源操作を行えます。検証環境の停止・起動や、定型作業の自動化を行いたい場合に便利な機能だと感じました。
一方で、APIキーはサーバー操作が可能な重要な認証情報です。利用する権限は必要最小限に絞り、キーの保管や取り扱いには十分注意する必要があります。
さくらのVPSをスクリプトや外部ツールから操作したい場合は、APIの活用も検討してみるとよさそうです。
さいごまでお読みいただき、ありがとうございました!


