コマンドラインツール「sacloud」でさくらのクラウドを操作する

図1 さくらのクラウドAPIを使った処理の流れ

 「さくらのクラウド」では、HTTPベースで外部からクラウドの操作を行えるAPIが提供されている。APIを利用することで、スクリプトなどで仮想サーバーの作成を自動化したり、監視・管理といった用途を行うカスタムツールを作成できる。今回はこのさくらのクラウドAPIの概要と、さくらインターネットが提供しているコマンドラインクライアント「sacloud CLI」を使ってさくらのクラウドAPIを利用する例を紹介する。

さくらのクラウドAPIとは?

 さくらのクラウドでは、仮想サーバーや仮想ネットワークなどを作成するためのツールとして、Webベースで操作できるコントロールパネルが提供されている(図1)。コントロールパネルではGUIで容易に操作を実行できるが、たとえば多数の仮想サーバーを作成する場合など、多くの処理を実行する場合は同じ操作を繰り返さなければならない。このような場合に便利なのがさくらのクラウドAPIだ。

 さくらのクラウドAPIでは、HTTPで特定のURLに対しアクセスすることで、クラウドに対しさまざまな処理を実行できる。現在のAPIバージョンは1.1で、提供されているAPIについてはさくらのクラウドAPI v1.1 ドキュメントにまとめられているが、サーバー関連の処理を行うAPIやディスク関連の処理を行うもの、スイッチ関連のものなど、多数のAPIが提供されている。

 APIではさくらのクラウドに関するほぼすべての処理が実行でき、たとえばサーバー関連のAPIでは、作成された仮想サーバーの一覧取得やサーバーの作成、指定したサーバーの情報取得、サーバーの起動/停止/リセット、サーバーのプランの変更といった処理が可能だ。

 さくらのクラウドAPIを利用するもう1つのケースとしては、処理を自動化したいという場合だ。クラウドAPIを利用したスクリプトを作成することで、たとえば特定の時間帯や曜日にだけサーバーを追加したり、リソースの使用状況を監視して不足が予測される場合にサーバーを追加する、といった処理を実装できる。

さくらのクラウドAPIの概要

 さくらのクラウドAPIを使った処理の流れは、次のようになる(図1)。

図1 さくらのクラウドAPIを使った処理の流れ
図1 さくらのクラウドAPIを使った処理の流れ

 さくらのクラウドAPIでは、特定のURL(エンドポイント)に対しHTTPSのGETもしくはPOST、PUT、DELETEといったリクエストを送信することで処理をリクエストする。このとき、Basic認証もしくはDigest認証を用いてユーザーの認証が行われる。認証ではユーザーごとの「APIキー」および「トークンシークレット」が使用される。これらはさくらのクラウドのコントロールパネルから取得できる(後述)。

 さくらのクラウド側はリクエストを受け取るとそれに応じた処理を実行し、HTTPステータスコードとともにJSON形式で処理結果を返す。クライアントはこれらを見ることで、処理が成功したのかそれとも失敗したのかを判断できるとともに、リクエストに応じた情報を取得できる。

 なお、このような実装は「REST API」などと言われており、さまざまな言語でREST APIを扱うためのライブラリやツールが提供されている。curlなどのHTTPクライアントを使ってさくらのクラウドAPIを利用することも可能だが、その場合リクエストを組み立てたり、受け取ったレスポンスを扱うのがやや面倒である。そのため、実際にさくらのクラウドAPIを使って処理を行う場合はREST APIを扱うためのライブラリやツールを利用することをおすすめする。

 そのようなツールの1つとして、さくらインターネットが公式にリリースしているのがさくらのクラウドAPIをコマンドラインから操作できる「sacloud CLI」というツールだ。コンソールから処理を行ったり、シェルスクリプトなどを使ってバッチ処理を行う場合はこちらが便利だ。今回はこの「sacloud CLI」を使って、さくらのクラウドを操作する例を紹介しよう。

コマンドラインツール「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に追加するようメッセージが表示される場合もあるので、指示に従ってコマンドを実行して欲しい。