読者です 読者をやめる 読者になる 読者になる

試される大地から

furaiboが送る技術ブログ。プログラミングのTipsなど書いていきます。

Apache Libcloudを使ってみました



こんにちは。furaiboです。最近は卒業研究に追われていて、なかなかスクリプトやツールを実装したりといった時間を取ることが出来ずにいますが、卒業研究に目処がつき次第、活動を再開して行きたいと考えています。



ところで、今現在卒業研究の一環として実装中のツールにApache Libcloud(以下Libcloudと呼称)を使っています。今日はこのLibcloudについて紹介したいと思います。



LibcloudではAWSやRackspaceといったパブリッククラウド、さらにCloudStackやOpenStackなどのクラウドOSでの仮想マシン生成についてのAPIを提供してくれます。Libcloudはさまざまなクラウドを抽象化して扱うことが出来、共通したAPIが利用できます(クラウド毎の独自拡張はあり)




Libcloudのドキュメントページは以下のようになります。

http://libcloud.apache.org/




Libcloudを利用するためにはPythonパッケージの管理ツールであるpipもインストールする必要があります。以下の様な手順で必要なパッケージをインストールしましょう。

# パッケージインストール
# setuptools 0.8
wget https://bitbucket.org/pypa/setuptools/raw/0.8/ez_setup.py
python ez_setup.py --user

# pip
easy_install pip

# libcloud
pip install apache-libcloud


これを利用したAmazon EC2関連のスクリプトは以下のようになります。以下の例ではUS East(N.Verginia)において仮想マシンを作成・破棄します。



Amazon EC2インスタンス作成

#!/usr/bin/python
#-*- coding:utf-8 -*-

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

EC2_ACCESS_ID  = 'あなたのAWSのアクセスID'
EC2_SECRET_KEY = 'あなたのAWSの秘密鍵'

Driver = get_driver(Provider.EC2_US_EAST)
conn = Driver(EC2_ACCESS_ID, EC2_SECRET_KEY)

vm_name     = 'sample_vm'
image_id    = 'ami-1b814f72'
size_id     = 't1.micro'

image = [i for i in conn.list_images() if i.id == image_id][0]
size  = [s for s in conn.list_sizes() if s.id == size_id][0]

node = conn.create_node(name=vm_name, image=image, size=size)

Amazon EC2インスタンス破棄

#!/usr/bin/python
#-*- coding:utf-8 -*-

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

EC2_ACCESS_ID  = 'あなたのAWSのアクセスID'
EC2_SECRET_KEY = 'あなたのAWSの秘密鍵'

vm_name = 'sample_vm'

Driver = get_driver(Provider.EC2_US_EAST)
conn = Driver(EC2_ACCESS_ID, EC2_SECRET_KEY)

node = [i for i in conn.list_nodes() if i.name == 'vm_name'][0]
val = conn.destroy_node(node)
if val:
        print("Successfully delete Node[{0}]".format(node.name))
else:
        print("Failed to delete Node[{0}])".format(node.name))

AWS鍵作成

#!/usr/bin/python
#-*- coding:utf-8 -*-
#
# root権限かsudoで実行
#

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

EC2_ACCESS_ID  = 'あなたのAWSのアクセスID'
EC2_SECRET_KEY = 'あなたのAWSの秘密鍵'

Driver = get_driver(Provider.EC2_US_EAST)
conn = Driver(EC2_ACCESS_ID, EC2_SECRET_KEY)

# 鍵ペアを作成する
key_name = "sample_key.pem"
data = conn.ex_create_keypair(key_name)

f = open(key_name)
f.write(data["keyMaterial"])
f.close()
os.chmod(key_name, 0600)	# Linuxであれば鍵ファイルの権限は600とする


list_nodes()関数は、ユーザが作成した仮想マシンの一覧を取得します。





以上です。簡単な例のみ挙げましたが、Libcloudについてさらに知識を深めた段階でさらにブログ記事にまとめようと考えています。




参考にしたページは以下です。

Apache libcloudでAmazon EC2, OpenNebulaクラウドにVM作成 - 日々の報告書