我在 Elastic Beanstalk for AL2 中的环境变量在哪里?
Posted
技术标签:
【中文标题】我在 Elastic Beanstalk for AL2 中的环境变量在哪里?【英文标题】:Where are my environment variables in Elastic Beanstalk for AL2? 【发布时间】:2021-02-08 20:24:18 【问题描述】:我正在使用elastic beanstalk
部署Django
应用程序。我想在EC2
实例上SSH
执行一些shell 命令,但环境变量似乎不存在。我通过 AWS GUI(配置 -> 环境属性)指定了它们,它们似乎在我的应用程序启动期间工作。
我尝试通过以下方式激活和停用虚拟环境:
source /var/app/venv/*/bin/activate
是否有一些环境(或我可以运行的脚本)来访问设置了所有属性的环境?否则,我几乎无法运行像 python3 manage.py ...
这样的任何命令,因为没有配置设置模块(我知道如何手动指定它,但我的应用程序需要大约 7 个变量才能工作)。
【问题讨论】:
【参考方案1】:尝试在 ssh 进入 EC2 实例后运行命令 /opt/elasticbeanstalk/bin/get-config environment
。
【讨论】:
【参考方案2】:在部署期间,环境属性可随时供您的 .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
部分将所有环境属性作为 YAML 返回,sed
部分将 YAML 输出中的 ': '
替换为 '='
,xargs
部分修复了引用的数字。
请注意,这不需要sudo
。
或者,您可以参考this AWS knowledge center post:
重要提示:在 Amazon Linux 2 上,所有环境属性都集中到一个名为
/opt/elasticbeanstalk/deployment/env
的文件中。您必须在 Elastic Beanstalk 的应用程序部署过程中仅使用此文件。 ...
这篇博文介绍了如何在部署期间使用.platform
挂钩制作env
文件的副本,以及如何设置权限以便您以后可以访问该文件。
您也可以使用 SSH 手动执行类似的步骤。设置好副本并获得适当的权限后,您可以source
它。
小心:
注意:带有空格或特殊字符的环境属性由 Bash shell 解释,并可能产生不同的值。
【讨论】:
另见这些答案:***.com/a/62888738, ***.com/a/62212223 带有特殊字符的环境变量的解决方案是什么?用引号括起来有用吗? @Daniel:不确定。快速搜索出现了一些相关的讨论,其中提到了例如using \\\ or quotes to escape special characters 或 using base64 encoding,但我还没有尝试过。以上是关于我在 Elastic Beanstalk for AL2 中的环境变量在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk:部署 Django for mac,无法安装 EB
使用 AWS Elastic Beanstalk for python 3.6 在后台运行 celery worker 作为守护进程?
Docker-compose.yml for NodeJs with MySQL on AWS Elastic Beanstalk 单容器 Docker
我在哪里创建 .ebextensions 以使其在 AWS Elastic Beanstalk 中工作