botoが読む設定ファイル

冒頭で先に結論書くと、botoが読み込む設定ファイルとして、boto.pyami.Configにpathという引数で渡せば基本的にそれが最も優先してロードされると思ってたら、それよりもAWS_CREDENTIAL_FILEという環境変数がさらに優先されるんだったという話。

で、実際の動作を振り返ると、boto/pyami/config.pyをサクッと見たレベルで、まずは、モジュールのロード時に下記の動作をして、BotoConfigLocationsってのが作られる

  • この解説 の通り、基本的には、まず、/etc/boto.cfg, ~/.botoをデフォルト設定ファイルとして読み込んでいる
  • 次は、BOTO_CONFIG, BOTO_PATHという環境変数を参照していて、ここに設定されたファイルを読んでいる

んで、Configクラスの初期化時に下記のように動作するっぽい。

  • do_loadがTrueで、且つ、path or fpが渡されれば、BotoConfigLocationsより優先してロードされる
  • が、そのあと、環境変数にAWS_CREDENTIAL_FILEが定義されていれば、そっちをロードする

罠っぽいのは、path or fpが引数で渡されていたとしても、AWS_CREDENTIAL_FILEが定義されている場合の処理は一番最後にdo_loadがTrueでさえあれば常に実行されてしまうので、path, fpを渡しても環境変数のAWS_CREDENTIAL_FILEの定義が優先されるとこ。

いや、ソース嫁以外のなにものでもないんですけど、これで1時間くらいハマった。。。なにはともあれ、path渡しとけばそれが優先されるかなーとなんとなく思ってたら注意。