Nombre: | Tutorial #1 – Elastic Beankstalk |
Duración: | 60 minutos |
Profesor responsable | Mario Villamizar |
Pre-Requisitos: | Python + Flask + Git + AWS IaaS |
Objetivos
Al finalizar el tutorial el estudiante estará en capacidad de:
Requisitos para desarrollar el tutorial
En particular se utilizarán los siguientes recursos:
Amazon Elastic Beanstalk es un servicio de plataforma para desplegar aplicaciones en la nube de Amazon Web Services automatizando la gestión de recursos de infraestructura. En Amazon Elastic Beanstalk, puede implementar y administrar rápidamente aplicaciones en la nube de AWS sin preocuparse por la infraestructura que ejecuta esas aplicaciones, caso contrario a Amazon EC2. Amazon Elastic Beanstalk reduce la complejidad de la gestión sin restringir la elección o el control.
En Amazon Elastic Beanstalk simplemente el desarrollador carga su aplicación en el PaaS sin aprovisionar instancias de cómputo y el servicio administra automáticamente los detalles de aprovisionamiento de capacidad, equilibrio de carga, escalado y monitoreo del estado de la aplicación.
Amazon Elastic Beanstalk es un servicio que responde a la necesidad de los desarrolladores de software de desplegar y acceder un sitio web en línea sin mucha configuración y gestión de la infraestructura. Con AWS Elastic Beanstalk, puede implementar aplicaciones web desarrolladas en Java, Python, .NET, PHP. y varios otros lenguajes sin tener que dedicar demasiado tiempo a configurar servidores, e incluso desplegar fácilmente contenedores Docker para aquellos lenguajes que no son soportados de forma nativa.
Elastic Beanstalk se utiliza para implementar y escalar aplicaciones utilizando servidores como Apache, Nginx e IIS. Para utilizar este servicio, el desarrollador tiene que cargar el código en AWS, y Elastic Beanstalk gestiona automáticamente todos los procesos de implementación y capacidad.
Los principales beneficios de Amazon Elastic Beanstalk incluyen una configuración del servidor que ahorra tiempo, una configuración robusta y un precio rentable. Elastic Beanstalk automatiza la instalación, configuración y aprovisionamiento de otros servicios de AWS como EC2, RDS y Elastic Load Balancing para crear un servicio web. El desarrollador puede iniciar sesión en su consola de administración de AWS y tener un sitio nuevo y accesible en muy poco tiempo, con un ambiente estándar.
Esta automatización puede ahorrar un tiempo al manejar todas las cosas que deben completarse para el despliegue de una aplicación. Hay otros servicios como Heroku (explorado en cursos previos) que también realizan estas tareas. La configuración automatizada de Elastic Beanstalk ayuda a evitar errores que ocurren por perder pequeños detalles en configuraciones tradicionales.
Elastic Beanstalk se encarga de todos los recursos que requiere una aplicación en la nube de AWS, por lo que puede observar que se crean recursos de EC2, ver las instancias y acceder a ellas. Puede actualizar el archivo de configuración de la base de datos. Puede actualizar el grupo de seguridad para todas las instancias.
Es importante resaltar que las implementaciones en AWS Elastic Beanstalk tomarían al menos cinco minutos y, a veces, se extenderían hasta 15 para un sitio con solo dos interfaces. Con más servidores, las implementaciones podrían demorar aún más. Puede que esto no parezca mucho, pero puede ser crítico si está tratando de responder en tiempo real.
En conclusión, Elastic Beanstalk facilita implementar actualizaciones de nuestras aplicaciones y al mismo tiempo aprovechar la poderosa infraestructura de Amazon, mejorar el proceso de implementación con contenedores, como Docker, agregará aún más versatilidad. Gracias al control de grano fino que ofrece Elastic Beanstalk, podemos elegir las tecnologías que mejor funcionan para un producto. Si bien, ciertamente no es una herramienta perfecta, si está buscando reducir las operaciones del sistema y solo concentrarse en lo que está desarrollando, Elastic Beanstalk es una opción sólida.
El código de la aplicación lo encuentra en el siguiente repositorio de GitHub:
https://github.com/WeimarG/taller-beanstalk.git
La aplicación es una pequeña API en Python y Flask con dos endpoints.
Endpoint | / |
Descripción | Lista la información de todos los héroes registrados en plataforma. |
Método | GET |
Retorno | application/json, con todos los héroes registrados en plataforma. |
Parámetros del Endpoint | Ninguno |
Endpoint | /<int:id_heroe> |
Descripción | Permite recuperar la información de un héroe registrado en plataforma. |
Método | GET |
Retorno | application/json. Con un diccionario que representa la información de un héroe. |
Parámetros del Endpoint | Ninguno. |
En este tutorial desplegaremos una aplicación web básica construida en Python y el framework Flask en Amazon Elastic Beanstalk. Para esto debemos iniciar sesión con nuestras credenciales en la consola de administración web de AWS.
Ilustración 1. Consola de administración de AWS
En el menú Servicios seleccione Elastic Beanstalk en la categoría de informática.
Ilustración 2. Menú de servicios de AWS - Seleccione Elastic Beanstalk
Ahora estamos en el asistente de Amazon Elastic Beanstalk, para aprovisionar el ambiente en el recuadro Empezar presione el botón Create Application.
Ilustración 3. Vista del AWS Elastic Beanstalk
El asistente de AWS Elastic Beanstalk lo primero que le solicitará es que indique el tipo de carga de trabajo que va a ser lanzada en la nube. En este caso seleccione Entorno del Servidor Web dado que vamos a desplegar una aplicación web desarrollada en Python.
Ilustración 4. Selección del tipo de entorno en Elastic Beanstalk
El asistente de Elastic Beanstalk le solicitará asignar un nombre a su aplicación. Asigne el nombre de su preferencia.
Ilustración 5. Asignación del nombre de la aplicación en Elastic Beanstalk
El asistente le solicitará un nombre para el ambiente de trabajo y también un nombre de subdominio, si no asigna un nombre para el subdominio AWS Elastic Beanstalk generará uno automático por defecto. Ingrese los valores de su preferencia.
Ilustración 6. Asignación del nombre del entorno y el subdominio de la aplicación en Elastic Beanstalk
En la sección plataforma seleccionamos el ambiente de ejecución que debe aprovisionar Elastic Beanstalk, seleccione la opción Plataforma administrada y seleccione en Plataforma, Python como lenguaje de programación.
Ilustración 7. Selección del ambiente de ejecución y lenguaje de programación de la aplicación en Elastic Beanstalk
Nuestra configuración deberá ser similar a la presentada a continuación.
Ilustración 8. Ambiente y lenguaje seleccionado en Elastic Beanstalk
Finalmente, el último paso está asociado al código fuente de nuestra aplicación. Vamos a cargar el ejemplo por defecto de AWS Elastic Beanstalk y luego subiremos nuestra aplicación para validar lo fácil que es aprovisionar recursos y migrar versiones de nuestras aplicaciones. Seleccione la opción Aplicación de muestra y presione el botón Crear un entorno.
Ilustración 9. Carga del código fuente de la aplicación en Elastic Beanstalk
Al presionar el botón Crear un entorno, AWS Elastic Beanstalk iniciara el proceso de aprovisionar y automatizar la configuración del ambiente de trabajo. Recuerde que este proceso puede tomar entre 5 y 15 minutos.
Ilustración 10. Proceso de aprovisionamiento de Elastic Beanstalk
Al finalizar el proceso de aprovisionamiento, Elastic Beanstalk le mostrara una vista con el resultado y la URL de acceso a la aplicación.
Ilustración 11. Estado el entorno creado en Elastic Beanstalk
En la barra lateral izquierda podemos listar nuestros ambientes y podemos visualizar el estado de nuestras aplicaciones. Desde la vista anterior o desde la vista del ambiente ingrese a la URL de la aplicación.
Ilustración 12. Estado del entorno en Elastic Beanstalk
En este enlace se encontrará una aplicación desarrollada en Python, es una página de ejemplo desarrollada y provisionada por AWS. Esta página contiene enlaces a documentación de AWS con las instrucciones para aprovisionar aplicaciones Python con los frameworks más populares.
Ilustración 13. Aplicación de muestra desplegada en Elastic Beanstalk
Desde el panel de AWS Elastic Beanstalk, en nuestro ambiente, seleccione la opción versiones de la aplicación. Como puede observar Beanstalk nos indica que estamos usando la aplicación de muestra, si ingresamos al enlace podemos ver la documentación de la aplicación y descargar su código fuente en diferentes lenguajes de programación.
Ilustración 14. Código fuente de la aplicación de muestra cargada en Elastic Beanstalk.
En la ilustración anterior podemos enlazarnos a la documentación de la aplicación de muestra y en sus diferentes versiones para distintos lenguajes de programación.
Ilustración 15. Documentación de la aplicación de muestra desplegada en Elastic Beanstalk
Clone el repositorio de GitHub en su ambiente local. Ya descargado el repositorio de nuestra aplicación Flask procederemos a cargar está en AWS Elastic Beanstalk, para esto comprima el código descargado en un archivo con extensión zip. Usted se encontrará con una estructura similar a la siguiente:
Ilustración 16. Proyecto descargado de Git Hub
El proyecto debe contener un archivo principal llamado application.py, este es el punto de entrada de la aplicación. El proyecto debe contener un archivo requirements.txt, que contiene todas las dependencias de la aplicación. Finalmente, es necesario agregar archivos de configuración de AWS Elastic Beanstalk (.ebextensions) al código fuente de la aplicación web a fin de configurar el entorno y personalizar los recursos de AWS. Los archivos de configuración son documentos con formato YAML o JSON y con una extensión de archivo .config que se sitúan en una carpeta llamada .ebextensions y se implementan en el paquete de código fuente de la aplicación. Para profundizar en la configuración de los archivos con extensión .ebextensions consulte la referencia [4].
Ahora deberá comprimir todos los archivos juntos (incluida la carpeta oculta) para cargar la aplicación en Elastic Beanstalk. Nombre el archivo zip con cualquier nombre de su preferencia. Ahora debería tener la aplicación en un archivo zip con la siguiente estructura:
Ahora desde la vista de Versiones de la aplicación, presione el botón Cargar.
Ilustración 17. Interfaz para cargar una nueva aplicación en el entorno aprovisionado en Elastic Beanstalk
Asigne una nueva etiqueta a la versión de la aplicación, y presione el botón Elegir archivo, cargue su archivo zip.
Ilustración 18. Panel de carga de la aplicación
Marcado como listo el archivo presione el botón Cargar.
Ilustración 19. Panel de carga de la aplicación
Cargada la aplicación en AWS Elastic Beanstalk la podremos visualizar en la lista de versiones.
Ilustración 20. Aplicaciones cargadas en el entorno generado en Elastic Beanstalk
Seleccione la versión recientemente cargada, presione el botón Acciones y seleccione la opción Implementar.
Ilustración 21. Implementar y desplegar la aplicación recientemente cargada
AWS Elastic Beanstalk nos mostrará una ventana emergente en la que confirmaremos si es la versión del código que deseamos desplegar, el ambiente y la URL. Presione el botón Implementar.
Ilustración 22. Presione el botón implementar para desplegar la aplicación recientemente cargada
AWS Elastic Beanstalk tomará un par de minutos en este proceso y nos indicará si fue posible aprovisionar la aplicación con éxito.
Ilustración 23. Notificación de Elastic Beanstalk sobre el despliegue de la aplicación cargada
En la sección de entorno podremos validar si la aplicación ya está disponible.
Ilustración 24. Proceso de despliegue de la nueva aplicación en el ambiente aprovisionada en Elastic Beanstalk
Cuando esté disponible el dominio estará resaltado como disponible y podremos acceder a la aplicación web.
Ilustración 25. Enlace habilitado para el acceso a la aplicación aprovisionada
Acceso a la aplicación desde la consola de AWS.
Ilustración 26. Resultado de la ejecución de la aplicación
GET http://ENV_NAME.us-east-1.elasticbeanstalk.com/
GET http://ENV_NAME.us-east-1.elasticbeanstalk.com/0
[1] AWS Elastic Beanstalk -
https://aws.amazon.com/es/elasticbeanstalk/
[2] Documentación AWS Elastic Beanstalk -
https://docs.aws.amazon.com/es_es/elastic-beanstalk/index.html
[3] Documentación AWS Elastic Beanstalk: Flask - https://docs.aws.amazon.com/es_es/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
[4] AWS Elastic Beanstalk: Configuration Files -