概要
curlでさくらのクラウドAPIを叩いて作成済みのサーバーの起動・再起動・停止をしたくなったので記事に起こします。
できるようになること
- curlでさくらのクラウドAPIを叩き、作成済みの起動状態の確認、およびサーバの起動・再起動・停止ができる
必要なもの
- curlが実行できるターミナル
- Windows, Mac, LinuxどのOSでもだいたい実行できると思います。できない場合は環境を用意してください。
- アクセストークン、アクセストークンシークレット
- さくらのクラウドホームからAPIキーを作成し、上記の2つを控えておいてください。後ほど使用します。
- なお、作成APIキーを作成する際はアクセスレベルを
電源操作 or 設定編集 or 作成・削除
に変更してください。この変更がないとアクセスできないです。 - 詳しい作成方法は下のリンクから
curlサンプルコマンド
今回は私が使用している石狩第1(is1a)
のサーバーに対してコマンドを実行します。
アクセストークン
、アクセスシークレットキー
、serverid
についてはご自身のものに置き換えてください。
すべて公式のサンプルを引用しているので詳細は公式ドキュメントを参照してください。
起動状態を取得 GET /server/:serverid/power
電源操作をする前に状態を把握することはとても大切です。
間違えて起動や停止するとサービスに大きな影響を与える可能性があるので。
コンパネから状態を確認できていれば問題ないと思いますが、そうでなければこちらを実行をおすすめします。
# サーバーの起動状態を取得
curl --user "Access Token":"Access Token Secret"\
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/:serverid/power
実行結果
これは私のリソースですがInstance.Status
がdown
になっているので停止していることが確認できました。
他にもdown
になる前はcleaning
(down
の前に必ずなる状態)になっていたことや、その変更日時も確認できます。
{
"Instance": {
"Server": {
"ID": "113301645700"
},
"Status": "down",
"BeforeStatus": "cleaning",
"Warnings": "none",
"WarningsValue": 0,
"StatusChangedAt": "2021-09-13T13:30:14+09:00",
"MigrationProgress": null,
"MigrationSchedule": null,
"MigrationAllowed": null,
"ModifiedAt": "2021-09-13T13:30:14+09:00",
"Host": null,
"CDROM": null
},
"is_ok": true
}
起動 PUT /server/:serverid/power
停止状態のサーバーを起動するコマンドです。停止の状態でコマンドを実行してください。
# サーバ起動のリクエストサンプル
curl --user "Access Token":"Access Token Secret" -X PUT -d '' \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/:serverid/power
実行結果
{"Success":true,"is_ok":true}
当然ですが、起動後にもう一度このコマンドを叩くと409 Conflict
のエラーになります。
{
"is_fatal": true,
"serial": "91c28d78a832f33f6ab2b6d5b51f0f37",
"status": "409 Conflict",
"error_code": "conflict",
"error_msg": "要求された操作を行えません。現在の対象の状態では、この操作を受け付けできません。"
}
再起動(強制リブート) PUT /server/:serverid/reset
実際のコントロールパネルでは再起動という文字は無く、強制リブートという文字になっています。
なのでWindowsやMac、LinuxなどのGUIから行う再起動ではなく、ハードウェアのリセットボタンをポチッと押す感じのものですね。
安全に行いたい方はOSにログインしてからreboot
や再起動ボタンをGUIから操作するのが良さそうです。
なんでもいいからAPIから再起動させたい人はこれでおkです。
# サーバ再起動のリクエストサンプル
curl --user "Access Token":"Access Token Secret" -X PUT -d '' \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/:serverid/reset
実行結果
{"Success":true,"is_ok":true}
コンパネでの挙動
コントロールパネルで表示を更新を連打して確認しているとcleaning → down
、down → up
の流れで再起動していました。
これも実際のハードウェアと同様の挙動ですね。
停止(シャットダウン) DELETE /server/:serverid/power
このコマンドはOSのシャットダウンと同じ挙動で、OS内からシャットダウンを実行したものと同じでした。
正常にシャットダウンさせたい場合はこのコマンドを叩くとよさそうですね。
# シャットダウン
curl --user "Access Token":"Access Token Secret" -X DELETE -d '' \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/:serverid/power
実行結果
{"Success":true,"is_ok":true}
これもサーバー同様に起動しているものに実行してください。でないとエラーになります。
{
"is_fatal": true,
"serial": "ea3cb6eb1ff1b10bf15258c5a526993d",
"status": "409 Conflict",
"error_code": "conflict",
"error_msg": "要求された操作を行えません。現在の対象の状態では、この操作を受け付けできません。"
}
停止(強制停止) DELETE /server/:serverid/power
コンパネ上には強制停止というボタンがあり、このAPIを実行しているみたいです。
実際のハードウェアに例えると電源長押しって感じですかね。どうしてもサーバーが落ちないときに実行しましょう。
# 強制停止
curl --user "Access Token":"Access Token Secret" -X DELETE -d '{Force:true}' \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/:serverid/power
実行結果
{"Success":true,"is_ok":true}
強制停止の場合は電源が停止の状態で実行しても上記と同じ成功のレスポンスが返ってきました。
まとめ
これでcurlからサーバーの起動状態を操作できるようになったと思います。
curlで実行するのはそこまで実用性高くはないと思いますので、挙動の確認とかで参考になれば幸いです。