¿Qué es la Infraestructura como código (IaC)?

Infraestructura como código es un método de aprovisionamiento y gestión de infraestructura IT y servicios a través del uso de código fuente, sustituyendo el procedimiento estándar de operación. Básicamente consiste en tratar los servidores, bases de datos, redes y otros elementos de infraestructura como si fuera software. Este código facilita el despliegue de esta infraestructura de un modo rápido, seguro y consistente.

Es un sistema muy vinculado a los entornos Cloud.

Beneficios de IaC

Rapidez

El diseño de una infraestructura con código permite agilizar de manera significativa el despliegue posterior de manera rápida y segura. IaC permite desplegar toda una infraestructura que podría llevar horas o días enteros ejecutando tan sólo un script en cuestión de unos pocos minutos.

Si bien es cierto que el desarrollo del código que permitirá el despliegue de la infraestructura puede ser igual de costoso que un despliegue inicial, aporta la ventaja de que es reutilizable por lo que se pueden importar snippets que automaticen partes y cuando la biblioteca de recursos estándar ya está poblada se reduce mucho el tiempo de desarrollo, esto sin contar que además en caso de tener que levantar varios entornos de la misma arquitectura es donde se demuestra realmente la rapidez de IaC ya que una vez desarrollado permite replicarlo en cuestión de minutos.

Automatización

La automatización en la replicación de infraestructura es otro punto interesante de la IaC. Es posible tomar el diseño de una infraestructura con código para que sea replicada exactamente igual en otro entorno únicamente modificando los parámetros que se proporcionan durante la creación.

Además las herramientas de IaC normalmente ofrecen APIs que permiten automatizar la ejecución del IaC integrándola con herramientas de “Continuos Delivery” (Jenkins, Bamboo) para integrar dentro de los ciclos de pruebas la creación de un entorno sobre el que ejecutar las pruebas y destruirlo a la finalización.

Adicionalmente nos ofrece la posibilidad de automatizar la creación de entornos de Disaster Recovery, si los tiempos de RTO y RPO nos lo permiten podemos tener simplemente en una localización alternativa las copias de seguridad de los datos y recrear la infraestructura solo en caso de desastre, con lo que se reduce al mínimo el coste de un entorno DR.

Minimización de riesgos

Otra de las ventajas que ofrece IaC es la minimización de riesgos. Cuando se despliega infraestructura manualmente es inevitable que en algún momento se cometa un error. IaC permite hacer las comprobaciones necesarias antes de desplegar para que exista una consistencia, minimizando al máximo los errores anteriormente comentados. Aunque un despliegue de un servidor, por poner un ejemplo, es barato, el tiempo del ingeniero que lo despliega no lo es tanto. De modo que si se comete un error de base, como la creación de una red con datos incorrectos, y posteriormente hay que crear una cantidad concreta de servidores sobre esta red, será necesario dar marcha atrás a todo el proceso.

Actualizaciones controladas y rollbacks

Los sistemas de IaC permiten la actualización de los stacks proporcionando un fichero actualizado y pidiendo que en lugar de crear un  nuevo stack procede a actualizar uno existente, el sistema se encarga de comprar el fichero con los recursos actualmente desplegados y se encarga de hacer únicamente los cambios necesarios.

Si los ficheros descriptivos los tenemos en un sistema de control de versiones además podremos hacer rollback fácilmente a versiones anteriores y comparar los cambios entre una versión y otro.

Declarativo vs Imperativo

Otra ventaja que nos ofrece IaC es que la automatización de la infraestructura y servicios se hace de forma declarativa, indicando cual queremos que sea el estado final de la arquitectura, al contrario de lo que sucedía con la automatización de infraestructuras virtuales clásica donde se hacía de forma imperativa.

Un ejemplo:

  • Imperativo: script con dos llamadas a la función “crear_instancia”
  • Declarativo: fichero indicando que debe haber dos instancias

IaC en AWS

AWS proporciona la funcionalidad de IaC princa través del servicio CloudFormation (https://aws.amazon.com/cloudformation/) y proporciona otros servicios complementarios que pueden integrarse en este ciclo y servir de soporte para la ej:

  • AWS S3
  • AWS CodeCommit
  • AWS Lambda

Cloudformation ofrece toda la funcionalidad que se ha descrito anteriormente:

  • Actualizaciones controladas y rollback
  • Automatizable mediante API
  • Repetible y rápido

 

AWS Cloudformation tiene dos partes principales:

  • Plantillas, son los ficheros donde se describen las infraestructuras en sí mismas, las características principales que tienen:
    • Se pueden anidar y permiten importan otras plantillas
    • El motor de plantillas ofrece funciones auxiliares para gestión de arrays, unión de variables, cálculo de subnets…
    • Se pueden definir parámetros, a través de estos mismos se pueden escribir plantillas reutilizables para distintos entornos (por ejemplo el tamaño de una instancia se puede importar como un parámetro).
    • Condiciones y creación condicional, se pueden definir condiciones y utilizarlas para crear un recurso u otro en base a una condición.
  • Stacks, es la implementación de una plantilla combinada con los parámetros necesarios, una vez creada permite comprobar y acceder a la información de que plantilla se ha usado, que parámetros tenia, recursos creados e información de salida que proporciona.

Una de las características que más flexibilidad proporciona en CloudFormation es la posibilidad de crear recursos personalizados, en el caso de que no sea posible crear un recurso con las opciones o características de forma nativa mediante los tipos de recursos que proporciona CloudFormation se pueden crear a través de un tipo de recurso “Custom”.

Para crear un recurso “Custom” se define primero en la plantilla un recurso Lambda que es donde se programa las llamadas al API de AWS necesarias para la creación del recurso final, luego se referencia este recurso Lambda desde el recuso Custom y se le proporcionan los parámetros que necesite la función Lambda.

Servicios o Productos Complementarios

Ansible, Puppet, Chef

Permiten la instalación y configuración de software en forma de código también, siendo complementario tanto en la creación de AMIs como en el arranque de instancias.

Packer

Automatiza la creación de AMIs, permitiendo incluir la creación de AMIs también en los ciclos de CD.

Terraform

Terraform es una alternativa o complemento a Cloudformation, también se integra con los servicios de AWS pero no de una forma tan integrada como lo hace Cloudformation.

everis cloud adoption journey

contacta

Para conocer en detalle el alcance de nuestros servicios o resolver cualquier tipo de duda, por favor contacta con nosotros.
Superior