環境構築中にハマったこと
直近でサーバをセットアップしていてはまったネタを幾つか。
なお、両方ともテスト環境では動作していたので、調査に色々と手間取りました。
両方とも、原因は再構築時に色々バージョンが上がっていたことですが、その問題にぶち当たりそうな人がしばらくでそうなのでメモ代わりに。
fluentdのS3-pluginが動作しない。
IAMの権限や各種キー、endpoint指定は正しいが*1 td-agentサービスを立ち上げてS3に保存しようとするタイミングでエラーになる。
色々探してみると、既存の設定ファイルで指定していた s3_endpointが非推奨*2になっており、s3_regionを指定する仕様に変わっていた模様。
古いサンプルだと、s3_endpoint指定の設定ファイルになっているので、既存の仕様にあった設定を行っているかのチェックが必要。
HttpProxyを経由したaws-cliが動かない。
ネットワーク運用のプラクティスから、Proxyを経由してアクセスするようにサーバーを立てる。
その中からAWSのリソースにアクセスするためにHttpProxyを経由して、以下のコマンドを実行してみたがSSLErrorになる。
aws s3 ls > raise SSLError(e) > SSLError: hostname '*******' doesn't match either of 's3-[region].amazonaws.com', ...
もちろん、アクセス権限のあるキーはaws configure済み。
調べてみると、同じ現象と思われるIssueが報告されていた。Python2.6なら動くことも同じ。
https://github.com/aws/aws-cli/issues/864
Proxyの設定とか色々と疑ってみましたが、こちらの原因は、Pythonのhttplib.py*3のIssue7776の対応が マージされて、botocoreの内部で使ってる urllib3/connection.py 内 self._tunnel() の呼び出しで、コメントに書いてある set_hostport が実行されなくなったことで予期した動作が変更されていることでした。
urllib3のリポジトリ見る限り該当箇所は多分修正されているので、対策としては2つです。
- PythonのIssue7776対応前のバージョン(2.7.6以前)を使う
- botocoreのvendoredに入っているurllib3を更新する
一応、両方試しましたが、両方とも動きました。
これにハマる(ハマった)ユースケースとして、
という、まああり得るかもしれない状態だったので、備忘録として残しておきます。
追記 (2015/07/13)
上記の問題については、下記のbotocoreのアップデートでurllib3が更新されたので最新版*5のbotocoreを入れてさえいれば問題は発生しなくなりました。
https://github.com/boto/botocore/commit/0ed96b7a96202b5d6c99ef9c95397395ed30e697