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を起動をご紹介します。
2回目では、Instanceの起動、停止、ImageからInstanceを起動をご紹介します。
1.Botoのインストール
楽をするためにソースインストールではなくyum installを行います。
※ソースからのインストールも可能なのでRPM系以外を利用の方はそちらでインストールしてみてください。
コマンドは説明するまでもないと思いますが、
[root]# yum install python-boto.noarch
これだけでインストールは完了です。
2.Botoを利用してAmazonEC2シンガポールRegionに接続
APIを経由した操作は、対象のRegionに接続するところから始まります。
※Regionとは、AWSの稼動地域(西海岸、東海岸、欧州、シンガポール)のことです。
下記の図は、各操作をするまでの流れと必要な情報です。
※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を起動させるサンプルコードを掲載します。
※コードはあくまでサンプルですので、参考としてご利用ください。