Saturday, November 28, 2020

Infraestructura como código y la entrega rápida de valor

Siguiendo con mi ruta de aprendizaje sobre DevOps, en esta oportunidad me gustaría explorar la práctica de Infraestructura como código (IaC). Para dar pie a esta exploración empecemos resaltando el siguiente principio del manifiesto ágil:

Entregamos software funcional frecuentemente...

Como developer, esto es importante tener en cuenta, pues es la razón por la cual nos contratan. No nos pagan sólo por escribir código, sino por entregar software que funcione y de valor al usuario. Entonces, ¿cómo podemos cumplir con este principio ágil? Optimizando nuestro Flujo de Valor.


El Flujo de Valor

Entregar software funcional frecuentemente implica recorrer un flujo, que en términos de Lean Manufacturing  se denomina Flujo de Valor (Value Stream). El Flujo de Valor se refiere a la secuencia de actividades requeridas para diseñar, producir y entregar un bien o dar un servicio a un cliente. 

En el año 2003 los hermanos Poppendieck tradujeron los principios de Lean Manufacturing al mundo del software. En este sentido, podemos ver nuestro trabajo cotidiano como un Flujo de Valor, un proceso donde partimos de una idea y la transformamos en una pieza de software que colocamos en un ambiente productivo para que el usuario la use.


En realidad, lo normal es que dentro de nuestro Flujo de Valor tengamos varios ambientes (environments) por donde nuestra pieza de software debe transitar (Ejemplo: Test,  UAT y production). Y cuando hablamos de ambientes, hablamos de infraestructura. Ya sabes: Operating Systems, servers, storage, networking, etc. Montar todos los ambientes necesarios para el desarrollo de tu proyecto puede implicar demasiado tiempo si se hace manualmente. 

Modelo de infraestructura propuesto por Sjaak Laan 

¿Cómo podemos gestionar nuestra infraestructura de manera efectiva y eficiente? ¿Cómo manejamos nuestros ambientes de cara a optimizar nuestro flujo de valor?

IaC al rescate

La mejor solución para gestionar nuestra infraestructura es eliminar las configuraciones manuales a través de la automatización. Para lograr esto debemos manejar nuestra infraestructura como código. 

La idea es escribir scripts que describan nuestra infraestructura, esto es código que puede ser versionado y ejecutado. De esta forma podemos reutilizar el script múltiples veces, eliminando la necesidad de realizar configuraciones manuales. También podemos replicar la misma configuración para diferentes ambientes (Ejemplo: Test, UAT y production).

Toda esta magia es posible gracias a herramientas como Kubernetes, Ansible, Puppet, Chef, Terraform, Salt, etc.

IaC y la nube

Producto de la aceleración de la transformación digital, ahora más que nunca, las empresas, independientemente de su tamaño, están adoptando Cloud Computing como parte de sus estrategia de TI para ofrecer servicios y productos a sus usuarios.


Transformación digital en los próximos años según IDC


El Cloud Computing nos brinda los recursos de infraestructura para nuestros sistemas y la práctica de IaC nos ayuda en el aprovisionamiento de dicha infraestructura. Un ejemplo de esto es Terraform, una herramienta que tiene soporte para varios proveedores de infraestructura en la nube: Amazon Web Services (AWS), Digital Ocean, Azure, VMware vSphere, son algunos ejemplos.


Finalmente...

En resumen, para optimizar nuestro flujo de valor (y por ende la entrega rápida de valor) es necesario tratar nuestra infraestructura como código para levantar ambientes y tenerlos bajo control. Una vez que tenemos nuestra infraestructura como código, el siguiente paso es hacer que nuestra pieza de software transite por los distintos ambientes hasta llegar a producción cuando el negocio lo necesite. Esta práctica es la denominada Continuous Delivery y será tema de otro artículo.

Enlaces interesantes


¡Gracias por llegar hasta aquí!

No comments:

Post a Comment

Cuando el código funciona, pero no tiene tests: ¿y ahora qué?

Seguramente te ha pasado alguna vez. Te dan acceso al repositorio de un nuevo proyecto. Lo abres con curiosidad, esperas encontrar una estru...