【问题标题】:Run Django commands on Elastic Beanstalk SSH -> Missing environment variables在 Elastic Beanstalk SSH 上运行 Django 命令 -> 缺少环境变量
【发布时间】:2021-03-11 13:23:10
【问题描述】:

所以这对我来说是一个长期存在的问题,我很想解决它 - 我也认为它会帮助很多其他人。我很想在我的 Elastic Beanstalk EC2 实例上 ssh 后运行 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 执行的命令,该命令将获取变量并设置它们。

我现在完全不确定如何进行吗?我在这里忽略了一些明显的东西吗?是否有人已经为此编写了脚本?这甚至是正确的方法吗?

我很想得到你的帮助!

【问题讨论】:

标签: django amazon-web-services amazon-ec2 amazon-elastic-beanstalk


【解决方案1】:

您的环境变量存储在/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

【讨论】:

  • 感谢您的回答!我已经看过该文件,并怀疑 env 变量也在那里。但我不知道如何以 root 身份访问我的 eb 实例。你有这方面的信息吗?
  • @Xen_mar 你ssh到实例,然后结束sudo su -
  • 哇,好的 - 你真的为我解决了这个问题。这真的很令人兴奋。非常感谢!
  • @Xen_mar 没问题。很高兴它解决了:-)
猜你喜欢
  • 2019-10-04
  • 2014-04-29
  • 2017-05-05
  • 2015-06-08
  • 2015-08-05
  • 1970-01-01
  • 2021-04-08
  • 2020-11-09
  • 2017-07-24
相关资源
最近更新 更多