Tech Sketch Bucket of Technical Chips by TIS Inc.

マルチクラウド操作を実現するメタクラウドAPI~Deltacloud~

Pocket

パブリッククラウドではAWS、プライベートクラウドではOpenStack、CloudStackなど様々なクラウドプラットフォームが混在する中で、複数の環境を運用するといった機会も今後増えてくるのではないでしょうか。
マルチクラウド環境を統合管理するために有用なメタクラウドAPIであるDeltacloudの仕組みや使い方を紹介します。


Deltacloudとは

Deltacloud はApacheのトップレベルプロジェクトの一つでApacheライセンス(ver.2.0)のもと公開されているOSSのメタクラウドAPIです。Rubyで実装されています。
同様のツールとしてはPythonで実装されている libcloud などがあります。Deltacloudは、 AWSRackspaceGogird などのパブリックなクラウドサービスや OpenStackRHEV-MvSphere などプライベートなクラウド(仮想環境)のAPIのラッパーAPIです。

各環境に対するAPIアクセスをDeltacloudにより統合することで、Deltacloudの利用方法のみを習得するだけで様々な環境の操作を実現することができます。
Deltacloudがサポートしているクラウドサービス、サポートしている操作に関しては Deltacloud公式サイト を参照して下さい。
本記事では、Deltacloudの使い方を具体的に紹介します。

Deltacloudの利用方法は2通りあります。一つは、ライブラリとしてRubyのプログラム内から利用することを想定した方法です。
もう一つの利用方法は、各環境へのAPI操作を仲介するサーバプロセスとしてDeltacloudを稼働させ、Deltacloudが備えるWebAPIを通して各環境の操作を実行するWebAPI型の利用方法です。

この記事では2013/09現在の最新版Deltacloud バージョン1.1.3をもとに解説します。

Deltacloudの仕組み

使い方の紹介の前に、Deltacloudの概要を図で示します。
Rubyのライブラリ形式での利用、WebAPI形式での利用それぞれ図のような仕組みで実現されます。

deltacloud_architecture.png

WebAPI形式で利用することで、特定のプログラミング言語に依存せず扱うことができるといったメリットがあります。

Deltacloudの使い方

Deltacloudは現在以下のようなクラウド操作に対応しています。

  • インスタンス作成・起動・停止・再起動等Computeに対する操作
  • ストレージボリュームの作成・削除・割り当て・スナップショット作成・削除等Storageに対する操作
  • ファイアウォールルールの作成・削除等Securityに対する操作
  • 認証情報の追加・削除等Credentialに対する操作
  • ロードバランサの作成・削除・登録・解除等LoadBalancerに対する操作

サポートされているクラウドサービスであっても全ての操作に対応しているわけではないため利用時には注意が必要です。各クラウドサービスでサポートされている内容については こちら を参照して下さい。

それでは、ここからは具体的にライブラリおよびWebAPIそれぞれの形式でDeltacloudを使うにはどうすればいいかを紹介します。特に、WebAPI形式で利用する場合には、いくつかの使い方があるのでその例を紹介します。

Deltacloudのインストール

DeltacloudはRubyのgemパッケージ(deltacloud-core)として提供されています。まずはDeltacloudを動かすために必要なパッケージ類をインストールします。稼働には以下のパッケージ類が必要になります。

  • ruby本体(1.8.7以上のバージョンに対応)および開発用ライブラリ
  • rubygems
  • gcc-c++
  • libxml2および開発用ライブラリ
  • libxsltおよび開発用ライブラリ
  • sqliteおよび開発用ライブラリ
  • rake

DeltacloudはRedHat系やDebian系のLinuxおよびOS Xに対応しています。Debian系の場合、以下のようにインストールを実施します。

次に、gemパッケージをインストールします

deltacloud-coreパッケージをインストールすることで依存するパッケージ(AWS API操作用パッケージ等)も合わせてインストールされます。

ライブラリ形式での利用

ライブラリ形式での利用方法はDeltacloudの1.0.0以降でサポートされています。それ以前のバージョンでは利用できません。rubyプログラムの中でDeltacloudのライブラリを読み込むことで利用できます。
Deltacloudライブラリを利用してEC2インスタンスの一覧を取得するサンプルコードを紹介します。

サンプルコード:Deltacloudを利用したEC2インスタンス一覧取得スクリプト

注意点

1.8系のrubyを利用する場合はrequire_relativeをインストールする必要があります。

WebAPI形式での利用

Deltacloudをサーバプロセスとして起動し、各環境へのAPIアクセスを統合する方法です。

サーバプロセス起動

-iによるデフォルトで利用するドライバの指定は、ec2、gogrid、rackspaceなどの名前を指定します。

Deltacloud APIのHTTPリクエスト仕様

DeltacloudはREST形式のWebAPIです。
インスタンス一覧を取得するためには次のようなHTTPリクエスト送付することで実現できます。
(API仕様詳細については、「http://deltacloudサーバホスト名orIPアドレス:ポート番号/api/docs」にアクセスすることで確認ができます。)

  • インスタンスリスト取得URI: http://deltacloudサーバホスト名orIPアドレス:ポート番号/api/instances
  • HTTPメソッド:GET
  • HTTPヘッダー:
    • X-Deltacloud-Provider: ap-northeast-1などリージョン指定
    • X-Deltacloud-Driver: ec2などドライバ指定
    • Authorization: EC2のアクセスキーIDとシークレットキーによるBasic認証
  • オプション:
    • format: xmlまたはjson

サーバプロセス起動時にデフォルトで利用するドライバを指定しましたが、HTTPリクエスト送付時にX-Deltacloud-Driverヘッダにてドライバを指定することでデフォルトとは違うドライバを利用することも可能です。
以降、DeltacloudのWebAPIを操作する手法を3パターン紹介します。

1:WebAPIを直接リクエスト実行(curlコマンドによる実行例)

Deltacloud APIへのリクエストをcurlコマンドを用いて直接実行する方法は次の通りです。
出力形式はjsonを指定しています。

出力結果抜粋(json結果を整形済み)

2:deltacloud-clientを利用する方法

直接WebAPIを叩く方法以外にもDeltacloud WebAPIを操作するためのクライアントライブラリも提供されています。
gemのパッケージとして提供されているので、次の方法でインストールします。

サンプルコード:Deltacloud Clientを利用したEC2インスタンス一覧取得スクリプト

deltacloudをライブラリ形式で利用する場合との違いは、deltacloud-clientは接続先としてDeltacloud APIのURLを指定しなければならない点です。
また、deltacloud-clientはDeltacloud WebAPIにアクセスするため、Deltacloudが稼働しているサーバと異なるサーバ上で利用することができます。

3:WebGUIを利用する方法

Deltacloudは内部に簡易なWebGUIの機能も備えています。
スクリプトを作成するまでもない1回だけの操作など、簡易なものについてはこのWebGUIからDeltacloudAPIの操作ができます。
URLは「http://Deltacloudホスト名orIPアドレス:ポート番号/api」です。

Deltacloud_GUI.png

まとめ

Deltacloudは複数の環境を管理しなければならない場合には非常に有用なツールです。同様の手順で各環境の管理ができるのは運用管理者にとって便利に活用できるのではないでしょうか。ただし、利用時には注意も必要です。各環境への操作を統合して扱える反面、各環境に依存した個別の操作への対応まではできていません。
例えば、AWSのRDSやDynamoDB等のAPIへの対応などです。このようなクラウドサービス個別の操作が必要な場合には別途各クラウドサービスのAPIを直接利用しなければなりません。
利用する場面を想定し、必要なことが実現できるかを見極めた上で導入を検討する必要があります。

エンジニア採用中!私たちと一緒に働いてみませんか?