Despliega con seguridad tu proyecto en Elastic Beanstalk usando Python y Flask. Aquí verás cómo crear el entorno, realizar el primer deployment, adaptar tu código a WSGI (clave: renombrar a application.py y añadir application = app), y configurar escalado con load balancer, monitoreo y rollback. Todo directo, sin rodeos y listo para producción.
¿Cómo crear y desplegar una aplicación en Elastic Beanstalk?
Para iniciar, entra a la consola, abre All Services si está colapsado y ve a Elastic Beanstalk. Crea una nueva aplicación: asigna nombre, elige plataforma y arranca con la aplicación de ejemplo para que el entorno provisionado funcione de inmediato.
Da clic en crear aplicación: se aprovisiona un Elastic Load Balancer, una instancia con Python y la red asociada.
Observa eventos: verás cuándo se actualiza el ambiente y cuándo termina el deployment de la nueva versión.
Usa la URL generada: primero apunta a la app por defecto y luego servirá tu zip con el código.
Puertos y seguridad: se abren 80 para HTTP y 443 para HTTPS; antes trabajaste en 5000.
¿Qué plataformas y versiones puedes elegir?
Puedes seleccionar entre múltiples plataformas preconfiguradas: Docker, Java Enterprise con Tomcat, .NET en Windows con IIS, Go o Python. En el ejemplo se usa Python 3.6 sobre Elastic Beanstalk para una app con Flask.
¿Cómo empaquetar y mover versiones entre ambientes?
Sube un zip con tu código para cada deployment. Esto permite operar con ambientes de desarrollo, test y producción, y colaborar con QA de forma ordenada.
Sube el zip a desarrollo: valida con tu equipo o amigo de QA.
Promueve la versión: de desarrollo a test y luego a producción.
Si algo falla: aplica rollback en minutos.
¿Qué cambios de código exige WSGI y Beanstalk?
La clave está en cumplir el estándar WSGI: Elastic Beanstalk busca un archivo llamado exactamente application.py que exponga un objeto application. Si no existe, marca incompatibilidad con WSGI aunque el resto esté correcto.
Cambia el nombre: de app.py a application.py.
Expón el objeto WSGI: añade application = app.
Crea la carpeta .evextensions: ahí defines la configuración de Flask para que el entrypoint sea application.py.
¿Cómo adaptar app.py a application.py?
El código es el mismo: solo cambia el nombre del archivo y añade la referencia WSGI.
# application.py (antes era app.py)# ... código existente de Flask ...application = app # línea clave para Elastic Beanstalk y WSGI
Sigue usando Flask y tus rutas.
No cambia la lógica: solo el nombre del archivo y la exposición de application.
¿Qué hace la carpeta .evextensions?
Contiene la configuración para que Elastic Beanstalk conozca la app WSGI de Flask: ahí se indica que el archivo de entrada es application.py. Sin esto, no se ejecuta correctamente.
¿Cómo escalar, monitorear y recuperar versiones en Elastic Beanstalk?
Desde la configuración del ambiente puedes pasar de single instance a load balanced. El servicio crea por ti el load balancer, más instancias, permisos y conexiones, manteniendo la misma URL.
¿Cómo configurar un load balancer y autoescalado?
Define capacidad mínima y máxima, y las políticas para crecer o reducir según demanda.
Cambia a entorno balanceado: confirma el cambio y la consola hará el aprovisionamiento.
Reglas de escalado: por utilización de CPU, ancho de banda, latencia o salud del servidor.
Incrementos personalizados: escala de 1 a 5, 10 o 15 instancias si esperas picos fuertes.
Control de crecimiento: ajusta cuánto crece y decrece según tu tráfico.
¿Qué monitoreo y logs tienes disponibles?
Consulta salud, número de instancias, tiempo en ejecución y estado general. Activa métricas extendidas para más detalle.
Métricas: uso de CPU, red entrante y saliente, y más si habilitas métricas extra.
Logs y salud: solicita logs y revisa si las instancias están en ok o rotas.
Parámetros del ambiente: tipo de máquina micro, monitoreo cada cinco minutos y almacenamiento de ocho gigas.
¿Cómo hacer rollback rápido?
La consola guarda versiones históricas: puedes volver atrás si un deployment falla.
Historial de versiones: conserva hasta mil versiones por aplicación y ambiente.
Reversión inmediata: selecciona la versión anterior y despliega de nuevo.
Verificación: revisa la URL tras el rollback y confirma que todo responde.
Además, podrás asignar un alias más claro con Route 53 y explorar almacenamiento en S3 y Glacier para tu código o archivos estáticos en las siguientes prácticas.
¿Te quedó alguna duda sobre el cambio a application.py, el escalado con load balancer o el rollback? Comparte tus preguntas y cuéntame qué parte te gustaría profundizar.
Descomprimir el contenido, acceder a la carpeta de la aplicación eliminar la carpeta .ebextension.
Crear un archivo con el nombre requirements.txt y escribir en él esta línea: Flask==1.0.2
Comprimir solo la carpeta templates y los archivos requirements.txt y application.py. Luego subir ese archivo comprimido tal cual como lo indica el video.
Espero les sirva
Me funciono..aunque al bajar el zip no venia la carpeta .ebextension....Gracias.
Me funcionó gracias.
Qué raro se tuvo que agregar configuración extra a la marcada por el profesor.
@Felipe Carrión la carpeta .ebextension está oculta
Gracias a David por la ayuda! Descarguen ese archivo que si funciona.
Excelente aporte Jose
Gracias
No funcionó
Veo en los comentarios que se tiene que hacer una modificación adicional no indicada en el video, muy mal. Quién hace la edición de los cursos? Iba todo muy bien, esto es un aspecto muy en contra al calificar el curso
en total acuerdo contigo.
En mi caso, con Python 3.8 tuve usar Flask 2.0.3, para que funcionara, las versiones 1.X me causaron fallas.
Este es el error en 2022
Muchas gracias por el aporte. Ya funciona 😀
Hola, voy a dejar por aca los pasos que seguí para que me funcione:
Borrar la carpeta .ebextensions
agregar un archivo requirements.txt con el siguiente contenido
Flask==1.0.2
Haciendo esos pasos pude desplegar de manera correcta el proyecto!
Sigue sin funcionar, seguí estos mismo pasos y no sirvió. Gracias
Tienes que comprimir los 3 archivos:
La carpeta templates
application.py
requirements.txt
Asegúrate de comprimir los 3 archivos y no la carpeta donde están los archivos
No se debe comprimir(.zip) el folder del proyecto. Debes comprimir directamente los archivos del proyecto.
Gracias, esta lista solo para subir.
La solución que a mi me funcionó fue la siguiente:
Eliminar la carpeta .ebextensions
Crear el archivo requirements.txt con el siguiente contenido: Flask==1.0.2
Crear un zip con estos dos archivos y la carpeta templates.
Para tener en cuenta: No se debe comprimir(.zip) el folder del proyecto. Debes comprimir directamente los archivos del proyecto.
Gracias @Cristian Franco por tu aporte.
Tampoco me funcionó
les comparto el archivo que funciona actualizado para aws actualizado a la fecha
funciona
muchas gracias
Amazon EC2
EC2 son un conjunto de máquinas virtuales en línea que puedes utilizar para desarrollo, calidad o producción
chmod 400 <name-key> dar permisos a la key
ssh -i <name-key> ec2-user@<ip> conectarse a la máquina ec2
sudo su volverse root
es un servicio informático que permite ejecutar código sin aprovisionar ni administrar servidores.
Elastic Beanstalk
es una plataforma donde en pocos pasos, obtienes un balanceador de cargas y tantas instancias EC2 como tu quieras.
Amazon S3
Es un repositorio de archivos rápido y perfecto para uso de una aplicación a la hora de crear, manipular y almacenar datos.
Amazon Glacier
Es un servicio de almacenamiento en la nube para archivar datos y realizar copias de seguridad a largo plazo.
Amazon CloudWatch
Observación de sus recursos y aplicaciones de AWS tanto en AWS como locales
Amazon Cognito
Amazon Cognito proporciona autenticación, autorización y administración de usuarios para sus aplicaciones móviles y web. Los usuarios pueden iniciar sesión directamente con un nombre de usuario y una contraseña o a través de un tercero como Facebook, Amazon o Google.
Muy interesante esta información. Deberían arreglar el curso, ya que no es fácil de seguir los ejemplos que envió el profe, si no es por los compañeros que arreglaron el paquete.
Por que me manda esto? lo he bajado tal cual y me manda error our WSGIPath refers to a file that does not exist.
Puedes compartir el stack completo del error? bajaste los archivos de la rama de elastic beanstalk?
Lo baje tal cual, como zip y de hecho verifiqué los archivos y me manda lo mismo.
Profesor, qué pasó?
Nos comimos la parte del contenido del archivo .zip, luego resulta que la carpeta y el archivo nuevo que se crearon no sirvieron para nada (.ebextensions y flask.config). Al final, la única forma de hacerlo funcionar fue creando un archivo requirements.txt tal como señaló @NovoPles
La verdad que estoy muy decepcionado con este curso, no puede ser que este tan desactualizado, mas de 3 horas llevo intentando hacer andar lo dado en esta clase y no hay caso, ya intente absolutamente todo lo que esta en los comentarios y sigue sin andar. Supongo que Platzi no es una forma "Rapida" y "Facil" para aprender como dicen...
Gracias a todos quienes dieron la solución para que esto funcionara, un corazon para todos ustedes y un coscorron para el profesor xD
Efectivamente falta un paso importante en el video el cual es crear el archivo requirements.txt
Este se puede crear ejecutando el comando pip freeze > requirements.txt y debe quedar sobre el mismo nivel del application.py
También se debe tener en cuenta que el comprimido debe ser .zip y que todos los archivos deben quedar en la raiz del mismo
Hola, he tratado de implementar tu solución (creando el archivo requirements.txt), pero me sigue dando el error: "Your WSGIPath refers to a file that does not exist". ¿Tendrás tú la versión final del .zip que habrá que subir para que funcione?
Saludos y gracias.
Intenté tu solucion, aun así persiste el error, nos puedes compartir tu .zip
Update Marzo 2021.
Descarga el repositorio, de application. py borra esto
if __name__ =="__main__": app.run("0.0.0.0",debug=False) #app.run("0.0.0.0",debug=True)
Crea el archivo requirements.txt para instalar las dependencias
flask
Selecciona estos tres items y haz un archivo zip
templates
applications .py
requirements.txt
Todo debe estar bien ahora.
exelente aporte me funcionò a la prefecciòn
Tengo el siguiente problema, cuando intento desplegar el zip, me indica lo siguiente
El intentar abrir la aplicación, este es el resultado
En la configuracion del entorno puedes ir a ver el log de errores, ahi te indica que sucede
¿Estos ambientes también se pueden apagar? ¿Cómo sé si me voy a pasar del uso free?
probablemente cuando uses EB ya estés en una posición donde fijo vas a pagar por el servicio, pero para controlar costos puedes configurar hasta cuanto puede crecer (tal como se ve en el video), tambien puedes monitorizar o poner alarmas. Y si, puedes "apagarlos" en en las Actions