Неправильное развертывание приложения WSGI в AWS с использованием Elastic Beanstalk

8

перекрестная ссылка на форумы AWS

Я разработал простой веб-сервис Python с использованием WSGI и хотел бы развернуть его в облаке AWS с помощью Elastic Beanstalk. Моя проблема в том, что я не могу сделать все параметры, указанные в конфигурации Elastic Beanstalk, правильно настроенными в облаке.

Для развертывания я использую Elastic Beanstalk CLI. Я выполнил eb initкоманду и настроил необходимые параметры. После этого .elasticbeanstalkв моем исходном дереве был создан каталог с именем . Он имеет два файла конфигурации, которые используются для развертывания, а именно configи optionsettings. Последний из других параметров содержит конфигурацию WSGI, которая должна обновляться /etc/httpd/conf.d/wsgi.confв экземплярах. После некоторых моих настроек файл имеет следующие настройки:

[AWS: elasticbeanstalk: применение: окружающая среда]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

[AWS: elasticbeanstalk: Контейнер: Python]
WSGIPath = handler.py
NumProcesses = 2
StaticFiles = / static =
NumThreads = 10

[AWS: elasticbeanstalk: Контейнер: Python: staticfiles]
/ статический = статический /

[AWS: elasticbeanstalk: hostmanager]
LogPublicationControl = false

[AWS: автомасштабирование: launchconfiguration]
InstanceType = t1.micro
EC2KeyName = zmicier-aws

[AWS: elasticbeanstalk: применение]
URL проверки работоспособности приложения = 

[AWS: автомасштабирование: ASG]
MaxSize = 10
MinSize = 1
Пользовательские зоны доступности = 

[AWS: elasticbeanstalk: мониторинг]
Автоматически завершить нездоровые экземпляры = true

[AWS: elasticbeanstalk: SNS: темы]
Конечная точка уведомления = 
Протокол уведомлений = электронная почта

Оказывается, что не все эти параметры рассматриваются, когда я запускаю среду или обновляю ее. Таким образом, когда я обновляю NumThreadsили NumProcesses, соответствующие параметры изменяются в wsgi.confсоответствии с ожиданиями. Но все , что я пишу в WSGIPathи StaticFilesпараметры, я не в состоянии автоматически изменить соответствующие значения wsgi.conf, они остаются

Alias /static /opt/python/current/app/
WSGIScriptAlias / /opt/python/current/app/application.py

что сводит меня с ума. Более того, когда я развертываю свое приложение, используя git aws.pushи имея следующее содержимое .ebextensions/python.configфайла, ни один из указанных в нем параметров не влияет на развертывание.

option_settings:
     - пространство имен: aws: эластичный стебель: контейнер: python
       имя_опции: WSGIPath
       значение: mysite / wsgi.py
     - пространство имен: aws: эластичный стебель: контейнер: python
       имя_опции: NumProcesses
       значение: 5
     - пространство имен: aws: эластичный стебель: контейнер: python
       имя_опции: NumThreads
       значение: 25
     - namespace: aws :asticbeanstalk: контейнер: python: статические файлы
       имя_опции: / статический /
       значение: приложение / статическое / 

Интересно, что мне нужно сделать, чтобы AWS использовал все параметры, которые я указал в конфигурации, а именно: путь WSGI и путь к моим статическим данным.

Zmicier Zaleznicenka
источник
У меня есть эта проблема. Я не могу заставить WSGIPath обновляться сейчас, прибегаю к созданию новой среды. Это какая - то серьезная «WTF» территория ...
aendrew

Ответы:

1

Возможно, вы захотите взглянуть на создание контейнера Docker и его развертывание в Elastic Beanstalk. У AWS есть образец Python для этого по адресу https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample и полное репозиторий github по адресу https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Это будет намного проще для локального тестирования, и у вас будет гораздо больше гибкости. Мое эмпирическое правило заключается в том, что, как только я потрачу время на борьбу со структурой, которая должна сделать мою жизнь проще, наступает время менять подход. Я бы сказал, что вы достигли этой точки.

Это также облегчит миграцию вашего приложения на что-то вроде Fargate в будущем.

Сэм Баштон
источник
0

Рассмотрите возможность использования .ebextensions, документированных на:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

Вы можете использовать file:для предоставления вашего файла конфигурации по мере необходимости на экземпляре хоста. А затем перезагрузите / перезагрузите, в случае необходимости, сcommand:

hargut
источник