在Elastic Beanstalk SSH上运行Django命令 -> 缺少环境变量

3

这对我来说一直是一个长期存在的问题,我希望能够解决它 - 我也认为这将有助于很多其他人。我希望在通过SSH登录我的弹性Beanstalk EC2实例后运行Django命令。例如:

python manage.py dumpdata

这不可能的原因是缺少环境变量。它们在服务器启动时存在,但只要服务器运行起来,就会被取消设置(EB将在EC2中创建虚拟环境并从其中删除变量)。
我最近发现有一个预先构建的脚本可以在EC2实例上检索环境变量:
/opt/elasticbeanstalk/bin/get-config environment

这将返回一个字符串化的对象,如下所示:
{"AWS_STATIC_ASSETS_SECRET_ACCESS_KEY":"xxx-xxx-xxx","DJANGO_KEY":"xxx-xxx-xxx","DJANGO_SETTINGS_MODULE":"xx.xx.xx","PYTHONPATH":"/var/app/venv/staging-LQM1lest/bin","RDS_DB_NAME":"xxxxxxx":"xxxxxx","RDS_PASSWORD":"xxxxxx"}

这是我目前卡住的地方。我认为需要一个脚本,可以解析这个对象并将键/值设置为环境变量。我需要能够从ec2实例运行此脚本。
或者在.ebextensions中执行的命令,可以获取变量并设置它们。
我绝对不确定如何继续下一步?我是否忽略了一些明显的东西?有没有人已经为此编写了脚本?这是否是正确的方法?
我需要你的帮助!

相关链接:https://dev59.com/pbzpa4cB1Zd3GeqPFihp,https://dev59.com/xbzpa4cB1Zd3GeqPN5eW,https://dev59.com/B7voa4cB1Zd3GeqP3m4F#62212223 - djvg
1个回答

9

您的环境变量存储在/opt/elasticbeanstalk/deployment/env文件中。

因此,要导出它们,您可以执行以下操作(必须使用root访问该文件):

export $(cat /opt/elasticbeanstalk/deployment/env | xargs)

执行该命令后,您可以使用以下命令确认环境变量的存在:

env

要在您的 .extentions 中使用此功能,您可以尝试以下方法:

container_commands:
  10_dumpdata:
    command: |
      export $(cat /opt/elasticbeanstalk/deployment/env | xargs)
      source $PYTHONPATH/activate
      python ./manage.py dumpdata

谢谢你的回答!我已经看到了文件,并怀疑环境变量也在其中。但是我不知道如何以root身份访问我的eb实例。你有关于这个的任何信息吗? - Xen_mar
1
@Xen_mar 你通过ssh连接到实例,然后执行sudo su -命令。 - Marcin
1
哇,好的 - 你真的为我解决了这个问题。这真是令人兴奋。非常感谢你! - Xen_mar
@Xen_mar 没问题。很高兴问题解决了 :-) - Marcin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接