Analizamos Pulumi: Infraestructura como Código (Parte I)

Matias Montivero
Caminos a la nubes
La convergencia de las nuevas tecnologías en Cloud Computing llevo a las diferentes compañías a elaborar productos...

Analizamos Pulumi: Infraestructura como Código (Parte I)


La mascota de Pulumi

La convergencia de las nuevas tecnologías en Cloud Computing llevo a las diferentes compañías a elaborar productos que se adecuen a las operaciones diarias y se ajusten a las herramientas innovadoras utilizadas por los equipos de IT. Cada vez son mas los productos que buscan alojarse y operar con gigantes como AWS, GCP o Azure, permitiendo a los clientes tener confiabilidad en el uso de las aplicaciones que ellos ejecutan en sus dispositivos.

Por contra parte, los programadores de aplicaciones se vieron obligados a implementar soluciones que se adecuen al concepto y arquitectura central de la computación en la nube y así brindar a los productos que ellos construyen las características fundamentales que trae consigo Cloud Computing, como la escalabilidad, confiabilidad, tolerancia a fallos y resiliencia. Ahora bien, una vez construidas estas aplicaciones es necesario tener herramientas para realizar pruebas, despliegues y monitoreo, donde los SysAdmin bajo la aplicación de la filosofía DevOps, son un nexo principal para lograr esta relación que lleva al éxito del producto. Las herramientas que actualmente se encuentran en el mercado para las operación de CI/CD a pesar de ser potentes , conllevan a aprender nuevos lenguajes o sintaxis de códigos ,lo cual requiere una inversión de tiempo y aprendizaje inicial. Sin embargo, surgio en el mercado una nueva tool que nos permite tener flexibilidad y otras caracteristicas interesantes , esta herramienta es Pulumi.

¿Que es Pulumi?

Pulumi es una plataforma de desarrollo multilingüe y multinube. Permite crear todos los aspectos de los programas en la nube utilizando lenguajes reales y código real, desde la infraestructura hasta la aplicación en sí. Simplemente basta con escribir programas y ejecutarlos, y Pulumi realizará el resto. [1]

Pulumi fue fundada en el año 2017, lanzando su producto en el año 2018. Esta herramienta permite a los equipos de infraestructura, deployar componentes en la nube a través de la definición de código tal como JavaScript, TypeScript, Go, .NET y Python. La ventaja que tiene esto, es que ya no se debe aprender ningún lenguaje nuevo (DSL), ahora el equipo de desarrollo y equipo de operaciones hablan un lenguaje común, permitiendo así la colaboración entre ambos equipos .

Cuestión de Código, Cuestión de Arquitectura

Escribir código no solo se basa en tipear un par de lineas. Significa construir una aplicación con una arquitectura, un modelo y un flujo previamente diseñado. La codificación no es mas que plasmar en un lenguaje común, una arquitectura funcional de una aplicación. Ahora bien , esto para Pulumi es una ventaja, ya que nuestras programas van a tener un plus adicional: ser código.

Esto significa, que ahora nuestra arquitectura plasmada en la nube ahora es fácilmente codificable. Podemos modelar los componentes, los diagramas y las interacciones y luego implementarlas. Otra de las ventajas es que podemos aprovechar las estructuras de datos provistas por los lenguajes así como también las estructuras de control y las librerías.

Otra posibilidad que tenemos a nuestro alcance, es construir nuestras propias librerías que pueden ser usadas por otros usuarios, por ejemplo, queremos construir una librería que implemente solamente un componente (por ejemplo un S3 de AWS), por otra parte podemos construir una infraestructura que la use. La ventaja de esto es que las tareas de codificación para la creación de infraestructura puede ser particionable en N librerías y asignables a diferentes actores en un equipo.

Testeando el codigo ¿Ahora es posible?

Me permito a adelantar la respuesta… SI! Una practica fundamental y casi intrínseca del código, es que debe ser testeable. Pulumi aprovecha las librerías de pruebas que usan los diferentes lenguajes (Por ejemplo Mocha para JavaScript). Con esto se pueden hacer Mocks (simulaciones) de objetos que se van a desplegar en la nube a fin de testear ciertos comportamientos o características en el despliegue. Entonces ahora no es necesario desplegar y luego comprobar el error para desistir y borrar, todos sabemos que lleva tiempo e incluso a errores que nos inducirían a gastos innecesarios. Ahora con Pulumi podemos testear “objetos” antes de despegarlos y descubrir errores anticipadamente.¿ Y si ahora podemos hablar con el equipo de QA? Esto sin duda es extraordinario, porque no solo nos brinda la posibilidad de unificar el idioma a mas actores del equipo sino que también permite la inserción de practicas de calidad a nuestro desarrollo de Infraestructura, por lo tanto los errores se vuelven mas “trackeables” , induciendo la calidad de cogido a calidad de despliegue.

Hablemos de desventajas.

Hasta ahora vimos una potencia indudable, pero como toda herramienta tiene ciertas desventajas (a opinión propia). Una de las principales es al usuario dirigido. Los equipos de devOps generalmente no son muy cercanos a construcción y planificación de código, solamente están abocados al despliegue y monitorizacion de ambientes, por lo cual resulta ser algo tedioso. Otra de las desventajas es la rápida transformación de la herramienta ( aunque también puede ser ventaja), es decir, la herramienta es joven pero va evolucionando rápidamente, quizás esta se contrarresta por el gran respaldo de la comunidad para resolver desactualizaciones en nuestra sapiencia en la implementacion con Pulumi.

Como funciona Pulumi?

Como dijimos anteriormente, Pulumi nos permite hacer despliegue en varios proveedores Cloud y en cualquier lenguaje, para ello es necesario alguna implementacion que permita no solo traducir lo que el usuario quiere sino que también “reconocer” cual es el contexto actual en el proveedor. Conocer este contexto implica saber en que entorno estamos parados y que recursos tenemos disponibles. Para ello necesitamos:

  • Lenguaje: Es el lenguaje que necesitaremos para correr nuestra aplicación. Hasta el momento que se escribio este articulo los lenguajes soportados son JavaScript, TypeScript, Go y .NET.
  • CLI: Es la interfaz por la cual el usuario se comunica con el Engine de Pulumi. Con esta CLI podemos escribir comandos que luego seran interpretados y ejecutados por el motor de pulumi.
  • Engine: Es el componente que traduce los comandos que el usuario ingresa por la CLI para luego realizar todas las operaciones correspondientes. Ademas realiza comprobaciones para determinar si se debe crear, actualizar o eliminar recursos del contexto.
  • Provider: Si bien lo entendemos como un componente externo, Pulumi crea una abstracción de el y permite la comunicación para realizar operaciones sobre el. Por proveedores entendemos a aquellos que soporta Pulumi por ejemplo AWS, GCP, Azure, Kubernetes, etc. Podríamos entonces decirle a pulumi a traves de la CLI que cree un bucket S3 en mi cuenta de producción en el provider AWS, esto permitirá que el Engine entienda este requerimiento se comunique con AWS y aplique estos cambios.
  • Stack: Es la “base de datos” que contiene todos los recursos de nuestro contexto. En el Stack o pila podemos encontrar todos los recursos que hemos creado o importado. Una buena practica es crear un stack por entorno por ejemplo: dev, prod, stagging de manera de tener bien separados nuestros recursos y aislados por entorno.

Conclusión

Pulumi otorga una gran flexibilidad debido a sus soporte de multilenguaje y multinube. Con esto permite que los DevOps puedan utilizar un lenguaje comun con los desarrolladores. Ademas, permite una mejor abstracción de la arquitectura deseada asi como tambien el aprovechamiento de “la prueba antes del gasto”. Si bien existe otras herramientas para CI/CD, Pulumi sin duda llego para dar otro enfoque a las herramientas ya existentes, combinando la potencia de la codificación con la implementacion de buenas practicas de integracion y entrega continua.

En el próximo articulo haremos una pequeña prueba e implementaremos una pagina web estatica guiandonos por la documentacion de Pulumi. Ademas, explicaremos a fondo algunos comandos que nos permitiran realizar algunas operaciones.

BIBLIOGRAFIA.

[1] Hello Pulumi http://joeduffyblog.com/2018/06/18/hello-pulumi/

Pulumi Documentation http://www.pulumi.com


Matias Montivero

Cloud Ops in IncluiT for Naranja | Lic. Cs de la Computacion | Tec. Universitario en Programacion

Related Posts

Únete a nuestra Newsletter

Lidera la Conversación en la Nube