Rubyから「さくらのクラウド」を操ろう

図1 さくらのクラウド API v1.1 ドキュメント

 さくらのクラウドでは、公開されているAPIを利用することでサーバーの作成や各種設定などを自動処理できる。今回はこのAPIをRubyを使って操作する例を紹介する。

プログラミング言語からさくらのクラウドAPIを利用するメリット

 前回記事ではNode.jsベースのコマンドラインツール「sacloud」を使い、さくらのクラウドAPIを使ってサーバーの作成や設定などを行う流れを紹介した。sacloudはシェルやバッチファイルなどから利用するには便利だが、条件分岐を行ったり、複雑な操作を行うにはやや不向きだ。そういった目的では、Rubyなどのスクリプト言語からさくらのクラウドAPIを操作すると良い。

 Rubyなどのスクリプト言語は、シェルスクリプトよりも複雑な処理を記述しやすいほか、ほかの既存ライブラリと組み合わせることで容易にさまざまな処理を実現できるというメリットがある。たとえば、たとえばサービスの負荷を監視して負荷が一定値を超えたら自動的に新たなサーバーを作成したり、Webブラウザからサーバーの管理を行う独自のコンソールを実装する、といったことも可能になるわけだ。

 さくらのクラウドAPIはHTTPベースのシンプルなリクエストで利用できるため、これらを利用するプログラムも比較的簡単に実装が可能だ。そこで今回は、RubyスクリプトからさくらのクラウドAPIを利用する方法について紹介しよう。

さくらのクラウドAPIの基礎知識

 まず、さくらのクラウドAPIを利用するために必要な前提知識について簡単に説明しておこう。なお、より詳しい情報に付いては「さくらのクラウド API v1.1 ドキュメント」を参照してほしい(図1)。

図1 さくらのクラウド API v1.1 ドキュメント
図1 さくらのクラウド API v1.1 ドキュメント

 さくらのクラウドAPIではHTTPSを使ってリクエストおよびその処理結果(レスポンス)のやり取りを実行する。このとき、認証はBasic認証もしくはDigest認証が使用され、またリクエストおよびレスポンスのデータはJSON形式で送受信される。文字コードはUTF-8で、日付のフォーマットはISO 860120(「2014-01-02T03:04:05+0900」のような形式)となっている。

 Basic認証およびDigest認証の際は、ユーザー名としてAPIキーを、パスワードとしてシークレットトークンを利用する。これらはさくらのクラウドのコントロールパネルで参照が可能だ。これらについては前回記事で解説しているので、そちらも参照していただきたい。

 Basic認証やDigest認証といった認証方法自体についてはここでは言及しないが、多くのHTTPライブラリには標準でこれらを使った認証機構が実装されているので、それらをそのまま利用すれば良いだろう。

 また、さくらのクラウドAPIでは以下のようなURLに対しGETやPOST、PUT、DELETEなどのHTTPリクエストを送信することで処理を実行する。

https://secure.sakura.ad.jp/cloud/zone/<ゾーンID>/api/cloud/1.1/<操作するAPIのパス>

 ここで「ゾーンID」は対象とする処理を行いたいゾーンを指定するもので、石狩第1ゾーンの場合「is1a」、石狩第2ゾーンの場合「is1b」となる。また、「操作するAPIのパス」は処理ごとに決められているパスだ。どのようなパスが用意されているかはAPIドキュメントで確認できるが、たとえばサーバーの検索や一覧を取得するには「/server」というパスを使用する(ドキュメントのサーバー関連APIページ)。

 同じパスに対するリクエストでもGETやPOSTといったリクエストメソッドが異なると、処理も異なるものになる。たとえば石狩第1ゾーンで稼動しているサーバー一覧を取得するには、以下のURLに対しGETリクエストを送信すれば良い。

https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server

 いっぽう、このURLに対しPOSTリクエストを送信すると、サーバーを作成する処理が実行される。

 以下では、APIを「<メソッド名> <パス名>」という形で表記することとする。たとえば/serverというパスに対しGETリクエストを送って実行するAPIは「GET /server」と表記する。

 パラメータを含むパスを利用するAPIもある。たとえばIDで指定したサーバの情報を取得するAPIのパスは「/server/:serverid」になる。ここで、「:serverid」部分は実際には対象とするサーバーのIDを指定することになる。たとえば石狩第1ゾーンで稼動している「123456789012」というIDを持つサーバーの情報を取得するには、以下のURLに対しGETリクエストを送信すれば良い。

https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/123456789012