Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置

Posted

技术标签:

【中文标题】Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置【英文标题】:Django AWS RDS environment variables not setting in Elastic Beanstalk 【发布时间】:2021-04-08 05:23:00 【问题描述】:

我在 AWS Elastic Beanstalk 实例中使用 Amazon Linux 2 来托管我的 Django Web 服务器。在我的环境中使用 SSH 时,我无法运行 manage.py 命令,因为 os.environ 不包含我的 RDS 数据库的环境变量。因此,当在我的 settings.py 文件中时,我尝试像这样访问数据库:

if 'RDS_DB_NAME' in os.environ:
DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ['RDS_DB_NAME'],
        'USER': os.environ['RDS_USERNAME'],
        'PASSWORD': os.environ['RDS_PASSWORD'],
        'HOST': os.environ['RDS_HOSTNAME'],
        'PORT': os.environ['RDS_PORT'],
    

else:
    DATABASES = 
        'default': 
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'home',
            'USER': '',
            'PASSWORD': '',
            'HOST': 'localhost',
            'PORT': '5432',
        
    

它认为我仍在本地主机上,它给了我一个错误。我该如何解决这个问题?有没有办法通过/opt/elasticbeanstalk/bin/get-config environment 命令加载我的RDS 环境变量,还是有其他不需要SSH 的方法?

更新:

根据@Marcin 的回答,我在本地终端中使用以下命令通过 SSH 连接到我的 EC2 实例并手动进行更新:

eb ssh

(在提示时输入您的密码)

source /var/app/venv/staging-LQM1lest/bin/activate
export $(cat /opt/elasticbeanstalk/deployment/env | xargs)

要进入文件所在的正确目录:

cd /var/app/current

现在你可以运行了:

python manage.py <your command>

希望这会有所帮助。

【问题讨论】:

【参考方案1】:

您可以通过.ebextentions 配置文件运行manage.py,但首先需要加载您的环境变量

由于您没有提供任何配置文件,我可以举例说明您可以尝试基于 Amazon Linux 2 的 EB 平台(对于 AL1 则不同):

container_commands:
  10_run_manage_py:
    command: |
      export $(cat /opt/elasticbeanstalk/deployment/env | xargs)
      source $PYTHONPATH/activate
      python ./manage.py <your command>

以上仅为示例,因此您需要根据自己的设置进行调整。

【讨论】:

我需要更改导出行的任何内容吗?我在 AWS 日志中收到两个导致构建失败的错误 @AdvayRatan 你能用你的10_run_manage_py 和错误消息更新问题吗? @AdvayRatan 你能否也检查一下cfn-init-cmd.log 并找到与执行相关的部分10_run_manage_py 我使用您的命令手动 SSH 到我的实例并进行必要的更改。我想我是从这里得到的。非常感谢。 @AdvayRatan 很高兴听到。如果我的回答有帮助,我们将不胜感激。

以上是关于Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置的主要内容,如果未能解决你的问题,请参考以下文章

将现有 RDS 连接到 Elastic Beanstalk

使用 AWS RDS 的 Django `TransactionTestCase` 测试用例非常慢

Github repo 如何在没有 .env 文件的情况下使用 AWS laravel 弹性 beanstalk 环境变量

如何通过 eb cli (django postgres) 迁移 AWS RDS 数据库?

markdown AWS EC2 Apache + RDS Postgresqlで(geo)djangoで动かすまで

Django/PostgreSQL 全文搜索 - 在 AWS RDS PostgreSQL 上使用 SearchVector 与 SearchVectorField 时的不同搜索结果