ラベル boto の投稿を表示しています。 すべての投稿を表示
ラベル boto の投稿を表示しています。 すべての投稿を表示

2011年9月17日土曜日

AWS : IAM でのサーバ証明書の登録方法


今回も boto のお話。

テーマは、「AWSで使用するサーバ証明書を登録してみよう」


ん?サーバ証明書??普通にやればいいんじゃないの??

って初めは思ったんですが、ELBを使ってSSL通信をしようとすると普通に必要になりました。

2011年9月16日金曜日

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


ちょっと久々に、boto のお話。

今回は、AWSELB をいじってみる。

◆Endpoint に接続

>>> import boto.ec2.elb
>>>
>>> conn=boto.ec2.elb.connect_to_region('ap-northeast-1') #コネクション取得
>>>
>>> conn.get_all_load_balancers() #既存のELBを確認(まだ何も無い)
[]

◆ロードバランサ作成


2011年9月6日火曜日

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

過去に何回かポストしてる AWS の python API である boto の話。

今回は、RDSを軽くいじってみる。ホントにかる~く。
引数が、キーワード引数とそうじゃないのと混じってるけど、まぁご愛嬌ってことで。。

◆Endpointに接続
>>> import boto.rds
>>> tokyo_rds = boto.rds.connect_to_region('ap-northeast-1')

◆起動
>>> rds_instance = tokyo_rds.create_dbinstance(
id = 'bototest',
allocated_storage='10',
instance_class='db.m1.small',
master_username='root',
master_password='xxxx',
security_groups=['testgroup'],
param_group='utf8')

◆スナップショット取得
>>> new_dbsnap = tokyo_rds.create_dbsnapshot('testsnap', 'bototest')

◆停止
>>> tokyo_rds.delete_dbinstance(
rds_instance.id,
skip_final_snapshot = False,
final_snapshot_id = 'testsnap2')

◆スナップショットからのリストア
>>> tokyo_rds.restore_dbinstance_from_dbsnapshot(
'testsnap2',
'restored_instance',
'db.m1.small')

◆スナップショット削除
>>> tokyo_rds.delete_dbsnapshot('testsnap')


こんなところ、軽すぎるか。。
まぁソースを確認したほうが、コメントもついてるから確実かつ分かりやすいですね。

https://github.com/boto/boto/blob/master/boto/rds/__init__.py

個人的にはAWS自体がEC2とRDSで表現が違ったりする(instance type と instance class とか、 name と id とか)のがちょっと始め混乱するけど、大した問題じゃあないか。


おしまい。

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'


こんな感じで、、、

おしまい。

2011年8月17日水曜日

AWS : boto 各リージョンへの接続

AWS の Python API である、boto について。

まず始めに躓いたところは、指定のリージョンに接続出来ないよ!ってこと。

AWSの公式紹介ページでは、AWSへのコネクションの作成に、

>>> import boto
>>> boto.connect_ec2()

みたいな感じで接続してるんだけど、これだけじゃリージョン指定出来なくて北米とかにつながってしまう。

で、ソースを見ると

RegionInfoっていうクラスに、リージョン名渡して~みたいな感じで出来るのですが、、、

、、、っていうか接続するだけなのに、めんどうだな(-.-;)

って思いました。

それで、よくよくソースを探ってみると、ありました。リージョン指定で接続するメソッドが。

その名も

connect_to_region('リージョン名')

ずばりですね。

ってことで、これで簡単にリージョン指定で接続できます。

下記は、インタラクティブシェルを使って、東京リージョンのEC2で新規インスタンスをあげる例です。

>>> import boto.ec2
>>>
>>> ec2_conn = boto.ec2.connect_to_region('ap-northeast-1')
>>>
>>> ec2_conn
EC2Connection:ec2.ap-northeast-1.amazonaws.com
>>>
>>> rsv = ec2_conn.run_instances('ami-2e0ca72f', instance_type='t1.micro')
>>>
>>> rsv
Reservation:r-845a0e85
>>>
>>> rsv.instances
[Instance:i-44095645]
>>>
>>> instance = rsv.instances[0]
>>>
>>> instance
Instance:i-44095645
>>>
>>> print instance.region
RegionInfo:ap-northeast-1
>>>
>>> print instance.placement
ap-northeast-1a
>>>


3行目で、東京リージョンに接続。
8行目で、インスタンス起動。
21行目で、リージョンを確認。
24行目で、アベイラビリティゾーンを確認。

うん、ちゃんと取れてるみたいです。

同様に、自分が使用して出来たものとして、RDS(※注)・ELBがあります。
他も同様だとは思いますが、ソースを見て確認してみてください。

S3 と IAM は、接続の感じが違うみたいで、それぞれ普通に、

@S3
>>> import boto
>>>
>>> s3_conn = boto.connect_s3()

@IAM
>>> import boto
>>>
>>> iam_conn ~ boto.connect_iam()

と、します。
S3は、なんかリージョンの考え方が違うのかな。
IAMは、そもそもリージョンが無いからそれはそうか。

※RDSは、2011/08/17現在、pypiでの最新バージョンであるboto2.0では、リージョンのエンドポイントが
間違っていて、コネクションは作れるものの、インスタンスの作成等は出来ません。
boto/rds/__init__.py の def regions() に記載されているエンドポイントを自分で書き換えるか、
githubより最新のものをダウンロードする必要があります。
各AWSサービスのエンドポイント一覧は、こちら


おしまい。

2011年8月16日火曜日

AWS : boto API の導入

AWS(Amazon Web Service) の Python API である boto を使用する機会があったので、それについてちょくちょく書いていこうと思います。

まずは導入手順。

これは、基本的にはAWSの公式ページのままなので、別になんてことはないです。

◆pythonのパッケージ管理用のpipをインストール
(pipを入れる前に、easy_installも入れておく。)

# easy_install pip

◆botoライブラリをインストール

# pip install -U boto

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

なのですが、botoの開発は今もガンガンされているっぽいので、これだと最新のものが入らなくて困ることがあります。
例えば、2011/8/16現在では、pypiに登録されているboto2.0では、rdsのendpointの値が正しくないため、接続がうまくいきません。

なので、出来ればgithubから最新のソースをダウンロードして、

# python setup.py install 

とした方がいいと思います。
まぁとにかく、これでboto自体のインストールはOKです。

次に、アカウントに接続するためにクレデンシャルファイルというものを作ります。

◆クレデンシャルファイルを作成

・Linuxとかの場合
/etc/boto.cfg or ~/.boto に下記内容を記載

・Windowsの場合
任意の場所に下記内容を記載し、環境変数に
名前:AWS_CREDENTIAL_FILE
値 :作成したファイルのパス
として登録する。
http://code.google.com/p/boto/wiki/BotoConfigによると、BOTO_CONFIG として登録でもいいらしいけど未検証。

作成するファイルの内容
[Credentials]
aws_access_key_id = {ACCESS KEY ID}
aws_secret_access_key = {SECRET ACCESS KEY}
※{}はいらない。

インタラクティブpythonを起動して、

>>> import boto

で、特になにも出なければオッケーです。

おしまい。

ぐぐってもなかなかまとまった情報が手に入らないので、次からもっと色々と書いていく予定。