Implementación incorrecta de la aplicación WSGI en AWS con Elastic Beanstalk

8

enlaces cruzados a foros de AWS

He desarrollado un servicio web simple de Python usando WSGI y me gustaría implementarlo en la nube de AWS usando Elastic Beanstalk. Mi problema es que no puedo hacer que todas las opciones que especifique en la configuración de Elastic Beanstalk se configuren correctamente en la nube.

Para la implementación, utilizo la utilidad CLI Elastic Beanstalk. Ejecuté el eb initcomando y configuré los parámetros requeridos. Después de esto, .elasticbeanstalkse creó un directorio llamado en mi árbol de origen. Tiene dos archivos de configuración que se utilizan para la implementación, a saber, configy optionsettings. La última de las otras opciones contiene la configuración WSGI que debe actualizarse /etc/httpd/conf.d/wsgi.confen las instancias. Después de algunos de mis ajustes, el archivo tiene la siguiente configuración:

[AWS: elasticbeanstalk: aplicación: entorno]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

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

[aws: elasticbeanstalk: contenedor: python: archivos estáticos]
/ static = static /

[aws: elasticbeanstalk: hostmanager]
LogPublicationControl = false

[aws: autoescalado: configuración de lanzamiento]
InstanceType = t1.micro
EC2KeyName = zmicier-aws

[AWS: elasticbeanstalk: aplicación]
URL de comprobación de estado de la aplicación = 

[aws: autoscaling: asg]
MaxSize = 10
Tamaño mínimo = 1
Zonas de disponibilidad personalizadas = 

[AWS: elasticbeanstalk: monitoreo]
Terminar automáticamente instancias no saludables = verdadero

[aws: elasticbeanstalk: sns: temas]
Punto final de notificación = 
Protocolo de notificación = correo electrónico

Resulta que no todas estas opciones se consideran cuando inicio el entorno o lo actualizo. Por lo tanto, cuando actualizo NumThreadso NumProcesses, los parámetros respectivos se modifican wsgi.confcomo se esperaba. Pero sea lo que sea que escriba en los parámetros WSGIPathy StaticFiles, no puedo cambiar automáticamente los valores respectivos de wsgi.conf, permanecen

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

lo que me vuelve loco Además, cuando implemento mi aplicación usando git aws.pushy teniendo los siguientes contenidos de .ebextensions/python.configarchivo, ninguna de las opciones que especifico afecta la implementación.

opciones_configuraciones:
     - espacio de nombres: aws: elasticbeanstalk: contenedor: python
       nombre_opción: WSGIPath
       valor: mysite / wsgi.py
     - espacio de nombres: aws: elasticbeanstalk: contenedor: python
       nombre_opción: NumProcesses
       valor: 5
     - espacio de nombres: aws: elasticbeanstalk: contenedor: python
       nombre_opción: NumThreads
       valor: 25
     - espacio de nombres: aws: elasticbeanstalk: contenedor: python: staticfiles
       nombre_opción: / static /
       valor: app / static / 

Me pregunto qué debería hacer para forzar a AWS a utilizar todos los parámetros que especifique en la configuración, a saber, la ruta WSGI y la ruta a mis datos estáticos.

Zmicier Zaleznicenka
fuente
Estoy teniendo este problema Parece que no puedo actualizar WSGIPath ahora, he recurrido a la creación de un nuevo entorno. Este es un territorio serio de "WTF" ...
aendrew

Respuestas:

1

Es posible que desee ver la construcción de un contenedor Docker e implementarlo en Elastic Beanstalk. AWS tiene una muestra de Python para hacer esto en https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample y un repositorio completo de github en https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Será mucho más fácil realizar pruebas locales, y tendrá mucha más flexibilidad. Mi regla general es que una vez que paso tiempo luchando contra el marco que debería hacerme la vida más fácil, es hora de cambiar el enfoque. Diría que has llegado a ese punto.

También facilitará la migración de su aplicación a algo como Fargate en el futuro.

Sam Bashton
fuente