Amazon Web ServiceをAPIライブラリbotoで操作する(EC2編 その1)

このエントリーをはてなブックマークに追加
Amazon Web Serviceが他のクラウド型サーバプラットフォームと比較して優れている点の1つは
ソフトウェアからの操作性が良い(プログラマブルである)事だと思います。

その理由が充実したAPIと、オープンソースで提供されているライブラリです。
その中でも、弊社で利用したBoto(PythonのAWS API ライブラリ)について簡単な利用方法とサンプルを2回に分けて記載します。

Boto公式サイトはこちら

今回は、AmazonLinux(AMIの種類)やCentOS5でyum install可能なバージョン1.9bを利用しました。
2011年1月現在で、バージョン2.0がBeta3まで進んでいますので最新情報は上記サイトをご確認ください。

1回目は、BotoのインストールからAmazonEC2を操作する場合のAPIの流れ、実際にAPIに接続しInstance情報を表示についてご紹介します。
2回目では、Instanceの起動、停止、ImageからInstanceを起動をご紹介します。

1.Botoのインストール

楽をするためにソースインストールではなくyum installを行います。
※ソースからのインストールも可能なのでRPM系以外を利用の方はそちらでインストールしてみてください。

コマンドは説明するまでもないと思いますが、

[root]# yum install python-boto.noarch

これだけでインストールは完了です。

2.Botoを利用してAmazonEC2シンガポールRegionに接続

APIを経由した操作は、対象のRegionに接続するところから始まります。
※Regionとは、AWSの稼動地域(西海岸、東海岸、欧州、シンガポール)のことです。

下記の図は、各操作をするまでの流れと必要な情報です。 



まずは、Botoを利用してAmazon EC2接続し、Regionを取り出してみます。

#!/usr/bin/python
# coding: utf8
import boto,boto.ec2
from boto.ec2.connection import EC2Connection
AWS_ACCESS_KEY = XXXXXXX
AWS_SECRET_ACCESS_KEY = YYYYYYYYYYY
def main():
    conn = EC2Connection(aws_access_key_id=AWS_ACCESS_KEY ,aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
    region = conn.get_all_regions()
    print region
if __name__ == '__main__':
    main()

実行結果は、
[RegionInfo:eu-west-1, RegionInfo:us-east-1, RegionInfo:us-west-1, RegionInfo:ap-southeast-1]
となります。

Regionを選択(正確には接続)するには、取得したRegionの配列要素に対してconnectを行います。

asia_conn = region[3].connect(aws_access_key_id=AWS_ACCESS_KEY ,aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

これで、region[3] (ap-southeast-1:シンガポール)に接続が完了しました。

APIの接続認証には、aws_access_key_idとaws_secret_access_keyを利用します。
この2つの情報は、AWSのWebサイトから取得することできます。




この手順でaws_access_key_idとaws_secret_access_keyが入手できます。
上記のサンプルでは

AWS_ACCESS_KEY = XXXXXXX
AWS_SECRET_ACCESS_KEY = YYYYYYYYYYY

として事前に定義しています。

3.指定したIDのInstance情報を表示する

上記で、シンガポールRegionを選択しました。
そのオブジェクトを利用して指定したinstance_idの詳細情報を表示します。
rsv = asia_conn.get_all_instances(instance_ids=[instance_id])
    ins = rsv[0].instances
    [ins_val for ins_val in ins if ins_val == instance_id]
    debug('Instance ID : %s' % ins_val.id)
    debug('Status : %s' % ins_val.state)
    debug('Instance type : %s' % ins_val.instance_type)
    debug('Image ID : %s' % ins_val.image_id)
    debug('Lunce time : %s' % ins_val.launch_time)
    debug('Kernel : %s' % ins_val.kernel)
    debug('RamDisk : %s' % ins_val.ramdisk)
    debug('IP Address : %s' % ins_val.ip_address)
    debug('Private IP Address : %s' % ins_val.private_ip_address)
    debug('Key Name : %s' % ins_val.key_name)
    debug('Private DNS name : %s' % ins_val.private_dns_name)
    debug('DNS name : %s' % ins_val.dns_name)
    debug('Public DNS name : %s' % ins_val.public_dns_name)
    debug('Private DNS name : %s' % ins_val.private_dns_name)
    debug('EBS ID : %s' % ins_val.block_device_mapping.current_value.volume_id)
    debug('EBS SIZE : %s' % ins_val.block_device_mapping.current_value.size)
4.管理している全てのInstanceを表示する
InstanceはそれぞれのReservationにあるため、まずReservationを選択してからInstance情報を取得します。Reservationは複数の場合があるので、get_all_reservationsは配列が返ってきます(get_instanceも同様です)

rsv = get_all_reservations(conn)
    for rsv_val in rsv:
        ins = get_instance(rsv_val)
        print "- %s" % rsv_val
        for ins_val in ins:
            print "-- %s | Status:[%s]" % (ins_val, ins_val.state)


サンプルを見て頂いたとおり、PythonユーザならばBotoを利用することで
API経由のAmazonEC2操作をプログラミングできます。

次回は、Instanceの起動や停止、ImageからInstanceを起動させるサンプルコードを掲載します。

※コードはあくまでサンプルですので、参考としてご利用ください。


次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...