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サービスのエンドポイント一覧は、こちら


おしまい。

0 件のコメント:

コメントを投稿