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 init
comando y configuré los parámetros requeridos. Después de esto, .elasticbeanstalk
se creó un directorio llamado en mi árbol de origen. Tiene dos archivos de configuración que se utilizan para la implementación, a saber, config
y optionsettings
. La última de las otras opciones contiene la configuración WSGI que debe actualizarse /etc/httpd/conf.d/wsgi.conf
en 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 NumThreads
o NumProcesses
, los parámetros respectivos se modifican wsgi.conf
como se esperaba. Pero sea lo que sea que escriba en los parámetros WSGIPath
y 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.push
y teniendo los siguientes contenidos de .ebextensions/python.config
archivo, 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.
fuente
Respuestas:
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.
fuente
Considere usar extensiones .ebex documentadas en:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Puede usar
file:
para aprovisionar su archivo de configuración según sea necesario en la instancia del host. Y luego reiniciar / recargar, en caso necesario, concommand:
fuente