我在Elastic Beanstalk EC2实例上有一个python应用程序,它连接到PostgreSQL RDS。
我的应用程序运行正常,并使用Elastic Beanstalk设置的环境变量来连接数据库:
os.environ['RDS_DB_NAME']
os.environ['RDS_USERNAME']
os.environ['RDS_PASSWORD']
os.environ['RDS_HOSTNAME']
os.environ['RDS_PORT']
但是,当我使用SSH登录EC2实例时,这不起作用。未设置RDS环境变量。由于我的应用程序在浏览器中工作,我认为它不能是安全组。我还试图通过激活virtualenv来访问变量。
如果我有SSH连接,如何使弹性beanstalk定义这些变量?
答案 0 :(得分:18)
我想通了这个morgning:
环境变量不是在virtualenv中设置的,而是由另一个脚本设置的。首先,你必须激活virualenv,然后你需要通过激活'current'目录中的 env 脚本来加载变量。像这样:
source /opt/python/run/venv/bin/activate
source /opt/python/current/env
Beanstalk RDS变量现已设置并可供您在SSH中执行的任何脚本使用。
答案 1 :(得分:4)
我没有找到您提到的脚本,但找到了另一种方法来获取相同的信息。
cd /opt/elasticbeanstalk/bin
sudo ./get-config environment
获取配置脚本可让您访问此类别的大量信息:
optionsettings environment option settings that affect instance
container container specific configurations
addons addon configurations
environment environment variables
meta EB environment meta-data
希望它有所帮助。
答案 2 :(得分:1)
不幸的是,环境变量在Elastic Beanstalk容器之外是不可用的。
作为替代方案,您可以将.profile
文件添加到ec2-user
主目录并在那里为SSH会话设置这些环境变量。请记住,该文件将在重建时消失。要使其永久化,请将profile
文件添加到项目中,并使用container命令复制到ec2-user
home。