質問: os.environ.get('AWS_SECRET_ACCESS_KEY') ``` ### 試したこと 試しに本番環境(EC2)のsettings.pyにアクセスキーなどを直書きしたところS3への保存は成功しましたので、環境変数の読み取りが問題だと考えています。 更にechoでも本番環境にて環境変数を持って来れますし、本番環境でpythonのshellを立ち上げて ``` import os os.environ.get('AWS_ACCESS_KEY_ID') ``` というように打つと設定した環境変数が返ってきます。 ちなみに開発環境(ローカル)ではbash_profileに環境変数を記述し、settings.pyを同様の記述にしていますが、問題なくS3に保存できています。 ### 補足情報(FW/ツールのバージョンなど) python:3.6.7(開発・本番同様) django:2.1.5(開発・本番同様) 開発環境(ローカル)OS:macOS Mojave 10.14.1 本番環境(EC2)OS:ubuntu 18.04.1
回答: Django の実行ユーザーが root や一般ユーザーなのか、Webサーバーの実行ユーザー(apache, nginx など)なのかわかりませんが、そのユーザーに環境変数を設定する必要があるのではないでしょうか。 また、シェルを介さないでプロセスが起動する場合、~/.profile などの設定は読み込まれません。 AWS ならば、`role` を用意して、EC2 インスタンスに紐付けると、python boto ライブラリが自動的に role のアクセスキー/シークレットキーを使うと思います。