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

コマンドラインツール「sacloud CLI」を使う

 sacloud CLIはさくらインターネットが開発して提供しているツールで、Node.jsおよびJavaScriptで実装されている。MITライセンスで公開されているので、これをベースに独自にカスタマイズすることもできる。また、使い方などのドキュメントは日本語で公開されている。

 Node.jsはWindowsおよびMac OS X、Linux、SunOSなどで動作する。sacloud CLIの動作環境については明示されていないが、すべてプラットフォーム非依存のJavaScriptで実装されているので、これらすべてのプラットフォームで動作すると思われる。本記事ではLinuxおよびMac OS X環境での動作を確認している。

sacloud CLIのインストール

 sacloud CLIを利用するには、Node.jsが必要だ。Node.jsはNode.jsのWebサイトで公開されており、WindowsおよびMac OS X、Linux、SunOS向けのバイナリパッケージとソースコードが提供されている。プラットフォームに応じたインストーラもしくはパッケージをダウンロードし、インストールしておこう(図2)。

図2 Node.jsのダウンロードページ
図2 Node.jsのダウンロードページ

 また、sacloud CLIはNode.js向けのアプリケーション/ライブラリパッケージ管理システムであるnpmで配布されている。GitHub上でも配布されているが、通常はnpmを使ってインストールすることをおすすめする。

 npmを使ってsacloud CLIをインストールするには、root権限で次のようにnpmコマンドを実行する。

# npm install -g sacloud

 すると、sacloud CLI本体および依存するライブラリがダウンロードされインストールされる。このとき、sacloud CLIは/usr/bin/sacloudとしてインストールされる。

 また、root権限がない場合、もしくは/usrディレクトリ以下にsacloud CLIをインストールしたくない場合は、sacloud CLIをインストールしたいディレクトリで以下のように実行すれば良い。

$ npm install sacloud

 この場合、npmコマンドを実行したディレクトリ以下の./node_modules/.binディレクトリ内にsacloudコマンドがインストールされる。このとき、フルパス指定無しでsacloudコマンドを実行できるようaliasコマンドなどで設定しておく必要がある。

alias sacloud="<npmコマンドを実行したディレクトリ>/node_modules/.bin/sacloud"

APIトークンの取得

 さくらのクラウドAPIを使用する場合、認証情報として「アクセストークン(Access Token)」および「アクセストークンシークレット(Access Token Secret)」というものが必要だ。アクセストークンがユーザー名、アクセストークンシークレットがパスワードに相当する扱いとなる。

 これらの情報は、さくらのクラウドコントロールパネルで取得できる。コントロールパネルにログインし、右上に表示されるユーザー名をクリックするとメニューが表示される(図3)。

図3 右上のユーザー名をクリックし、「設定」を選択する
図3 右上のユーザー名をクリックし、「設定」を選択する

 そこで「設定」をクリックするとアカウントに対する設定画面が表示されるので、左側のメニュー内の「APIキー」をクリックし、続けて「追加」ボタンをクリックする(図4)。

図4 「APIキー」を選択し、「追加」をクリックする
図4 「APIキー」を選択し、「追加」をクリックする

 すると「APIキーを追加」ダイアログが表示されるので、ここでキーの名前と説明を入力し「追加」をクリックする(図5)。これらはキーを識別するためだけに使われるので、適当なもので構わない。

図5 キーの名前と説明を入力し「追加」をクリックする
図5 キーの名前と説明を入力し「追加」をクリックする

 APIキーを作成すると、作成したキーがリストに追加されるので、それをダブルクリックするとアクセストークンおよびアクセストークンシークレットを確認できる(図6)。

図6 作成したキーをダブルクリックするとアクセストークンおよびアクセストークンシークレットが表示される
図6 作成したキーをダブルクリックするとアクセストークンおよびアクセストークンシークレットが表示される

 なお、アクセストークンおよびアクセストークンシークレットがあれば、そのアカウントで利用しているサービスのほぼすべての情報にアクセスでき、さらにサーバの削除や作成といった操作も行えてしまう。これら情報の管理には十分注意したい。

 また、環境によってはsacloudが備えている自動補完機能の設定が必要だ。これが設定されていない場合、sacloudコマンドの実行時に以下のようなメッセージが表示される。

ATTENTION: Your environment doesn't support auto-complete.
To enable it, try running the following commands:
  node sacloud.js --install >> /home/hylom/.bashrc
  source /home/hylom/.node-completion/sacloud.js

 この場合、メッセージに従ってsacloudコマンドを--installコマンド付きで実行し、出力される設定を~/.bashrc内に追加すれば良い。

$ sacloud --install >> ~/.bashrc

 環境によっては~/.bashrcではなく~/.profileや~/.bash_loginに追加するようメッセージが表示される場合もあるので、指示に従ってコマンドを実行して欲しい。

エンドポイントおよびアクセストークンを登録する

 sacloud CLIを利用するには、まずさくらのクラウドAPIを利用するためのURLと、アクセストークンを登録する必要がある。これらの作業は、「sacloud config」コマンドで実行する。

 まずURLの登録だが、さくらのクラウドのゾーンごとにこのURLは異なる。APIドキュメントに記載されているが、第1ゾーンの場合は「https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/」、第2ゾーンの場合は「https://secure.sakura.ad.jp/cloud/zone/is1b/api/cloud/1.1/」となる。使用しているゾーンに応じて、以下のようにしてこれらURLを登録する。

第1ゾーンの場合:
$ sacloud config --apiRoot="https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/"
第2ゾーンの場合:
$ sacloud config --apiRoot="https://secure.sakura.ad.jp/cloud/zone/is1b/api/cloud/1.1/"

 続いて、アクセストークン情報を登録する。

$ sacloud config --accessToken=<アクセストークン> --accessTokenSecret=<アクセストークンシークレット>

 以上で設定は完了だ。設定されている情報は次のようにして確認できる。

$ sacloud config
/Users/foo/.sacloudcfg.json:
{
  "apiRoot": "https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/",
  "accessToken": "<アクセストークン>",
  "accessTokenSecret": "<アクセストークンシークレット>"
}

 最後に正しく設定が行えているかどうかを、作成されている仮想サーバを表示する「sacloud show server」」コマンドを実行して確認しておこう。正しく設定できていれば、以下のようにサーバ一覧が表示される。

$ sacloud show server
GET https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server.json?{"Count":0} -> 200 OK (1/1) ~0.645sec
+--------------+-------------------------------+--------+---------------------+
| id           | name                          | status | created at          |
+--------------+-------------------------------+--------+---------------------+
| 112500152369 | centos 48-120                 | down   | 2013-04-05 12:46:25 |
+--------------+-------------------------------+--------+---------------------+
 :
 :

サーバの情報を確認する

 続いては、sacloudでAPIを実行する例を紹介していこう。まずはサーバの情報などを確認するコマンドだ。先ほど、「sacloud show server」コマンドで作成されている仮想サーバの一覧を表示したが、サーバIDを引数として「show server」コマンドを実行すると、指定したサーバについての詳細を確認できる。

$ sacloud show server 112500152369
GET https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/112500152369.json?{"Count":0} -> 200 OK (1/1) ~0.397sec
+-------------------+-------------------------------------------------------------+
| id                | 112500152369                                                |
+-------------------+-------------------------------------------------------------+
| zone              | 31001:is1a                                                  |
+-------------------+-------------------------------------------------------------+
| name              | centos 48-120                                               |
+-------------------+-------------------------------------------------------------+
| tags              | @virtio-net-pci, @keyboard-us                               |
+-------------------+-------------------------------------------------------------+
| plan              | 1:(旧)プラン1                                               |
+-------------------+-------------------------------------------------------------+
| cpu               | 1                                                           |
+-------------------+-------------------------------------------------------------+
| memory            | 2048MB                                                      |
+-------------------+-------------------------------------------------------------+
| status            | down                                                        |
+-------------------+-------------------------------------------------------------+
| status changed at | 2014-03-09 21:28:48                                         |
+-------------------+-------------------------------------------------------------+
| hypervisor        |                                                             |
+-------------------+-------------------------------------------------------------+
| disk              | 112500152368:名称未設定 サーバ 13dda3aa184, virtio, 20480MB |
+-------------------+-------------------------------------------------------------+
| interface         | 112500152370:**:**:**:**:**:** -> ***.***.**.***            |
+-------------------+-------------------------------------------------------------+
| created at        | 2013-04-05 12:46:25                                         |
+-------------------+-------------------------------------------------------------+

 なお、sacloudコマンドはデフォルトでは表形式で出力を行うが、「--csv」オプションを付けることでCSV形式で、「--tsv」オプションを付けることでTSV形式で、「--json」オプションを付けることでJSON形式で出力が可能だ。これらはスクリプトなどで出力を加工する場合などに便利だ。

$ sacloud --json show server 112500152369
[{
  "requestInfo": {
    "time": 1397396161193,
    "method": "GET",
    "url": "https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/112500152369.json?{\"Count\":0}",
    "path": "server/112500152369"
  },
  "request": {
    "Count": 0
  },
  "responseInfo": {
    "time": 1397396161553,
    "latency": 360,
    "length": 1957,
    "serial": "66493241c0670b52489191b7ba8b53ae",
    "status": 200,
    "statusText": "OK",
    "type": "resource",
    "key": "server"
  },
  "response": {
    "server": {
      "id": "112500152369",
      "name": "centos 48-120",
      "hostName": "localhost",
      "description": "",
      "serviceClass": "cloud/plan/1",
      "createdAt": "2013-04-05T12:46:25+09:00",
      "icon": {
        "id": "112300511981",
        "url": "https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/icon/112300511981.png",
        "name": "CentOS",
        "scope": "shared"
      },
      "serverPlan": {
        "id": 1,
        "name": "(旧)プラン1",
        "cpu": 1,
        "memoryMB": 2048,
        "serviceClass": "cloud/plan/1",
        "availability": "disabled"
      },
      "zone": {
        "id": 31001,
        "name": "is1a",
        "description": "石狩第1ゾーン",
        "vncProxy": {
          "hostName": "sac-is1a-ssl.sakura.ad.jp",
          "ipAddress": "133.242.31.244"
        },
        "ftpServer": {
          "hostName": "sac-is1a-ssl.sakura.ad.jp",
          "ipAddress": "133.242.31.244"
        },
        "region": {
          "id": 310,
          "name": "石狩",
          "description": "石狩",
          "nameServers": [
            "133.242.0.3",
            "133.242.0.4"
          ]
        }
      },
      "instance": {
        "server": {
          "id": "112500152369"
        },
        "status": "down",
        "beforeStatus": "cleaning",
        "statusChangedAt": "2014-03-09T21:28:48+09:00",
        "migrationProgress": null,
        "migrationSchedule": null,
        "isMigrating": null,
        "migrationAllowed": null,
        "modifiedAt": "2014-03-09T21:28:48+09:00",
        "host": null,
        "cdrom": null,
        "cdromStorage": null
      },
      "disks": [
        {
          "id": "112500152368",
          "name": "名称未設定 サーバ 13dda3aa184",
          "connection": "virtio",
          "connectionOrder": 1,
          "reinstallCount": 0,
          "availability": "available",
          "sizeMB": 20480,
          "storage": {
            "id": "3100196005",
            "mountIndex": "3100196005",
            "class": "iscsi1204"
          },
          "bundleInfo": null
        }
      ],
      "interfaces": [
        {
          "id": "112500152370",
          "macAddress": "**:**:**:**:**:**",
          "ipAddress": "***.***.**.***",
          "userIPAddress": null,
          "hostName": null,
          "switch": {
            "id": "112400128561",
            "name": "sac-is1a-rt1-***.***.**.*",
            "scope": "shared",
            "subnet": {
              "id": null,
              "networkAddress": "***.***.**.*",
              "networkMaskLen": 24,
              "defaultRoute": "***.***.**.*",
              "internet": {
                "bandWidthMbps": 100
              }
            },
            "userSubnet": {
              "defaultRoute": "***.***.**.*",
              "networkMaskLen": 24
            }
          },
          "packetFilter": null
        }
      ],
      "appliance": null,
      "tags": [
        "@virtio-net-pci",
        "@keyboard-us"
      ]
    },
    "is_ok": true
  }
}]

>>次ページ:サーバを作成する

おしらせ

banner_cloud