さくらのクラウドAPIを使ってみよう(1)——コマンドラインツール「sacloud」から使う

サーバを作成する

 続いて、sacloud CLIを使ってサーバを作成する手順について紹介しよう。さくらのクラウドのコントロールパネルではCPUやメモリ、ディスクなどの構成をGUIで選択するだけでサーバの作成が行えたが(図6)、sacloud CLIを使ってサーバを作成する場合はサーバの作成、ネットワークインターフェイスの作成と接続、ディスクの作成と接続、ホスト名などの設定といった作業を個別に行う必要がある。

図6 コントロールパネルのサーバ追加画面

 まず、「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のパス>

おしらせ