перекрестная ссылка на форумы 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: