Automatizar el despliegue de tu infraestructura (IaC) con AWS Developer Tools y AWS CDK

Infraestructura como código (IaC)

El término IaC ya forma parte de nuestras vidas igual que integración continua u otras prácticas de DevOps.
La Infraestructura como Código es una práctica de DevOps. Este principio fundamental nos indica que debemos tratar la infraestructura igual que tratamos el código de la aplicación. Esto quiere decir que debemos gestionar nuestra infraestructura en un sistema de control de versiones y se espera que la infraestructura creada sea replicable y fiable.

Pipeline de CI/CD para IaC

Este artículo se enfoca en cómo poder crear un pipeline de integración y despliegue continuos para nuestra infraestructura usando los servicios que AWS nos proporciona.
Además, crearemos este pipeline siguiendo el principio de IaC, por lo que el pipeline que crearemos será probado con el propio código de infraestructura que crea el pipeline para que cualquier proyecto que despliegue infraestructura con AWS IaC pueda usar desplegar y usar esta mismo pipeline. Este es el diagrama de lo que vamos a construir.

Crear los stacks con AWS CDK

El concepto de stack es heredado de AWS CloudFormation y lo primero que vamos a hacer es crear el proyecto de AWS CDK. Todo el código lo puedes consultar aquí.
Para crear la pipeline, añadiremos un fichero app.py (hemos seleccionado Python como lenguaje pero podéis usar cualquiera de los que están disponibles en AWS CDK) donde crearemos nuestros stacks. En este caso es el stack que creará el pipeline usando los servicios de AWS de Developer Tools.

AWS CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar su software. Puede diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software. CodePipeline automatiza los pasos necesarios para publicar los cambios en el software de manera continua. Se puede integrar fácilmente con servicios de terceros, como GitHub. 

Configurar el pipeline (AWS CodePipeline)

Lo siguiente que haremos será crear los stacks que necesitemos para nuestro proyecto, en este caso solo necesitamos un stack llamado pipeline que configuraremos de la siguiente forma:

Configurar AWS CodePipeline

Lo primero es definir el trigger que activará el pipeline. Esto quiere decir que cuando alguien haga un push en el repositorio de código se ejecutará el pipeline automáticamente. También hay que seleccionar la rama que ejecutará el trigger. Seleccionamos el repositorio de código de AWS: CodeCommit.

Configurar AWS CodePipeline
Configurar AWS CodePipeline

AWS CodeCommit es un servicio de control de código, altamente escalable, seguro y gestionado que aloja repositorios Git privados. Facilita a los equipos la colaboración segura en el código con contribuciones cifradas en tránsito y en reposo. Es compatible con la funcionalidad estándar de Git, por lo que funciona sin problemas con sus herramientas existentes basadas en Git.

Crear Pipeline CDK

Cuando añadimos el repositorio de código a AWS CodePipeline a través de CDK, se crea una regla de eventos de AWS CloudWatch entre el repositorio y el pipeline. Para más información puedes consultar la documentación oficial

Nos quedaría definir un rol de AWS IAM que de permisos al pipeline para poder crear los recursos de infraestructura que hemos definido. Cuando una pipeline es creada, se crea un rol de servicio o se utiliza un rol de servicio existente. El rol de servicio no es un rol administrado por AWS, sino que se crea inicialmente para la creación del pipeline y luego, a medida que se agregan nuevos permisos a la política del rol de servicio, es posible que deba actualizar el rol de servicio. Una vez que se crea con un rol de servicio, no puede aplicar un rol de servicio diferente.

Definir los pasos (AWS CodeBuild)

Crearemos tres pasos con AWS CodeBuild. AWS CodeBuild es un servicio de integración continua totalmente administrado que compila el código fuente, ejecuta pruebas y produce paquetes de software listos para su implementación. Con CodeBuild, no necesita aprovisionar, administrar y escalar sus propios servidores de creación. CodeBuild se adapta continuamente y procesa varias compilaciones de forma simultánea, por lo que sus compilaciones no se quedan esperando en una cola. 

Digital Lover

  • Build: Paso en el que descargamos las dependencias necesarias para utilizar AWS CDK y su lenguaje de programación asociado, en este caso Python.

AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software de código abierto para definir los recursos de tu aplicación en la nube utilizando lenguajes de programación conocidos.

Creamos y configuramos el paso de CodeBuild:

Configuración CodeBuild

Lo añadimos en nuestro pipeline en el orden que deseamos. Repetiremos este paso para todos los pasos que queramos añadir en el pipeline.

CodeBuild en pipeline
  • Validar la infraestructura: cdk diff. Paso para comprobar si los nuevos cambios son correctos.

El comando cdk diff compara la versión actual de un stack definido en tu aplicación con la versión ya desplegada, o con una plantilla de AWS CloudFormation guardada, y muestra una lista de cambios.

Validar Infraestructura CDK DIFF

Cuando creamos un paso de codebuild, necesitamos añadir la especificación del build, que al final será lo que se ejecute en este paso. Mostramos el build_specs del paso de test, el resto serían similares y siempre podéis consultar el repositorio.

Especificación del Build
  • Desplegar la infraestructura: cdk deploy. Paso para desplegar nuestro pipeline en la cuenta aws seleccionada.

El comando cdk deploy despliega los stacks especificados en tu cuenta de AWS. Si hay un error se ejecuta un rollback automático (característica heredada de AWS CloudFormation).

Desplegar Infraestructura CDK Deploy

Cómo trabajar con repositorios de IaC

Os recomiendo usar como entorno de desarrollo AWS Cloud9. Es un IDE online que permite escribir, ejecutar y depurar su código solo con un navegador. Incluye un editor de código, así como un depurador y un terminal. Cloud9 incluye herramientas para los lenguajes de programación más conocidos, como JavaScript, Python, PHP, entre otros, por lo que no necesita instalar archivos ni configurar nuestro ordenador para empezar nuevos proyectos. Además, con Cloud9 se puede compartir rápidamente el entorno de desarrollo con el resto de tu equipo, lo que le permite realizar pair programing y un seguimiento de las ediciones de tus compañeros en tiempo real.

Para configurar CodeCommit con git-remote-codecommit os recomiendo ir a la documentación oficial dónde se explican los pasos a seguir.

Instalar git-remote-codecommit

Instalar git-remote-codecommit
Calida tu gitconfig

Con esta configuración, ya deberías ser capaz de conectarte a un repositorio de CodeCommit y clonar el repositorio:

Repositorio CodeCommit

webinar AWS

Tags

Guía de posibilidades profesionales sobre AWS
He leído y acepto la política de privacidad
Acepto recibir emails sobre actividades de recruiting NTT DATA