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

Xen*_*mar 3 django amazon-ec2 amazon-web-services amazon-elastic-beanstalk

所以这对我来说是一个长期存在的问题,我很想解决它 - 我也认为这会帮助很多其他人。我希望在 Elastic Beanstalk EC2 实例上进行 ssh 操作后运行 Django 命令。例如

python manage.py dumpdata
Run Code Online (Sandbox Code Playgroud)

这是不可能的原因是缺少环境变量。它们在服务器启动时存在,但在服务器运行后立即取消设置(EB 将在 EC2 中创建虚拟环境并从那里删除变量)。

我最近发现有一个预构建的脚本可以检索 EC2 实例上的环境变量:

/opt/elasticbeanstalk/bin/get-config environment
Run Code Online (Sandbox Code Playgroud)

这将返回一个字符串化对象,如下所示:

{"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"}
Run Code Online (Sandbox Code Playgroud)

这就是我目前陷入困境的地方。我认为需要一个脚本,该脚本使用该对象解析它并将键/值设置为环境变量。我需要能够从 ec2 实例运行此脚本。

或者从 .ebextensions 执行的命令将获取变量并设置它们。

我现在完全不确定如何继续吗?我在这里忽略了一些明显的事情吗?有人已经为此编写了脚本吗?这是正确的方法吗?

我很乐意得到你的帮助!

Mar*_*cin 9

您的环境变量存储在/opt/elasticbeanstalk/deployment/env

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

export $(cat /opt/elasticbeanstalk/deployment/env | xargs)
Run Code Online (Sandbox Code Playgroud)

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

env
Run Code Online (Sandbox Code Playgroud)

要在您的 中使用它.extentions,您可以尝试:

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