Переменные среды Django AWS RDS, не заданные в Elastic Beanstalk

#python #django #amazon-web-services #amazon-elastic-beanstalk #amazon-rds

#питон #django #amazon-веб-сервисы #амазонка-эластичный бобовый стебель #amazon-rds

Вопрос:

Я использую Amazon Linux 2 в экземпляре AWS Elastic Beanstalk для размещения моего веб-сервера Django. При использовании SSHing в моей среде я не могу запустить 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',
        }
    }
 

Он думает, что я все еще нахожусь на локальном хостинге, и выдает мне сообщение об ошибке. Как мне обойти это? Есть ли способ загрузить в мои переменные среды RDS с помощью /opt/elasticbeanstalk/bin/get-config environment команды или есть другой способ, который не требует 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:

Вы можете запустить manage.py свой .ebextentions конфигурационный файл, но сначала необходимо загрузить переменные среды.

Поскольку вы не предоставили никакого файла конфигурации, я могу просто привести пример того, что вы могли бы попробовать для платформы EB на базе Amazon Linux 2 (для AL1 это другое):

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

Приведенное выше является только примером, поэтому вам нужно будет настроить его в соответствии с вашими настройками.

Комментарии:

1. Нужно ли мне что-либо менять в строке экспорта? Я получаю две ошибки в журнале AWS, которые приводят к сбою сборки

2. @AdvayRatan Можете ли вы обновить вопрос с вашими 10_run_manage_py сообщениями и сообщениями об ошибках.

3. @AdvayRatan Можете ли вы также проверить cfn-init-cmd.log и найти часть, связанную с выполнением 10_run_manage_py .

4. Я использовал ваши команды, чтобы вручную подключиться к своему экземпляру по SSH и внести необходимые изменения. Я думаю, что я понял это отсюда. Большое спасибо.