direnv環境下でpipenv利用時のAWS_PROFILE指定でハマったこと
はじめに
普段AWS_PROFILEの指定は、コマンド実行時に以下のように指定していました。
export AWS_PROFILE=xxxxxxx # any command
pipenv run
時に事前export指定したAWS_PROFILEが適用されずに困ったことがありました。順を追って考えればすぐ判ることだったのですが、コマンド自体を定形化して特に都度の思考を必要としなかったことが原因でした。
AWS_PROFILEに関わらず今後もやってしまいそうなため、自戒含めてまとめてみました。
今回の環境変数の読み込み
direnv 環境にて、pipenv run
を実行する際に、コマンド実行前にAWS_PROFILEをexportするという流れでした。
なお、各設定ファイルで夫々別の AWS_PROFILE を指定しつつ、コマンド実行時のexportもまた違うAWS_PROFILEでした。
.envrc
比較的ポリシーを多く許可して、aws-cliを動作させることが目的の設定です。
export AWS_PROFILE=<project_name>
.env
ReadOnlyのポリシーにしぼり、ローカル環境で外部に影響を及ぼさない前提にてバッチを動かすことが目的の設定です。
AWS_PROFILE=test
export on terminal
プロファイルを明示してhistoryに残すことが目的の設定です。指定するプロファイルは都度変わります。
export AWS_PROFILE=cicd_profile
尚、今回意図したとおりに読み取らせたかったのは terminal で設定したプロファイルであり、実際に動作したのは .env でした。
それぞれのファイルに設定した環境変数が作用するタイミング
設定した場所によっては状況次第で動作しないケースがありえます。作用するのはおおよそ以下の操作前提になります。
.envrc
direnv環境下で他にAWS_PROFILEの指定がない場合。
.env
pipenv run
やpipenv shell
実行時。
気をつけるべき事
.env にAWS_PROFILE を設定した場合、pipenv
経由では事前にexportしても無意味となります。実行するバッチファイル側に引数として渡すような設計にするか、都度.envの中身を一時的に書き換える必要があります。可能であればプロファイル毎にディレクトリを用意すべきかもしれません。
ここまでの変則的なやり方自体が稀かもしれませんが、類似した構成の場合に同じ様なトラブルが発生した際の参考になれば幸いです。