メタクラウドAPI libcloudを利用してみる

libcloudはpythonのライブラリなので、pythonが使える環境を準備。
python2.4だとetreeが要求されて動かないのでpython2.6を入れて試してみました。

pipでパッケージ管理できる状態になっていることを前提として下記を実行。

apache-libcloudインストール

# pip install apache-libcloud

libcloudの中身チェック

pythonにインストールされたモジュールはデフォルトだと下記に配置される。
/usr/lib/python2.6/site-packages

# ls /usr/lib/python2.6/site-packages/libcloud
__init__.py   base.pyc  data            drivers          loadbalancer  providers.pyc  ssh.py   types.py   utils.pyc
__init__.pyc  common    deployment.py   httplib_ssl.py   pricing.py    security.py    ssh.pyc  types.pyc
base.py       compute   deployment.pyc  httplib_ssl.pyc  providers.py  security.pyc   storage  utils.py
# cd /usr/lib/python2.6/site-packages/libcloud/compute/drivers
# ll *.py
 -rw-r--r-- 1 root root  1127  5月 27 15:19 __init__.py
 -rw-r--r-- 1 root root  7414  5月 27 15:19 bluebox.py
 -rw-r--r-- 1 root root  6997  5月 27 15:19 brightbox.py
 -rw-r--r-- 1 root root 18566  5月 27 15:19 cloudsigma.py
 -rw-r--r-- 1 root root  7405  5月 27 15:19 dreamhost.py
 -rw-r--r-- 1 root root  9524  5月 27 15:19 dummy.py
 -rw-r--r-- 1 root root 35026  5月 27 15:19 ec2.py
 -rw-r--r-- 1 root root 10894  5月 27 15:19 ecp.py
 -rw-r--r-- 1 root root 19632  5月 27 15:19 elastichosts.py
 -rw-r--r-- 1 root root 12052  5月 27 15:19 gandi.py
 -rw-r--r-- 1 root root 13349  5月 27 15:19 gogrid.py
 -rw-r--r-- 1 root root  8541  5月 27 15:19 ibm_sbc.py
 -rw-r--r-- 1 root root 23566  5月 27 15:19 linode.py
 -rw-r--r-- 1 root root  6797  5月 27 15:19 opennebula.py
 -rw-r--r-- 1 root root 21669  5月 27 15:19 opsource.py
 -rw-r--r-- 1 root root 19219  5月 27 15:19 rackspace.py
 -rw-r--r-- 1 root root 11901  5月 27 15:19 rimuhosting.py
 -rw-r--r-- 1 root root  8715  5月 27 15:19 slicehost.py
 -rw-r--r-- 1 root root 15013  5月 27 15:19 softlayer.py
 -rw-r--r-- 1 root root 20399  5月 27 15:19 vcloud.py
 -rw-r--r-- 1 root root 10939  5月 27 15:19 voxel.py
 -rw-r--r-- 1 root root  6413  5月 27 15:19 vpsnet.py

対応クラウドサービスの数はDeltaCloudよりも充実してそう。

DeltaCloudとは違って、管理画面みたいなのが用意されていなさそうなので、とりあえずpythonでAmazonEC2の仮想マシンリストを取得してみる。

実行方法は、libcloudのライブラリをimportして、
ec2用のドライバを作って、そこにEC2のAPIキーとシークレットキーを登録。
AWSに接続してノードリストを取得。

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

EC2_ACCESS_ID = 'APIキー'
EC2_SECRET_KEY = 'シークレットキー'

Driver = get_driver(Provider.EC2)
conn = Driver(EC2_ACCESS_ID, EC2_SECRET_KEY)
nodes = conn.list_nodes()

print nodes

対話型インタフェース使って実際に試してみる。

# python
 >>> from libcloud.compute.types import Provider
 >>> from libcloud.compute.providers import get_driver
 >>> EC2_ACCESS_ID = 'APIキー'
 >>> EC2_SECRET_KEY = 'シークレットキー'
 >>> Driver = get_driver(Provider.EC2)
 >>> conn = Driver(EC2_ACCESS_ID, EC2_SECRET_KEY)
 /usr/lib/python2.6/site-packages/libcloud/httplib_ssl.py:55: UserWarning: SSL certificate verification is disabled, this can pose a security risk. For more information how to enable the SSL certificate verification, please visit the libcloud documentation.
   warnings.warn(libcloud.security.VERIFY_SSL_DISABLED_MSG)
 >>> nodes = conn.list_nodes()
 >>> print nodes
 []

無事ノードリストの取得に成功。

他のクラウドサービスに対しても同様の手順で操作することが可能です。
http://libcloud.apache.org/index.html