【问题标题】:AWS Elastic Beanstalk Environment Variables in PythonPython 中的 AWS Elastic Beanstalk 环境变量
【发布时间】:2016-12-10 15:33:28
【问题描述】:

最近我一直在尝试将 django webapp 部署到 AWS Elastic Beanstalk 并且一切正常。但是,我的应用程序的一部分使用了该 Twitter API,因此我需要导入我的 API 密钥。我的理解是我应该使用配置 > 软件配置 > 环境属性。我设置了这个输入我的密钥,但是当我检查网站时它仍然失败。

我一直在使用它来尝试导入变量,对吗?

import os

os.enviorn.get('TWITTER_ACCESS_TOKEN')

我检查了变量是否进入服务器,当我运行 eb printenv 时,我看到了这个:

 Environment Variables:
     TWITTER_ACCESS_TOKEN = XXXXX
     TWITTER_ACCESS_SECRET = XXXX
     TWITTER_CONSUMER_SECRET = XXXX
     TWITTER_CONSUMER_KEY = XXXXX

任何帮助将不胜感激。

【问题讨论】:

    标签: python django amazon-web-services


    【解决方案1】:

    为了从 AWS Elastic Beanstalk 属性(不是操作系统环境变量)获取系统环境,您需要将其“来源”到您的环境中。对于 Python,EB 属性存储在 /opt/python/current/env 文件中。所以只需运行这个命令:

    source /opt/python/current/env
    

    现在您的环境变量已更新。

    【讨论】:

    • 我认为这不是真的。我刚刚用一个非常简单的 Django 网站进行了测试,添加了一个端点来转储整个环境。我的.ebextensions/foo.config 中的所有aws:elasticbeanstalk:application:environment 变量都在WSGI 进程的环境中(以及container_commands 进程,这就是我间接解决这个问题的方式)。
    【解决方案2】:

    您尝试获取的密钥在您的环境变量中不存在。将代码更改为 - os.environ.get('TWITTER_ACCESS_TOKEN') 或您的环境变量中的任何其他键都可以解决问题。

    【讨论】:

    • 我使用了正确的变量名。我在问题中更改了它以避免将来的混乱。
    • 您是否尝试过 SSH 进入服务器并检查 env var 是否包含所需的值?例如,使用echo $TWITTER_ACCESS_TOKEN
    • 来自eb ssh MY_ENVIRONMENT 我运行了 printenv,但看不到 Twitter API 密钥,echo $TWITTER_ACCESS_TOKEN 也不起作用。 EC2 中是否有我应该检查的特定位置?
    • 但是,如果我运行 . /opt/python/current/env,那么我可以访问它们。所以他们正在进入服务器。
    • 根据我的经验 - 在我的公司中,我们将这些机密保存在 s3 存储桶中,并作为 beanstalk 部署过程的一部分下载到应用程序中。
    猜你喜欢
    • 2015-08-05
    • 2017-02-28
    • 2018-04-27
    • 2012-12-13
    • 2020-11-09
    • 2017-07-24
    • 1970-01-01
    • 2017-07-21
    • 2021-04-08
    相关资源
    最近更新 更多