【发布时间】:2019-06-18 15:41:51
【问题描述】:
我有一个在 NGINX 下的 Linux 服务器上运行的 Django 应用程序。 Django 应用程序的“用户”是www-data。在这个应用程序中,我尝试连接到 AWS IOT,为此我相信 AWS boto3 程序包会尝试在此处找到 AWS 凭证:~/.aws/credentials。问题是用户www-data 没有这样的路径!当我登录到服务器(使用我的真实用户名)并尝试运行一个连接到 AWS 的脚本时,它连接得很好。假设我的用户名是“joe”。确实有一个文件/home/joe/.aws/credentials 包含正确的凭据。这就是为什么当我以用户“joe”运行时脚本运行良好的原因。但是django app运行的时候就不行了,因为没有登录用户www-data,即没有文件/home/www-data/.aws/credentials.
我了解 AWS boto3 让我们设置一个环境变量来指定凭证文件的非标准路径。这个环境变量是AWS_SHARED_CREDENTIALS_FILE,还有一个AWS_CONFIG_FILE。
但是,我不知道如何在 Django 中为用户 www-data 设置环境变量,以便 boto3 现在可以使用该环境变量来指定 AWS 凭证路径。
有人知道怎么做吗?请注意,这是一个生产环境,所以我不能使用任何本地服务器技巧/黑客。
【问题讨论】:
-
你试过了吗? github.com/qnub/django-boto
-
登录到您的服务器。切换到根
su root。mkdir /root/.aws。从您的主目录cp .aws /root/.aws。现在凭据位于服务的正确位置。通常一个 Linux 服务以用户root运行。
标签: django environment-variables aws-sdk boto3 aws-iot