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

13

我正在使用弹性豆荚(Elastic Beanstalk)来部署一个Django应用。我想要SSHEC2实例上执行一些Shell命令,但是环境变量似乎不在那里。 我通过AWS GUI(配置 -> 环境属性)指定了它们,并且它们似乎在我的应用启动时起作用。

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

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

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

3个回答

17

部署期间,环境属性可以在您的.platform钩子脚本中轻松获取。

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

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

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

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

这里的get-config 部分返回所有环境属性作为 YAML 格式,sed 部分将 YAML 输出中的 ': ' 替换为 '='xargs 部分修复带引号的数字。

请注意,此操作不需要 sudo

另外,你可以参考AWS 知识中心文章

重要提示:在 Amazon Linux 2 上,所有环境属性都集中到一个名为 /opt/elasticbeanstalk/deployment/env 的单个文件中。您只能在 Elastic Beanstalk 应用部署过程中使用此文件。...

该文章介绍了如何在部署期间使用 .platform 钩子复制 env 文件,并设置权限以便稍后访问该文件。

你也可以手动执行类似的步骤,使用 SSH。一旦你设置好了副本,并赋予了适当的权限,你就可以通过source 命令来使用它。

请注意:

注意:具有空格或特殊字符的环境属性会被 Bash shell 解释,并可能导致不同的值。


1
还可以查看这些答案:https://dev59.com/pbzpa4cB1Zd3GeqPFihp#62888738,https://dev59.com/B7voa4cB1Zd3GeqP3m4F#62212223 - djvg
环境变量中有特殊字符的解决方案是什么?将它们用引号括起来可以解决吗? - Daniel
@Daniel:不太确定。快速搜索结果显示一些相关讨论,提到例如使用\\或引号来转义特殊字符,或者使用base64编码,但我还没有尝试过这些方法。 - djvg

11

在SSH连接EC2实例后,尝试运行命令/opt/elasticbeanstalk/bin/get-config environment


0
如果您正在尝试在弹性 Beanstalk eb 脚本中访问环境变量,请使用以下代码:

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

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