2012年10月16日火曜日

複数のクラウド(IaaS)を1つのAPIで利用できるApache Libcloudとlc-toolsを使ってみた

数ヶ月前に「Apache Libcloud」の存在を知り、やっと触る時間がとれたので備忘録的に記載します。また、この間にLibcloudが少しは盛り上がるかと思いましたが、全く盛り上がっていません。今後に期待しつつ。。。

Apache Libcloudとは

Apache Libcloud(以降、Libcloud)は、Amazon EC2、Rackspace Cloud Servers等、20種類以上のクラウドサービスのAPIを抽象化(1つのAPIで利用できるように)したpythonライブラリです。2009年にApache Software Foundation(ASF)のプロジェクトに加わったようです。

詳細は下記をご参照ください。
メタクラウドAPI」がオープンソースで登場 - Publickey 
Apache、共通クラウドAPIを目指す「Libcloud」をトップレベルプロジェクトに:ITpro 

実際に使ってみる

こちらを参考に、Libcloudのinstallおよび、AWS EC2のVM listを取得してみました。
ACCESS_IDとSECRET_IDを記載するだけで、簡単に取得できました。
(一部伏せ字。出力結果は見やすくするため改行をいれています。)
$ python test.py
---snip---
list_nodes-----------------
[<Node:
  uuid=xxxxxxxxxxxxxxxxxxxxxxxx,
  name=test,
  state=0,
  public_ips=['x.x.x.x'],
  provider=Amazon EC2 (ap-northeast-1)
...>]
---snip---
しかし、他のクラウド事業者(CloudStack等)で試そうと思った所、Provider名や、API_KEY,SECRET_KEY,URLなどの指定方法が分からない。
LibcloudのHPにも少しサンプルやDocumentはあるのですが、やはり分からない、もしくは難しくて理解できない。。。ネットで調べても情報が少ない。。。

分かりやすいDocumentやサンプルって重要だなと、改めて感じました。

Libcloud用コマンドラインツール lc-tools

Libcloudの使用をあきらめかけた時、「lc-tools」なるものを見つけました。ここ10ヶ月程更新がないのは気になりますが、まずは使ってみます。
DocumentやTutorialが用意されていますので、参考にしながら、まずは下記でlc-toolsをinstallします。
%git clone https://github.com/novel/lc-tools.git
%cd lc-tools
%sudo python setup.py install
次にVM listの取得に挑戦です。今回は、私が開発に携わっているIDCフロンティア クラウドセルフサービス(以後、IDCFクラウド)を対象とします。
IDCFクラウドはCloudStackを利用しており、CloudStackはLibcloudのサポート対象になっています。

~/.lcrcに下記設定ファイルを用意しました。(一部伏せ字)
[idcf]
driver = cloudstack
access_id = xxx
secret_key = xxx
extra = { "host": "xxx.jp", "secure": True, "path": "/portal/client/api" }
下記、実行結果です。
期待通り、VM2台の情報が出力されました。が、出力結果が意外にシンプルすぎます。
(一部伏せ字。出力結果は見やすくするため改行をいれています。)
$ cd lc-tools/
$ ls -1

LICENSE
MANIFEST.in
NEWS
README.md
TODO
VERSION
build
doc
lb-add
lb-destroy
lb-list
lb-member-add
lb-member-list
lb-member-remove
lc-drivers-list
lc-image-list
lc-locations-list
lc-node-add
lc-node-do
lc-node-list
lc-sizes-list
lctools
man
media
provider_specific
scripts
setup.py
test

$ ./lc-node-list -p idcf
---snip---
<Node:
  uuid=xxx,
  name=test,
  state=2,
  public_ips=[],
  provider=CloudStack
...>
<Node:
  uuid=xxx,
  name=test2,
  state=2,
  public_ips=[],
  provider=CloudStack
...>

まとめ

  • Libcloudは20種以上のクラウドサービスに対応しているので、複数サービスを利用している人にとっては、管理が集約できる可能性あり。
  • しかし、現時点では、こちらにも記載があるようにクラウドによって、使用可能な機能に差異がある。また、当然、native API程細かい操作はできない。出力結果も情報が少なすぎるかな。。。
  • Libcloudに関する情報が少なく、ほとんどの人にとっては敷居が高い。
  • Libcloudのコマンドラインツールであるlc-toolsによって、この敷居が低くなる事を期待したい。

Apacheのプロジェクトなので、今後、盛り上がる事を期待したいです。
このエントリーをはてなブックマークに追加