python amazon-ec2 deployment flask elastic-beanstalk

python - ¿En qué se diferencia la implementación de Flask en AWS Elastic Beanstalk de la ejecución del script?



amazon-ec2 deployment (2)

Los recursos de cómputo elásticos (AWS y otros) generalmente permiten el balanceo dinámico de carga, e inician más recursos de cómputo cuando son necesarios.

Si implementa en una sola instancia de EC2, y esta instancia alcanza su capacidad, sus usuarios experimentarán un bajo rendimiento. Si se implementa de forma elástica, se agregan dinámicamente nuevos recursos para garantizar un rendimiento sin problemas.

¿Cuál es la diferencia entre implementar una aplicación Flask en una instancia ec2 (en otras palabras, ejecutar su script en cualquier computadora) y implementar una aplicación Flask a través de AWS Elastic Beanstalk? La documentación de despliegue del matraz dice que:

Aunque es liviano y fácil de usar, el servidor incorporado de Flask no es adecuado para la producción ya que no se adapta bien y por defecto solo atiende una solicitud a la vez. Algunas de las opciones disponibles para ejecutar Flask correctamente en producción están documentadas aquí.

Una de las opciones de implementación que recomiendan es AWS Elastic Beanstalk. Sin embargo, cuando leí la explanation de Amazon sobre cómo implementar una aplicación Flask, parece que están usando exactamente la misma aplicación de servidor que viene incorporada en Flask, que, por ejemplo, es de un solo hilo y por lo tanto no puede manejar solicitudes simultáneas. Entiendo que Elastic Beanstalk le permite desplegar varias copias, pero parece que todavía usa la aplicación de servidor Flask incorporada. ¿Qué me estoy perdiendo?


TL; DR completamente diferente: ¡Elastic Beanstalk usa un corredor WSGI sensato que es mejor que el servidor de desarrollo Flask!

Sin embargo, cuando leí la explicación de Amazon sobre cómo implementar una aplicación Flask, parece que están usando exactamente la misma aplicación de servidor que viene incorporada en Flask.

Casi, pero no del todo.

Puede confirmar que este no es el caso eliminando la sección de ejecución con servidor incorporado usted mismo, es decir, lo siguiente del ejemplo:

if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production app. application.debug = True application.run()

¡Dejarás de poder ejecutarlo tú mismo de forma local con python application.py pero aún así se ejecutará en EB!

La plataforma EB Python utiliza su propio servidor WSGI (Apache con mod_wsgi, la última vez que lo busqué) y algunas suposiciones / config para encontrar su WSGI invocable:

De la configuración de un proyecto de Python para Elastic Beanstalk :

Por defecto, Elastic Beanstalk busca un archivo llamado application.py para iniciar su aplicación. Si esto no existe en el proyecto de Python que ha creado, es necesario algún ajuste del entorno de su aplicación.

Si revisa los documentos para el espacio de nombres aws:elasticbeanstalk:container:python , verá que puede configurarlo para buscar en otra parte su aplicación WSGI:

WSGIPath : el archivo que contiene la aplicación WSGI. Este archivo debe tener una "aplicación" llamable. Predeterminado: application.py