さくらのクラウドAPIを使ってみよう(1)——コマンドラインツール「sacloud」から使う
サーバを作成する
続いて、sacloud CLIを使ってサーバを作成する手順について紹介しよう。さくらのクラウドのコントロールパネルではCPUやメモリ、ディスクなどの構成をGUIで選択するだけでサーバの作成が行えたが(図6)、sacloud CLIを使ってサーバを作成する場合はサーバの作成、ネットワークインターフェイスの作成と接続、ディスクの作成と接続、ホスト名などの設定といった作業を個別に行う必要がある。
まず、「sacloud create server」コマンドでサーバの作成を行う。
$ sacloud create server zone <サーバを作成するゾーン> plan <プラン> name <サーバ名>
ここでゾーンやプランについてはIDで指定する必要がある。タブキーによる補完機能を利用すればそれぞれのID一覧を表示できるので、これを利用すると良いだろう。たとえばゾーンを指定する場合は以下のようになる。
$ sacloud create server zone 3100 ←ここでTabキーを押す 31001:is1a 31002:is1b ←候補一覧が表示される
ここで、「31001」(is1a)が石狩第一、「31002」(is1b)が石狩第二だ。また、プランについては以下のように「<メモリサイズ><コア数(3桁)>」で指定できる。
$ sacloud create server zone 310001 plan ←ここでTabキーを押す ↓候補一覧が表示される 1001:プラン/1Core-1GB 24008:プラン/8Core-24GB 48012:プラン/12Core-48GB 12003:プラン/3Core-12GB 24010:プラン/10Core-24GB 5001:プラン/1Core-5GB 12004:プラン/4Core-12GB 3001:プラン/1Core-3GB 5002:プラン/2Core-5GB 12005:プラン/5Core-12GB 3002:プラン/2Core-3GB 5003:プラン/3Core-5GB 12006:プラン/6Core-12GB 3003:プラン/3Core-3GB 5004:プラン/4Core-5GB 128012:プラン/12Core-128GB 32006:プラン/6Core-32GB 6002:プラン/2Core-6GB 16004:プラン/4Core-16GB 32008:プラン/8Core-32GB 6003:プラン/3Core-6GB 16005:プラン/5Core-16GB 32010:プラン/10Core-32GB 6004:プラン/4Core-6GB 16006:プラン/6Core-16GB 4001:プラン/1Core-4GB 64010:プラン/10Core-64GB 16008:プラン/8Core-16GB 4002:プラン/2Core-4GB 64012:プラン/12Core-64GB 2001:プラン/1Core-2GB 4003:プラン/3Core-4GB 8003:プラン/3Core-8GB 2002:プラン/2Core-2GB 4004:プラン/4Core-4GB 8004:プラン/4Core-8GB 24005:プラン/5Core-24GB 48008:プラン/8Core-48GB 8005:プラン/5Core-8GB 24006:プラン/6Core-24GB 48010:プラン/10Core-48GB 96012:プラン/12Core-96GB
たとえば、「test01」というサーバ名で石狩第一ゾーンでCPU1コア、メモリ1GBのサーバを作成する場合は以下のようになる。
$ sacloud create server zone 31001 plan 1001 name test01 POST https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server.json -> 201 Created (1/1) ~0.878sec +------------+-----------------------+ | id | 112600240728 | +------------+-----------------------+ | zone | 31001:is1a | +------------+-----------------------+ | name | test01 | +------------+-----------------------+ | tags | | +------------+-----------------------+ | plan | 1001:プラン/1Core-1GB | +------------+-----------------------+ | cpu | 1 | +------------+-----------------------+ | memory | 1024MB | +------------+-----------------------+ | status | down | +------------+-----------------------+ | hypervisor | | +------------+-----------------------+ | disk | | +------------+-----------------------+ | interface | | +------------+-----------------------+ | created at | 2014-04-13 23:20:37 | +------------+-----------------------+
次に、「sacloud create interface <サーバID>」コマンドで作成したサーバにネットワークインターフェイスを追加する。
$ sacloud create interface to server 112600240728 POST https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/interface.json -> 201 Created (1/1) ~1.302sec +-------------+---------------------+ | id | 112600240730 | +-------------+---------------------+ | mac address | 9C:A3:BA:20:75:E7 | +-------------+---------------------+ | created at | 2014-04-13 23:22:44 | +-------------+---------------------+
ネットワークインターフェイスを作成したら、その接続先を指定して接続を行う。
$ sacloud connect interface <ネットワークインターフェイスID> to switch <接続先>
<接続先>は、インターネット(共有セグメント)に接続する場合は「shared」という文字列を、仮想スイッチやルータに接続する場合はそれらのIDを指定する。たとえば先ほど作成したネットワークインターフェイスをインターネットに接続する場合、以下のようになる。
$ sacloud connect interface 112600240730 to switch shared PUT https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/interface/112600240730/to/switch/shared.json -> 200 OK (1/1) ~1.024sec +-------------+-----------------------+ | id | 112600240730 | +-------------+-----------------------+ | mac address | **:**:**:**:**:** | +-------------+-----------------------+ | ipaddress | ***.***.**.*** | +-------------+-----------------------+ | switch | 112600096343:スイッチ | +-------------+-----------------------+ | created at | 2014-04-13 23:22:44 | +-------------+-----------------------+
続いて、ディスクを作成する作業を行う。空のディスクを作成するには、「sacloud create disk」コマンドを使用する。
sacloud create disk zone <ゾーンID> plan <プランID> size <ディスク容量> type <接続タイプ> name <ディスク名>
<プランID>は標準プラン(HDD)の場合2、SSDプランの場合4となる。また、ディスク容量はGB単位で指定する。ただし、任意の容量を選択できるわけではなく、サービス仕様・料金で提示されているものから選択する形になる。たとえばSSDプランの場合20/100/250/500のいずれか、標準プランの場合は40/60/80/100/250/500/750/1024/2048/4096から選択する。
たとえば20GBのSSDを「disk001」という名前で追加する場合、以下のようになる。
$ sacloud create disk zone 31001 plan 4 size 20 type virtio name disk001 POST https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/disk.json -> 201 Created (1/1) ~11.073sec +--------------+---------------------+ | id | 112600240754 | +--------------+---------------------+ | name | disk001 | +--------------+---------------------+ | tags | | +--------------+---------------------+ | availability | available | +--------------+---------------------+ | size | 20480MB | +--------------+---------------------+ | created at | 2014-04-14 00:01:18 | +--------------+---------------------+
また、アーカイブからディスクをコピーして新たなディスクを作成することもできる。この場合、「sacloud copy archive」コマンドを使用する。
sacloud copy archive <アーカイブID> to disk
記事執筆時点で選択できるアーカイブは以下のとおりだ。
112400500863:FreeBSD_8.3_64bit_(基本セット) 112400500864:FreeBSD_8.3_64bit_(基本セット) 112500127179:Vyatta_Core_6.5R1_32bit_(6rd対応) 112500213364:Ubuntu_Server_13.04_64bit_(基本セット) 112500213598:Ubuntu_Server_13.04_64bit_(基本セット) 112500459149:Ubuntu_Server_12.04.3_LTS_64bit_(基本セット) 112500459481:Ubuntu_Server_12.04.3_LTS_64bit_(基本セット) 112500489806:Ubuntu_Server_13.10_64bit_(基本セット) 112500489823:Ubuntu_Server_13.10_64bit_(基本セット) 112500513592:CentOS_5.10_64bit_(基本セット) 112500513643:CentOS_5.10_64bit_(基本セット) 112500570402:CentOS_6.5_64bit_(基本セット) 112500570421:CentOS_6.5_64bit_(基本セット) 112600032371:Windows_Server_2008_R2_Datacenter_Edition 112600051011:Windows_Server_2008_R2_for_RDS 112600051846:Windows_Server_2012_R2_Datacenter_Edition 112600051958:Windows_Server_2008_R2_for_RDS(MS_Office付) 112600078947:FreeBSD_9.2_64bit_(基本セット) 112600078948:FreeBSD_9.2_64bit_(基本セット) 112600078993:FreeBSD_10.0_64bit_(基本セット) 112600078994:FreeBSD_10.0_64bit_(基本セット) 112600098190:Debian_GNU/Linux_6.0.9_64bit_(基本セット) 112600098191:Debian_GNU/Linux_6.0.9_64bit_(基本セット) 112600098267:Debian_GNU/Linux_7.4.0_64bit_(基本セット) 112600098303:Debian_GNU/Linux_7.4.0_64bit_(基本セット) 112600128302:Scientific_Linux_6.5_64bit_(基本セット) 112600128304:Scientific_Linux_6.5_64bit_(基本セット)
ディスクを作成したら、続いて「sacloud attach」コマンドでサーバにディスクを接続する。
$ sacloud attach disk 112600240754 to server 112600240728 PUT https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/disk/112600240754/to/server/112600240728.json -> 200 OK (1/1) ~0.869sec { success: true, is_ok: true }
また、アーカイブからコピーしてディスクを作成した場合、「sacloud modify disk」コマンドでパスワードやホスト名といった情報を変更できる。
sacloud modify disk <ディスクID> password <パスワード> hostname <ホスト名>
インターネット(共有セグメント)にサーバを直接接続している場合、IPアドレスの情報は自動的に設定されるので明示的な指定は不要だ。スイッチやルータに接続している場合はIPアドレスなどを明示的に設定する必要があるが、こちらは以下のようにして設定できる。
sacloud modify disk <ディスクID> password <パスワード> hostname <ホスト名> ipaddress <IPアドレス> prefix <プレフィックス> gateway <デフォルトゲートウェイ>
サーバの起動/停止
サーバのセットアップが完了したら、「sacloud start server」コマンドでサーバを起動できる。
sacloud start server <サーバID>
また、サーバを停止させるには「sacloud stop server」コマンドを実行する。
sacloud stop server <サーバID>
バッチ処理で効果を発揮するsacloud CLI
このように、sacloud CLIでサーバを作成する場合、コントロールパネルでの処理よりもやや手順が増えて複雑になってしまう。しかし、複数台のサーバを用意する場合など、繰り返し同じような処理を行う場合はsacloud CLIとシェルスクリプトを組み合わせることでより容易に作業を進めることが可能だ。
今回はサーバの作成や起動/停止といった作業についてのみ紹介したが、そのほかにもsacloud CLIにはアーカイブ関連やスイッチ関連、ISOイメージ関連、SSH公開鍵関連などの処理を行うコマンドが実装されている。詳しくはsacloud CLIのGetting started Guideを参照してほしい。
curlでさくらのクラウドAPIを実行する
最後に、捕捉としてHTTPクライアントであるcurlを使ってさくらのクラウドAPIを利用する例も紹介しておこう。さくらのクラウドAPIの動作をチェックしたり、sacloud CLI経由では呼び出せないごく一部のAPIを簡便に利用したい場合などに知っておくと便利だ。
GETリクエストの場合
GETリクエストでリクエストを行うAPIの場合、以下の形でAPIを呼び出せる。
curl -H 'X-Sakura-API-Beautify:1' --user "<アクセストークン>:<アクセストークンシークレット>" https://secure.sakura.ad.jp/cloud/zone/<ゾーン>/api/cloud/1.1/<APIのパス>
ここで、「-H 'X-Sakura-API-Beautify:1'」オプションは出力を人間が見やすい形式にフォーマットして出力させるためのオプションで、出力をスクリプトなどで処理する場合は指定は不要だ。また、<ゾーン>については石狩第一の場合「is1a」、第二の場合「is1b」となる。
たとえば、「/server」APIを呼び出してサーバ一覧を取得する場合、以下のようになる。
$ curl -H 'X-Sakura-API-Beautify:1' --user "<アクセストークン>:<アクセストークンシークレット>" https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server { "From": 0, "Count": 12, "Total": 12, "Servers": [ { "Index": 0, "ID": "112500152369", "Name": "centos 48-120", "HostName": "localhost", "Description": "", "ServiceClass": "cloud\/plan\/1", : :
また、POST形式でリクエストを送信する場合は以下のようになる。
$ curl -H 'X-Sakura-API-Beautify:1' --user "<アクセストークン>:<アクセストークンシークレット>" -X POST -d '<送信するパラメータ>' https://secure.sakura.ad.jp/cloud/zone/<ゾーン>/api/cloud/1.1/<APIのパス>
GET形式でのリクエストとの違いは、POST形式を指定する「-X POST」オプションと、送信するリクエストを指定する「-d '<送信するパラメータ>'」オプションの指定だ。<送信するパラメータ>では、JSON形式で送信するパラメータを指定する。
たとえば、「*[http://developer.sakura.ad.jp/cloud/api/1.1/disk/#post_disk /disk」APIを利用してディスクを作成する場合、以下のようになる。
$ curl -H 'X-Sakura-API-Beautify:1' --user "<アクセストークン>:<アクセストークンシークレット>" -X POST -d '{"Disk":{"Zone":{"ID":31001},"Plan":{"ID":4},"SizeMB":20480,"Connection":"virtio","Name":"disk010"}}' https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/disk
ここでは、パラメータとして以下のようなデータを与えている。これについてはAPIのドキュメントを参照して欲しい。
{ "Disk": { "Zone": { "ID": 31001 }, "Plan": { "ID": 4 }, "SizeMB" :20480, "Connection": "virtio", "Name":"disk010" }
また、さくらのクラウドAPIではそのほかDELETEおよびPUTリクエストが利用されるが、それぞれ下記のような形で実行が可能だ。
DELETEメソッドの場合: curl -H 'X-Sakura-API-Beautify:1' --user "<アクセストークン>:<アクセストークンシークレット>" -X DELETE https://secure.sakura.ad.jp/cloud/zone/<ゾーン>/api/cloud/1.1/<APIのパス>
PUTメソッドの場合: $ curl -H 'X-Sakura-API-Beautify:1' --user "<アクセストークン>:<アクセストークンシークレット>" -X PUT -d '<送信するパラメータ>' https://secure.sakura.ad.jp/cloud/zone/<ゾーン>/api/cloud/1.1/<APIのパス>