Назад | Перейти на главную страницу

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

перекрестная ссылка на форумы 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:application:environment]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

[aws:elasticbeanstalk:container:python]
WSGIPath = handler.py
NumProcesses = 2
StaticFiles = /static=
NumThreads = 10

[aws:elasticbeanstalk:container:python:staticfiles]
/static = static/

[aws:elasticbeanstalk:hostmanager]
LogPublicationControl = false

[aws:autoscaling:launchconfiguration]
InstanceType = t1.micro
EC2KeyName = zmicier-aws

[aws:elasticbeanstalk:application]
Application Healthcheck URL = 

[aws:autoscaling:asg]
MaxSize = 10
MinSize = 1
Custom Availability Zones = 

[aws:elasticbeanstalk:monitoring]
Automatically Terminate Unhealthy Instances = true

[aws:elasticbeanstalk:sns:topics]
Notification Endpoint = 
Notification Protocol = email

Оказывается, не все эти параметры учитываются при запуске среды или ее обновлении. Таким образом, когда я обновляю 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:
     - namespace: aws:elasticbeanstalk:container:python
       option_name: WSGIPath
       value: mysite/wsgi.py
     - namespace: aws:elasticbeanstalk:container:python
       option_name: NumProcesses
       value: 5
     - namespace: aws:elasticbeanstalk:container:python
       option_name: NumThreads
       value: 25
     - namespace: aws:elasticbeanstalk:container:python:staticfiles
       option_name: /static/
       value: app/static/ 

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

Возможно, вы захотите создать контейнер 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 в будущем.

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

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

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