Son muchas las soluciones que podemos aplicar para automatizar nuestra infraestructura, desde las integraciones automáticas de nuestros proyectos hasta el desplegar de forma automática nuestras infraestructuras. Hoy entraremos, brevemente, en éste último tema. El desplegar de forma automatizada nuestras infraestructuras para continuar con nuestro camino DevOps.
Crearemos una Pipeline, en el diagrama la gestiona vía Jenkins pero, naturalmente, lo podemos hacer distinto; en mi caso, uso Jenkins para casi todo, aunque la base del sistema será: Hashicorp’s Packer, Terraform y RedHat’s Ansible. Ansible lo conocí hace ya un tiempo, cuando tenía problemas al usar agentes de configuración, como en Chef o Puppet y Ansible me daba la oportunidad de ser 100% agentless, ganando así autonomía y recursos locales.
La idea es la siguiente, veamos punto por punto las tareas que vamos a encomendar a cada componente del diagrama:
Packer, si queremos hacer AMIs simples, podrá hacerlo solito, en caso que queramos algo más complejo, podemos ayudarnos de Ansible. Entre los dos, la idea es que mediante un cookbook puedna crear nuestras AMIs que después, cuando depsleguemos las infraestructuras, podamos recuperar como “puntos de montaje”. Por ejemplo en Ansible podremos definir los pasos que debería tener, las versiones, etc… en el diagrama se puede ver la configuración básica de un servidor web para una aplicación php.
Ansible, como decía anteriormente, recalco, su motor es Python y nos ofrece una arquitectura 100% agentless. Por lo tanto tendrá una instalación más ligera en comparación con otros servicios como el nativo de AWS: OpsWorks.
Terraform será el encargado de la orquestación, tanto para crear como para destruir recursos de infraestructura, por ejemplo: EC2 Instances, Auto Scaling Groups, RDS (Relational Database Service), Security Groups, Manage AWS API Gateway, S3 buckets, ELB (Elastic Load Balancers), VPC Services, etc… Aunque aquí hablamos de AWS, la ventaja de Terraform es clara ya que es agnóstico y no está vinculado a un proveedor Cloud. En Ansible tendremos otra “cookbook” donde podremos definir las configuraciones de los componentes, podemos ver en el diagram anterior, por ejemplo el tipo de instancia, la AMI (creada anteriormente), el security group asignado, etc…
No puedo negar que para realizar las configuraciones de la Pipeline anteriormente comentada, estaremos un ratito, pero realmente será un antes y un después de nuestra relación con la infraestructura. Si todo va bien, podremos crear auténticas Pipeline con Jenkins donde podremos mezclar nuestra subidas de Releases con la creación o destrucción de forma automática, también, de las infraestructuras asociadas. Por ejemplo para crear al uso nuestro entorno de “Stage”, realizar las validaciones y, seguidamente, promocionar a Producción. El ahorro de costes será importante, ya que estará, por ejemplo la “Stage” solo operativa el tiempo requerido para poder hacer las validaciones funcionales, sean manuales o automáticas (preferiblemente). Continuaremos mejorando el artículo para explicar la configuración punto por punto.
Continuando con la recomendación de lecturas y gracias al libro de Jez Humble, de lectura obligada, podremos profundizar más sobre automatización, pruebas e implementaciones automatizadas.
NOTA: Y si quieremos un interesante wizard, por descubrir su potencial, tenemos gruntwork.io con una librería muy importante para afrontar nuestro “Infrastructure as Code”.
Autor: Joakim Vivas