botoって??
AWSを操作するPython用のSDKのことだそうな。(Python以外のSDKにもコードネームほしい
準備
インストール
pipコマンドで入れるのが楽そうです
$ sudo yum install python-pip
$ sudo pip install boto
認証情報(AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEY)の設定
コードにベタ書きはしたくないので設定ファイルに定義する。
どうやら、「/etc/boto.cfg」、「~/.boto」の順に探すみたいで、今回はユーザ毎にしておきたいので、~/.botoに以下のフォーマットに従って定義する
[Credentials]
aws_access_key_id = <your access key>
aws_secret_access_key = <your secret key>
番外:これでハマりました。。。
ドキュメントには見当たらなかったのですが、botoの実装みると、環境変数に"AWS_CREDENTIAL_FILE"が定義されているか確認して、定義されていればそちらの設定を優先するロジックになっています。
当初botoのimportでConfigPaserクラスでエラーが出て「え???」となってしまったのですが、
AWS_CREDENTIAL_FILEに設定されていたファイルのヘッダー(1行目)に、「==========」という文字列が含まれていることが原因でした。あまり同じエラーで悩む人はいないと思いますが、参考までに。(そもそもなぜにそんなヘッダーになっていたのか謎。。
実装してみる
import boto
import boto.ec2
from boto.ec2.connection import EC2Connection
from boto.ec2.regioninfo import RegionInfo
import re
def get_ec2_instances(region_end_point, re_pt):
region = RegionInfo(endpoint = region_end_point)
ec2_connection = boto.ec2.connection.EC2Connection(region = region)
result = []
instances = [i for r in ec2_connection.get_all_instances() for i in r.instances]
for i in instances:
if re_pt.match(i.tags['Name']):
result.append(i)
return result
if __name__ == "__main__":
re_pt = re.compile('production')
ec2_instance_list = get_ec2_instances('ec2.ap-northeast-1.amazonaws.com', re_pt)
print(ec2_instance_list)
これで東京リージョンから"production"というプレフィックスをインスタンス名とするEC2のインスタンス情報を取得できました。
所感など
- Python始めて書いたけど、慣れてくると気持ちいいかもしれない。
- インデントが強制されることで、フォーマットが統一できるのはいいですね。(ツールやルールでの強制は破れてしまう可能性があるしめんどうなので。。)
- もっとスマートな書き方があればどなたか教えてください。