2014年4月19日土曜日

botocoreでマルチプロファイルを使う方法。

botocore使ってるAWS CLIは簡単にプロファイル(AWSアカウント)の切替出来るのに、botocoreだとどうやるか分からんかったので調べた。
ただなーんかスマートじゃないんだよね。誰か正しい方法教えてえろい人。

準備

環境はUbuntu13.10。まずはpythonのインストール。多分余計なのも入れてる気がする。

sudo aptitude install python3.3 python3.3-dev build-essential automake libtool pkg-config

続いてbotocoreを持ってきていれる。ここは敢えてAWS CLIは入れてない。

cd ~/git
git clone https://github.com/boto/botocore.git
cd ~/git/botocore
sudo python3.3 setup.py install

configファイルの作成

configファイルってのはプロファイルの集まり。つまりこのファイルに利用したいAWSアカウントのアクセスキー/シークレットアクセスキーを列挙する。
一応このファイルには以下の書式ルールがある。

特に指定がなきゃ「default」が使われる
二個目以後は必ず「profile HOGE」見たいに頭に「profile 」を付ける必要がある。

ファイルの場所はどこでもいい。最終的にAWS_CONFIG_FILE環境変数にこのファイルへのパスを書く。
[default]
aws_access_key_id=AAAA
aws_secret_access_key=BBBB

[profile HOGE]
aws_access_key_id=CCCC
aws_secret_access_key=DDDD

[profile FUGA]
aws_access_key_id=EEEEE
aws_secret_access_key=FFFFF
region=ap-northeast-1

サンプルコード

session毎にprofileが切り替わる。つまりsession毎にAWSアカウントが切り替わる。
get_sessionメソッド実行時に環境変数っぽいけいしきでファイルを引き渡すとそれを元に、sessionを作ってくれるっぽい。

import botocore.session

# 特に指定しないと default が読まれる。
session = botocore.session.get_session()
ec2 = session.get_service('ec2')
operation = ec2.get_operation('DescribeInstances')
endpoint = ec2.get_endpoint('us-east-1')
http_response, response_data = operation.call(endpoint)
print(response_data)

# HOGEアカウントを指定したい場合
EnvironmentVariables = {
    'profile': ('HOGE', 'HOGE', 'HOGE'),
}
session = botocore.session.get_session(EnvironmentVariables)
ec2 = session.get_service('ec2')
operation = ec2.get_operation('DescribeInstances')
endpoint = ec2.get_endpoint('us-east-1')
http_response, response_data = operation.call(endpoint)
print(response_data)