AWS : boto 各リージョンへの接続
AWS の Python API である、boto について。
まず始めに躓いたところは、指定のリージョンに接続出来ないよ!ってこと。
AWSの公式紹介ページでは、AWSへのコネクションの作成に、
>>> boto.connect_ec2()
みたいな感じで接続してるんだけど、これだけじゃリージョン指定出来なくて北米とかにつながってしまう。
で、ソースを見ると
RegionInfoっていうクラスに、リージョン名渡して~みたいな感じで出来るのですが、、、
、、、っていうか接続するだけなのに、めんどうだな(-.-;)
って思いました。
それで、よくよくソースを探ってみると、ありました。リージョン指定で接続するメソッドが。
その名も
connect_to_region('リージョン名')
ずばりですね。
ってことで、これで簡単にリージョン指定で接続できます。
下記は、インタラクティブシェルを使って、東京リージョンのEC2で新規インスタンスをあげる例です。
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サービスのエンドポイント一覧は、こちら。
おしまい。
、、、っていうか接続するだけなのに、めんどうだな(-.-;)
って思いました。
それで、よくよくソースを探ってみると、ありました。リージョン指定で接続するメソッドが。
その名も
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サービスのエンドポイント一覧は、こちら。
おしまい。