Elastic Beanstalk从shell SSH连接到RDS

时间:2014-01-21 10:31:57

标签: python ssh amazon-ec2 elastic-beanstalk amazon-rds

我在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定义这些变量?

3 个答案:

答案 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。