Constructores Digitales

JJ Ruescas
5 min readNov 12, 2018

--

Sea grande o pequeña, sea lujosa o humilde, los humanos necesitamos infraestructura donde vivir y desarrollar nuestras actividades. De la misma manera, el software que creamos necesita infraestructura donde habitar y desempeñar su propósito.

Pero construir una casa no implica que sea habitable. Construir un edificio de oficinas, no implica que en cuanto se ingresa a estas, empecemos a ser productivos inmediatamente. Es necesario “vestir” a la infraestructura de acuerdo al propósito que deseamos que cumpla, ya sea con una cama y una mesita de noche para un dormitorio o un escritorio y estántes para una oficina. Esto es a lo que llamamos “configuración”.

Muchos ingenieros en el mundo IT y Operaciones piensan que, como en el mundo real, es necesario utilizar las manos y esforzarse para “crear” y “vestir” infraestructura. Esa inocente decisión es la que ocasiona los siguientes problemas:

  • Creación manual de servidores. ¡Sí! Que un humano los cree ES UN PROBLEMA. ¿Por qué gastar nuestra creatividad en actividades rutinarias?
  • Desvío de configuración. Tarde o temprano, la “vestimenta” entre servidores que en teoría debería ser estándar deja de serlo, lo que nos conduce a los…
  • Copos de Nieve. Servidores que nadie sabe cómo fueron configurados y que al menor cambio, ocasionan incidentes en el funcionamiento de los sistemas.
  • Captura del conocimiento (Tal vez este es el peor de los problemas). ¿Cómo transmitir el conocimiento de la creación y configuración de servidores a otras personas si los detalles de esta implementación son rehénes dentro de la cabeza de algún ingeniero que dejó la empresa?…. Si pensaste en la creación de documentos, buen intento, pero no es la respuesta correcta. Empiezas escribiendo documentación con grandes esperanzas pero terminas odiándola la tercera vez que tienes que actualizarla.😒

Retornaremos a como resolver estas situaciones en un momento más. Primero, revisemos los ciclos de vida de la infraestructura.

Ciclo de Vida de un Sevidor

Volvamos a la escuela. ¿Recuerdas cuál es el ciclo de vida de los seres vivos?… ¡Correcto! Nacer, crecer, reproducirse (algun@s repiten esta etapa más de lo necesario 🙄), y morir. Bien, los servidores en nuestra infraestructura, tienen un ciclo de vida similar como vemos a continuación:

Ciclo de Vida de un Servidor — basado en “Infrastructure as Code” por Kief Morris

Nota: la creación de Templates para ahorrar tiempo es ideal. Sin embargo, si esta creación es realizada de forma manual, aún no es eficiente. Hablaremos de esto en un post en el futuro.

Si piensas que tus dos manos y una actitud positiva son suficientes para administrar el ciclo de vida de una granja de servidores y sus configuraciones, además de los problemas descritos previamente, pues tú y yo tenemos un problema. 👊🏼

Infraestructura como Código — IaC

La solución a estas situaciones se llama “Infraestructura como Código”, o como la llamaremos desde ahora en adelante: “IaC”.

Ahora, déjame describir IaC en términos visuales:

¡Esto es IaC!

Como vemos en las imágenes de arriba, es posible crear una máquina virtual en Windows en 4 líneas de código (izquierda) y en 18 líneas la vestimos para que actúe como un Servidor Web (derecha). ¡Voilà!

El ejemplo mencionado arriba fue realizado utilizando Terraform y Powershell Desired State Configuration (DSC), sin embargo podríamos haber utilizado Cloud Formation de AWS, ARM Templates de Azure, HEAT de OpenStack en la nube o incluso Vagrant para crear máquinas virtuales de forma local.

Nota: Para un ejemplo más elaborado, no olvides revisar este artículo que muestra como provisionar y configurar instancias de Windows en AWS utilizando Terraform, DSC y Chocolatey.

¿Por qué IaC?

De hoy en adelante IaC será uno de nuestros mejores aliados en la jornada DevOps por los siguientes motivos:

  • Versionamiento. Como la infraestructura está definida en texto plano en lugar de oculta en algún lugar de nuestra mente, entonces podemos preservarla en a GitHub, BitBucket o incluso a Dropbox para evitar que se pierda.
  • Idempotencia. Encuentras que una configuración dejó el estado con el que la definiste (Desvío de configuración). ¡Hey, no hay problema! Ejecutamos IaC para que dicha configuración vuelva al estado requerido, o incluso, destruimos el servidor completo para reconstruirlo y reconfigurarlo nuevamente (revisa el artículo sobre Infraestructura Inmutable).
  • Documentación Viviente. Debido a que el código se encuentra en un repositorio de código, entonces cualquier miembro del equipo puede acceder a la versión mas reciente de este o incluso a versiones pasadas. Es así como los scripts de IaC realmente cumplen con la definción de “Documentos Vivientes”.
  • Fomento a la Experimentación. ¿Deseas probar nuevas versiones de tus productos, sistemas operativos, configuraciones o incluso arquitecturas completas? ¡Excelente! Utiliza IaC para crear áreas donde la experimentación es segura y divertida.
  • Recursos a Pedido. ¿Siempre deseaste una computador óptima para video juegos?…para Diseño Gráfico?…o simplemente porque Microsoft Excel demora 5 minutos en cargar? ¡Bien! Ya no es necesario comprar costosas computadoras de alta performance cuando es posible alquilarlas, utilizarlas y destruirlas a pedido. #OnDemand

Dev + Ops + IaC

No importa si eres un Dev (Desarrollador) o Ops (Ingeniero de Operaciones), mientras utilices IaC, estás convirtiéndote en un Desarrollador de Infraestructura (Infrastructure Developer), lo cual acelera el flujo de comunicación entre ambos equipos para beneficio de toda la organización.

Para finalizar; en la actualidad los castillos, monumentos y arquitecturas más impresionantes son las que son creadas en nuestras mentes y se encuentran hospedadas entre ceros y unos en computadoras. Por este motivo, no olvides esto:

Infraestructura como Código (IaC) representa el cemento y los ladrillos para los constructores de la Era Digital.

Como siempre, por favor déjame tu feedback en un comentario en este artículo. ¿Te fue útil?¿Qué aumentarías o quitarías?¿Otras sugerencias? También puedes enviarme un tweet a @jjruescas1 y colocar #DevOps al final para poder encontrarlo.🙂

¿Deseas conocer más sobre DevOps? No olvides revisar el curso DevOps — Las Artes Marciales del Softwareen Udemy.com.

--

--