2011年8月23日火曜日

AWS : boto を用いた EC2 の操作メモ

AWS の python API である、boto の話。
あまり日本語情報が充実していないのでメモメモ~。

◆EC2の東京リージョンにつなげる
>>> import boto.ec2
>>>
>>> tokyo = boto.ec2.connect_to_region('ap-northeast-1')
>>>
>>> tokyo
EC2Connection:ec2.ap-northeast-1.amazonaws.com


◆EC2インスタンスを起動する
>>> reservation = tokyo_ec2.run_instances(image_id='ami-300ca731', key_name='testkey', instance_type='t1.micro', security_groups=['testgroup'])

※インスタンスを起動すると、Reservationというオブジェクトが返ってくる。これは同時に起動されたインスタンスのコレクション。
クラス変数として、

self.id
self.owner_id
self.groups
self.instances


を持つ。
つまり、インスタンスを確認するには、

>>> reservation.instances
[Instance:i-8899ef89]

とする。


◆tagをつけるには、、、

reservation.instances[0].add_tag(key='test',value='testvalue')

とかってする。


◆tagをキーにしてインスタンスを取得するには、、、

tagのkeyで取得する。

>>> tokyo.get_all_instances(filters={'tag-key':'test'})[0].instances
[Instance:i-aa0f71ab]

tagのvalueで取得する。

>>> tokyo.get_all_instances(filters={'tag-value':'testvalue'})[0].instances
[Instance:i-aa0f71ab]

keyとvalueの組み合わせで取得する。これが一番使うのかな~

>>> tokyo.get_all_instances(filters={'tag-key':'test', 'tag-value':'testvalue'})[0].instances
[Instance:i-aa0f71ab]

とかってすればいいんだけど、これだと "key:value" の組み合わせが1つしか指定できないので、

>>> tokyo.get_all_instances(filters={'tag:test': 'testvalue'})[0].instances

とすれば、複数の指定が出来る。


◆パブリックDNSを取得する
起動した直後は、情報がそろっていないため、microインスタンスなら1分程度待機し、

>>> reservation.instances[0].update()
u'running'

として更新する。

その後、

>>> reservation.instances[0].public_dns_name
u'ec2-46-51-226-124.ap-northeast-1.compute.amazonaws.com'

とすることでパブリックDNSを取得できる。

プライベートDNSは、

>>> reservation.instances[0].private_dns_name
u'ip-10-146-70-41.ap-northeast-1.compute.internal'

とする。

ひとまず簡単なところではこんな感じ。


◆一応最後に、起動したインスタンスを終了しておく

状態を確認
>>> reservation.instances[0].state
u'running'

インスタンスIDを確認
>>> reservation.instances[0]
Instance:i-8899ef89

インスタンスを削除
>>> reservation.instances[0].terminate()

落ちて行くのを確認
>>> reservation.instances[0].state
u'running'

>>> reservation.instances[0].update()
u'shutting-down'

>>> reservation.instances[0].state
u'shutting-down'

>>> reservation.instances[0].update()
u'terminated'


こんな感じで、、、

おしまい。

0 件のコメント:

コメントを投稿