¿Cuál es la diferencia entre implementar una aplicación Flask en una instancia ec2 (en otras palabras, ejecutar su script en cualquier computadora) e implementar una aplicación Flask a través de AWS Elastic Beanstalk? La documentación de implementación de Flask dice que:
Si bien es liviano y fácil de usar, el servidor integrado de Flask no es adecuado para la producción, ya que no escala bien y, de manera predeterminada, solo atiende una solicitud a la vez. Algunas de las opciones disponibles para ejecutar correctamente Flask en producción se documentan aquí.
Una de las opciones de implementación que recomiendan es AWS Elastic Beanstalk. Sin embargo, cuando leo 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 integrada en Flask, que, por ejemplo, tiene un solo subproceso y, por lo tanto, no puede manejar solicitudes simultáneas. Entiendo que Elastic Beanstalk le permite implementar varias copias, pero aún parece usar la aplicación de servidor Flask integrada. ¿Qué me estoy perdiendo?
TL; DR Completamente diferente: ¡Elastic Beanstalk usa un corredor WSGI sensible que es mejor que el servidor de desarrollo Flask!
Sin embargo, cuando leo 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 integrada en Flask.
Casi, pero no del todo.
Puede confirmar que este no es el caso eliminando usted mismo la sección ejecutar con el servidor incorporado, 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á de poder ejecutarlo usted mismo localmente con python application.py , ¡pero aún se ejecutará felizmente en EB!
La plataforma EB Python usa su propio servidor WSGI (Apache con mod_wsgi, la última vez que miré) y algunas suposiciones/configuraciones para encontrar su WSGI invocable:
De Configuración de un proyecto de Python para Elastic Beanstalk :
De manera predeterminada, 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 realizar algunos ajustes en el entorno de su aplicación.
Si consulta los documentos del espacio de nombres aws:elasticbeanstalk:container:python , verá que puede configurarlo para buscar su aplicación WSGI en otro lugar:
WSGIPath: el archivo que contiene la aplicación WSGI. Este archivo debe tener una "aplicación" invocable. Predeterminado:application.py
Los recursos informáticos elásticos (AWS y otros) generalmente permiten el equilibrio de carga dinámico e inician más recursos informáticos a medida que se necesitan.
Si implementa en una sola instancia ec2 y esta instancia alcanza su capacidad máxima, sus usuarios experimentarán un bajo rendimiento. Si implementa de manera elástica, los nuevos recursos se agregan dinámicamente para garantizar un rendimiento fluido.