Skip to content

Infraestructura Como Codigo (IAC) / AWS Clouformation

¿Qué es infraestructura como código?

La idea detrás de la infraestructura como código (IAC) es poder escribir y ejecutar código para definir, desplegar, actualizar y destruir tu infraestructura. Esto representa un cambio importante en la mentalidad ya que se tratará todo lo relacionado a la infraestructura y operaciones como si estuviéramos escribiendo software inclusive los aspectos relacionados con el hardware. De hecho, una de las ideas claves dentro del mundo DevOps es que casi todo se puede manejar como si estuviéramos escribiendo software, incluyendo servidores, bases de datos, redes, documentación, tests automáticos, procesos de despliegues etc.

Beneficios de la IAC

Cuando la infraestructura es definida como código se es capaz de usar una variedad de prácticas relacionadas con el desarrollo de software que mejorara drásticamente el proceso algunos de los beneficios asociados con el uso de IAC son los siguientes:

Self-service

La mayoría de equipos que despliegan su código de forma manual tienen un pequeño número de sysadmins quienes son los únicos que conocen todo el proceso que se debe realizar para poner a funcionar el código en los ambientes de producción, esto enfoque se convierte en un cuello de botella si la compañía empieza a crecer. Pero si toda tu infraestructura está definida en código, el proceso entero de despliegue puede ser automatizado.

Velocidad y Seguridad

Si el proceso de despliegue es automatizado sin duda alguna será mucho más rápido y seguro que si lo hiciéramos de forma manual ya que automatizar este proceso lo hará más consistente y reproducible.

Documentación

en lugar de que el estado de tu infraestructura solo se encuentre localizada en la cabeza del sysadmin de la empresa esta puede ser representada en forma de código que todos pueden leer y actuar como documentación permitiendo que todos dentro de la organización puedan entender cómo funcionan las cosas inclusive si el sysadmin abandona la empresa o se va de vacaciones.

Control de versiones

El código generado para la creación de la infraestructura se puede almacenar en un sistema de control de versiones, lo cual significa que la historia completa de tu infraestructura es ahora capturada en los logs generados al realizar un commit. Esto se convierte en un recurso invaluable a la hora de realizar algún debug por algún problema que pueda surgir luego de realizar un commit, todo lo que tendríamos que hacer es revisar los cambios realizados en dicho commit y analizar qué problemas puedo ocasionar dicho cambio, o pudiéramos revertir el commit y volver al estado en que todo estaba funcionando sin problemas. Definitivamente esta es una de las ventajas más importantes de la IAC.

Validación

Si el estado de la infraestructura es definido en código, para cada cambio por más simple que sea se puede realizar una revisión, ejecutar una serie de test automatizados sobre los cambios realizados todas estas prácticas reducen el chance de que los cambios realizados puedan afectar el correcto funcionamiento de la infraestructura.

Reutilización

Se puede empaquetar la infraestructura en módulos reutilizables, así que en lugar de escribir desde 0 toda la infraestructura cuando se comienza un nuevo proyecto podemos reutilizar estos módulos lo cual agilizaría todo el proceso.

Felicidad

Esta es una razón que muchas veces se pasa por alto y es una de las razones más importante por la cual se debería usar IAC ya que desplegar código y manejar infraestructura es un proceso repetitivo y tedioso, la IAC hace este proceso mucho más dinámico y mucho más tolerante a fallos lo cual sin lugar a duda trae felicidad a todo el equipo de trabajo.

Lenguaje Procedimental VS Lenguaje Declarativo.

Diferentes software de aprovisionamiento y herramientas de manejo de configuración para Infraestructura como Código usan diferentes lenguajes de programación. Por ejemplo, CHEF y ANSIBLE son opciones muy sólidas que utilizan lenguaje procedural y por el contrario Cloudformation, Terraform, Open stack heat, Saltack y puppet usan un Lenguaje Declarativo. Veamos en que se diferencian cada uno.

Lenguaje Procedimental

El lenguaje procedimental muchas veces es llamado también como lenguaje imperativo y describe un conjunto de pasos lógicos que deben seguirse para llegar al resultado deseado, este tipo de lenguaje usa una serie de funciones, declaraciones de variables y condicionales para describir lo que se debe hacer.

Lenguaje Declarativo

El lenguaje declarativo le dice al programa que escribimos lo que debe hacerse y le permite descubrir los pasos necesarios para llegar a ese estado deseado, todo el esfuerzo se centra en el resultado en lugar de en cómo llegar allí, esto ayuda a crear programas más flexibles que se pueden utilizar en diferentes contextos. Siempre que se especifique claramente el resultado final los pasos para llegar allí se generaran automáticamente.

Como vemos la IAC aporta grandes beneficios y ya que tenemos algunos conceptos claros podemos hablar de cloudformation que es la herramienta nativa para aplicar infraestructura como código dentro de AWS.

AWS Cloudformation

Es el servicio de AWS utilizado para el manejo de infraestructura como código, permite definir templates donde se declaran todos los recursos necesarios para nuestra infraestructura y una vez declarados poder desplegarlos de manera automática sin necesidad de intervenciones manuales, cloudformation aprovecha todas las ventajas ya descritas de la Infraestructura como código, velocidad, documentación, reutilización, seguridad.

Los templates de cloudformation pueden ser archivos yml o archivos json, pero muchas personas incluyéndome prefieren los archivos .yml ya que cuando los templates son muy extensos se hace más cómodo leerlos y entenderlos, cloudformation también permite usar los templates para crear, eliminar y actualizar la infraestructura a través de múltiples cuentas y regiones esta característica es llamada StackSets. Cloudformation usa lenguaje Declarativo por lo que no importa el orden en que definamos nuestros recursos el servicio se encarga de crear esas dependencias automáticamente sin embargo es flexible y podemos definir dependencias entre recursos explícitamente.

Este post fue una pequeña introduccion a la IAC y las ventajas que ofrece, tambien hablamos un poco de cloudformation que es el servicio por defecto para manejar la IAC en AWS , en futuros post profundizaremos mas en este servicio y lo explicare a detalle con ejemplos y podremos ver todos los componentes que forman un template dentro de cloudformation.

Published inAWSCloud Computing

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *