5 Tips para Ambientes e Infraestructura en DevOps

¿Cómo tratas a la “casa” de tus aplicaciones? En este artículo revisaremos los conceptos de Ambientes e Infraestructura y cómo administrarlos con una mentalidad DevOps.

Es momento de definir conceptos:

Los Ambientes

En la naturaleza, un ambiente es el entorno que rodea a un cuerpo.

Por ejemplo, nuestro Ecosistema planetario es un ambiente compuesto por millones de subecosistemas, que a la vez tienen a miles de plantas y especies animales cohabitando entre sí.

En tecnología, un ambiente es el entorno que alberga y rodea a una aplicación de software para que esta funcione y cumpla con su objetivo.

En tecnología, nuestro ambiente es el espacio digital donde bases de datos, websites, rest apis, y otras apps (incluyendo la infraestructura) interactúan en armonía y sincronía para sustentar a un producto o servicio de software.

Pero, a diferencia de los ecosistemas naturales, un ambiente tecnológico puede ser recreado a nuestra disposición. Esta es la gran ventaja que tenemos en relación a la naturaleza y que aprovechamos cualquier área del conocimiento.

Imagina esto. Ves a dos equipos de fútbol batallando por ganar la Champions League y te das cuenta que es poco probable que estos hayan llegado ahí sin haber entrenado mucho en privado, ensayando las diferentes jugadas y estrategias.

O inclusive, piensa en esto. Cuando vas a un concierto y disfrutas la actuación impresionante que puso un artista. ¿Tu crees que él o ella se subieron al escenario a dar ese espectáculo sin haber practicado (y mucho) en privado?

Esta es la misma pregunta y perspectiva que tomamos cuando tenemos que construir nuestros ambientes en tecnología.

En nuestro caso tenemos dos tipos de ambientes: Producción (Prod) y No Producción (non-prod). Este último tipo puede estar dividido en varios otros, pero por simplificación solo tomaremos estos dos tipos.’.

Non-prod es donde fallamos con confianza, y Prod es donde ponemos las cosas en limpio.

El truco es que estos dos ambientes sean lo más parecidos posiblemente en funcionamiento y elementos con la única diferencia en su tamaño o la potencia de rendimiento.

¿Suena trivial? Sí, lo sé. 

Sé también que muy pocos equipos de trabajo de software son conscientes de esta trivialidad y/o tienen la disciplina de mantener ambos ambientes cuasi-idénticos, lo cual les genera constantes dolores de cabeza.

La Infraestructura

La infraestructura (o “infra”, como la llamaremos en adelante) por otro lado son esos elementos que se interconectan para conformar un ambiente.

Por ejemplo, en el contexto material, el “Hogar”, esta idea abstracta, es tu ambiente; y la casa con sus habitaciones, conexiones eléctricas y de acueductos y otros elementos, conforman la infraestructura. 

Esta infraestructura es la que nos aloja y sustenta nuestro diario vivir (agua, calor, refugio, etc). Y al ser tangible, esta infraestructura necesita ser construida ladrillo a ladrillo, cable por cable, basándose en un diseño (blueprint) previo creado por un arquitecto.

El problema con este tipo de infraestructura del mundo físico es que demora en ser construida  y requiere además de esfuerzo humano y herramientas para ser puesta en pie siguiendo ese blueprint arquitectónico.

Por otro lado, en tecnología sucede algo similar en ciertos aspectos, puesto que es preciso tener una infra con elementos interconectados (servidores, bases de datos, Caching Systems, AI, etc) que aloja nuestras aplicaciones para proveer un servicio a los usuarios.

Pero, contrario al plano físico, en el mundo digital podemos (y debemos) hacer uso de herramientas de automatización que nos permitan construir y destruir infra y ambientes completos con mínimo esfuerzo humano.

Claro, aún necesitamos un Blueprint, y es esto a lo que llamamos Infraestructura-as-Code (IaC o Infraestructura-como-código).

La IaC se asemeja a los planos o blueprint que un arquitecto crea para una casa antes de ser construida, y, gracias a ésta es que podemos crear y destruir infraestructura a nuestro gusto y con mínimo esfuerzo.

—–

Bien, una vez que esto esta claro, ahora vamos a revisar los 5 tips que harán tu día a día en tecnología más sencillos.

1. Construye al menos dos ambientes

Producción y no-producción son lo mínimo que necesitamos para así tener tranquilidad antes de lanzar nuevas versiones de software a Producción.

Ojo, cuando hablo de No-Producción, NO ME REFIERO a tu laptop. 

Non-prod Debe ser un ambiente con características casi-idénticas a Producción. 

Si por ej, tu ambiente de Producción se encuentra en Azure, pues to non-prod tiene que estar allí también, y está bien si tiene una capacidad menor. Tómalo como un hermano gemelo diminuto de tu ambiente oficial.

2. Construye Pipelines de Promoción

Ya que tienes dos ambientes, ahora es necesario crear pipelines o tuberías automatizadas que permitan promover los cambios desde el ambiente de non-prod a Prod. 

Para esto, al igual que IaC, existen las Pipeline-as-Code (PaC), pero de esto hablaremos en otro artículo. Lo importante en este momento es entender que esas son las Pipelines que te permitirán practicar Continuous Deployment de manera efectiva al llevar tus cambios de un ambiente al otro con mínima intervención humana.

3. Utiliza Automatización la mayoría tiempo

Si quieres ir a dormir cada noche sabiendo que tu infraestructura es estable, necesitas automatizar TODO utilizando IaC.

El mandamiento es “La Automatización Primero”, y para cumplirlo, utilizamos herramientas como Terraform, AWS CloudFormation, Azure RM, Ansible, etc.

Se que suena extremo, pero mantener tu disciplina en sobre este principio es como tener un seguro en contra de accidentes o incendios… porque estos llegarán tarde o temprano (Pesimismo Constructivo).

Ahora, una excepción a esta regla: 

Si aún no estás familiarizado con la infraestructura que utilizaras, deja de lado el IaC momentáneamente y experimenta con esta infra utilizando las herramientas visuales (User Interface) hasta sentirte cómodo. Luego destruye todo lo que hiciste y es momento de re-crearlo utilizando IaC.

4. Evita cambios manuales a la infra o su configuración

Cualquier cambio debe haber sido creado previamente en código. Esto garantizará que el blueprint de tu infraestructura está continuamente reflejando la implementación.

En un futuro post hablaremos sobre Conf-as-Code.

5. Re-crea Non-Prod regularmente

Al seguir los tips anteriores descubrirás que puedes tener varios ambientes de non-prod (por ejemplo: Testing, Staging, UAT, etc), y también descubrirás que estos ambientes pueden ser efímeros, llegando a vivir solo por un tiempo limitado. 

Por este motivo es muy recomendable ser capaz de destruir y re-crear ambientes de non-prod regularmente ya que esto te dará la confianza de recrear tus ambientes en cualquier momento y especialmente en Producción si pasara algo con este ambiente.

Esta mentalidad de saber que los ambientes significa practicar “Infraestructura Lean”.


Para terminar, aplica al menos uno de estos tips y te aseguro que tus ambientes e infraestructura se volverán más robustos, al igual que tu práctica de DevOps en general.

Déjame saber que otros tips tienes tu y como siempre, deja tus comentarios para seguir la conversación!

Keep on Learning….

Leave a Reply

Close
Social profiles
%d bloggers like this: