Nombre: | Tutorial #3 - AWS CodePipeline sobre AWS Elastic Beanstalk sin contenedores |
Duración: | 90 minutos |
Profesor responsable | Mario Villamizar |
Pre-Requisitos: | Python + Flask + Git + AWS CodeCommit + AWS Codebuild |
Objetivos
Al finalizar el tutorial el estudiante estará en capacidad de:
Requisitos para desarrollar el tutorial
En particular se utilizarán los siguientes recursos:
AWS CodePipeline es un servicio de Amazon que permite implementar integración continua (Continous Integration) y entrega continua (Continous Delivery) sobre aplicaciones desplegadas en AWS.
El servicio de AWS CodePipeline permite integraciones con otros servicios de AWS como CodeBuild, CodeCommit, CodeDeploy, aws Elastic beanstalk, entre otros, lo cual permite tener centralizado todos los procesos de desarrollo e implementación de una aplicación.
Con AWS CodePipeline se preparan automáticamente los cambios realizados en el código y se automatizan procesos de compilación, prueba y lanzamiento en producción, esta automatización permite realizar pruebas de forma más rápida y cómoda y así identificar errores para una solución oportuna.
AWS CodePipeline, permite crear flujos de trabajo o canalizaciones para transmitir las modificaciones del código a través de un proceso de lanzamiento. Esta canalización se define con varias secciones y fases.
El código de la aplicación lo encuentra en el siguiente repositorio de GitHub:
https://github.com/WeimarG/taller-pipeline-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. |
Ingrese a la consola de administración de AWS y en el menú servicios selecciones Elastik Beanstalk.
Cree una nueva aplicación seleccionando el entorno del servidor web y asígnele un nombre.
En la sección Plataforma seleccione Plataforma Administrada y el lenguaje de programación Python ya que con este está desarrollada la aplicación.
Por último, en la sección Código de la aplicación, seleccione la opción Aplicación de muestra y finalice dando clic al botón "Crear un entorno".
Pruebe que la aplicación esté corriendo correctamente ingresando con la url generada en el entorno.
Ingrese a la consola de administración de AWS y en el menú servicios selecciones CodeCommit.
En la ventana principal de AWS CodeCommit selección el botón "Crear el repositorio"
Agregue un nombre y descripción para el repositorio y de clic en el botón crear.
Cree un repositorio local con el código de su aplicación y genere el enlace remoto con el repositorio de AWS CodeCommit que acaba de crear.
Nota: Para profundizar más sobre este paso, revise los manuales anteriores de AWS CodeCommit y AWS CodeBuild.
Prepare todos los archivos de la aplicación y realice un push de estos al repositorio de CodeCommit.
Ingrese a la consola de administración de AWS y en el menú servicios selecciones CodePipeline.
En la ventana principal de AWS CodePipeline selección el botón "Crear la canalización"
En la siguiente ventana debe asignar un nombre a su nuevo flujo de trabajo (canalización) y seleccionar la opción Nuevo rol de servicio, este rol permitirá que CodePipeline tenga acceso a los recursos necesarios para la integración continua y la entrega continua con los servicios de CodeCommit, CodeBuild y Elastic Beanstalk. Pipeline asignará automáticamente el nombre del rol, si usted lo desea puede cambiar este nombre y personalizarlo.
Nota: Si ya cuenta con un rol creado que tenga los permisos necesarios puede seleccionar la opción Rol de servicio existente.
CodePipeline crea por defecto un nuevo Bucket de S3 para almacenar los artefactos. Los artefactos son la descripción de un conjunto de acciones con la finalidad de permitir que los procesos finalicen correctamente.
El nombre del bucket se crea automáticamente con la siguiente estructura, codepipeline-región-12345EXAMPLE, dónde región es la región de AWS en la que se creó el pipeline y 12345EXAMPLE es un número aleatorio de 12 dígitos que garantiza que el nombre del bucket sea único.
En la sección "Configuración avanzada" podrá modificar algunas características del almacenamiento de los artefactos. Si ya cuenta con un bucket de S3 puede elegirlo para almacenar los artefactos allí, por otro lado, puede seleccionar si la clave de cifrado es administrada por usted o el por AWS. En este caso los valores se dejarán por defecto. Por último, de clic en el botón siguiente.
En la nueva ventana debe seleccionar el origen del código de la aplicación, para este caso será AWS CodeCommit.
Nota: Dentro de las opciones se encuentra GitHub el cual es uno de los repositorios más usados por desarrolladores a nivel mundial.
A continuación, debe seleccionar el nombre del repositorio, para este caso será "Repo-Pipeline-Beanstalk" el cual fue creado en pasos anteriores de este manual, por último, seleccione la rama donde se encuentra la aplicación, para este caso será master.
Dentro de la etapa de origen encontrará una sección para cambiar las opciones de detección de cambios en el código de la aplicación y en el repositorio. Las opciones disponibles para la detección de los cambios son Amazon CloudWatch y AWS CodePipeline, para este caso se dejarán los valores por defecto.
La detección de los cambios realizados disparará de forma automática el proceso de canalización (Continous Delivery).
Por último, de clic en el botón siguiente.
En la siguiente ventana se encontrará la sección de compilación donde se podrá seleccionar dos opciones de proveedor (AWS CodeBuild y Jenkins), para este caso se utilizará AWS CodeBuild.
Después de seleccionado el proveedor se habilitarán nuevas opciones como la región y la selección del proyecto de compilación. Si ya cuenta con un proyecto creado en CodeBuild puede buscarlo, en caso contrario deberá crear un nuevo proyecto dando clic en el botón "Crear el proyecto"
Al seleccionar la opción de crear proyecto se abrirá una ventana emergente para realizar la configuración en CodeBuild. Se debe agregar el nombre del proyecto, el entorno, que para este caso será una imagen administrada con sistema operativo Ubuntu, adicional, se debe seleccionar o crear un nuevo rol de servicio el cual tendrá los permisos de acceso a los recursos necesarios.
Por último, se debe especificar si se utilizará un archivo de compilación o si se insertarán los comandos, en este caso se seleccionará la opción del archivo ya que este está incluido dentro del repositorio de la aplicación con el nombre buildspec.yml.
Las siguientes opciones de configuración son opcionales como la configuración del lote y el almacenamiento de los logs (registros).
De clic en el botón "Continuar hacia CodePipeline"
Después de dar clic en el botón "Continuar hacia CodePipeline" regresará a la ventana de configuración de CodePipeline con la referencia al proyecto que se creó en CodeBuild.
De clic en el botón siguiente.
En la siguiente ventana se procederá con la configuración de la etapa de implementación, en esta sección se deberá seleccionar el proveedor de implementación, para este caso se seleccionará AWS Elastic Beanstalk ya que sobre este servicio fue donde se desplegó por primera vez la aplicación (Actividad 1).
Después de seleccionar el proveedor se debe configurar la región, el nombre de la aplicación, el cual es el nombre de la aplicación creada en la Actividad 1 y el nombre del entorno, que igualmente es el entorno creado en la Actividad 1.
Por último, dar clic en el botón siguiente.
En la última página se mostrará el resumen de la configuración del Pipeline, si está conforme con ella, de clic en el botón "Crear la canalización".
Después de finalizada la configuración del Pipeline observará una ventana como la siguiente en la cual se observa el proceso que lleva flujo de trabajo iniciando por la identificación de los cambios en el repositorio de CodeCommit, a continuación, se realiza la compilación del proyecto en CodeBuild y por último se procede con el despliegue de la aplicación a través del servicio Elastic Beanstalk.
Si el proceso termina correctamente observará una imagen como la siguiente.
A continuación, diríjase a Elastic Beanstalk para ver el estado de la aplicación y abra nuevamente la URL en el navegador para ver los cambios efectuados en la aplicación.
Como se observa en la imagen, la aplicación se ha actualizado correctamente.
Puede observar el historial de versiones en la sección Versiones de la aplicación de Elastic Beanstalk.
En la imagen se puede evidenciar que la versión actualmente implementada es la que se desplegó a través de CodePipeline.
[1] https://docs.aws.amazon.com/es_es/codepipeline/latest/userguide/welcome-introducing-artifacts.html
[2] https://aws.amazon.com/es/codepipeline/faqs/?nc=sn&loc=5
[3] https://aws.amazon.com/es/elasticbeanstalk/
[4] https://docs.aws.amazon.com/es_es/codecommit/latest/userguide/getting-started.html#getting-started-create-repo
[5] https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-container.html
[6] https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
[7] https://docs.aws.amazon.com/codebuild/latest/userguide/sample-elastic-beanstalk.html
[8] https://docs.aws.amazon.com/es_es/codepipeline/latest/userguide/welcome-introducing-artifacts.html
[9] https://aws.amazon.com/es/codebuild/