我在 Elastic Beanstalk for AL2 中的环境变量在哪里?

Where are my environment variables in Elastic Beanstalk for AL2?

我正在使用 elastic beanstalk 部署 Django 应用程序。我想在 EC2 实例上 SSH 执行一些 shell 命令,但环境变量似乎不存在。我通过 AWS GUI(配置 -> 环境属性)指定了它们,它们似乎在我的应用程序启动期间工作。

我尝试通过以下方式激活和停用虚拟环境:

source /var/app/venv/*/bin/activate

是否有一些环境(或我可以 运行 的脚本)来访问设置了所有属性的环境?否则,我几乎无法 运行 任何像 python3 manage.py ... 这样的命令,因为没有配置设置模块(我知道如何手动指定它,但我的应用程序需要大约 7 个变量才能工作)。

在 ssh 进入 EC2 实例后尝试 运行 命令 /opt/elasticbeanstalk/bin/get-config environment

部署期间,环境属性随时可供您的 .platform 挂钩脚本使用。

部署后,例如使用eb ssh时,需要手动加载环境属性。

一种选择是使用 EB get-config 工具。环境属性可以单独访问(使用 -k 选项),也可以作为 JSON 或带有键值对的 YAML 对象访问。

例如,export 所有环境属性的一种方法是:

export $(/opt/elasticbeanstalk/bin/get-config --output YAML environment | 
         sed -r 's/: /=/' | xargs)

此处 get-config 部分 returns 所有环境属性作为 YAML,sed 部分将 YAML 输出中的 ': ' 替换为 '=',并且xargs 部分修复了引用的数字。

请注意,不需要 sudo

或者,您可以参考this AWS knowledge center post:

Important: On Amazon Linux 2, all environment properties are centralized into a single file called /opt/elasticbeanstalk/deployment/env. You must use this file during Elastic Beanstalk's application deployment process only. ...

post 描述了如何在部署期间使用 .platform 挂钩制作 env 文件的副本,以及如何设置权限以便您以后可以访问该文件。

您也可以使用 SSH 手动执行类似的步骤。一旦你设置了副本,并获得适当的权限,你就可以 source 它。

注意:

Note: Environment properties with spaces or special characters are interpreted by the Bash shell and can result in a different value.

如果您尝试访问 eb 脚本 elastic beanstalk 中的环境变量 使用这个

$(/opt/elasticbeanstalk/bin/get-config environment -k ENVURL)
{ "Ref" : "AWSEBEnvironmentName" }
    $(/opt/elasticbeanstalk/bin/get-config environment -k ENVURL)