Terraform vs Pulumi



Dentro de las herramientas de Infraestructura como Código (IaC), sin duda, la más conocida es Terraform. Permite definir y gestionar infraestructura en los distintos clouds, gestionar parámetros, variables y archivos de configuración. En definitiva, una herramienta IaC permite automatizar procesos de infraestructura.
Con esta misma filosofía, surge Pulumi, una plataforma gratis y open source. En este artículo vamos a ver los puntos en común y las principales diferencias entre ambas tecnologías.
Puntos en común
Tanto Pulumi como Terraform funcionan de forma similar. Ambos son capaces de gestionar un estado de la infraestructura, compararlo con el estado del cloud y realizar los cambios necesarios en los mismos para adaptarse a lo indicado en el código. En ese sentido, los flujos de ejecución son similares, teniendo ambas tecnologías comandos para inicializar, previsualizar, implantar y destruir.
También cuentan con su propio cloud para almacenar y gestionar los estados. Estos son los ficheros donde los servicios almacenan toda la información sobre qué hay desplegado, por lo que es de vital importancia tenerlos accesibles y bien securizados. Los servicios cloud de ambos sistemas son de pago y añaden facilidades de acceso y control. Sin embargo, de forma gratuita se puede autogestionar estos ficheros y almacenarlos en cualquier cloud que ya tengamos.
Diferencias
La principal diferenciación entre ambos sistemas es el lenguaje de programación. Terraform nació con su propio lenguaje: HCL (HashiCorp Configuration Language). Es un lenguaje declarativo y de sintaxis simple, bastante intuitivo, que permite una definición clara de la infraestructura. La curva de aprendizaje de HCL es muy leve y con conocimientos de un cloud concreto se puede aprender fácilmente.
Por otro lado, Pulumi es un sistema que se adapta a los diferentes lenguajes de programación. Al momento de escribir este artículo está disponible para Python, TypeScript, JavaScript, Go, C#, F#, Java y YAML (usando Pulumi CLI). La ventaja evidente de este enfoque es que cualquier programador con conocimientos de alguno de estos lenguajes puede entrar a usar Pulumi sin apenas esfuerzo. Además, esto permite que se aproveche el resto de funcionalidades de los lenguajes de programación (librerías, gestión de variables y recursos, etc) y se enriquezca así el uso del servicio.
Otra diferencia interesante es la licencia. Aunque a nivel de uso no hay diferencia efectiva en el día a día, es importante destacar que Terraform cambió su licencia a BSL (Business Source License) mientras que Pulumi se mantiene como software libre con una licencia Apache.
En cuanto a la funcionalidad encontramos alguna diferencia en la gestión de los estados. En Terraform el estado (o tfstate) se almacena en claro, por lo que es muy importante controlar desde dónde se accede y con qué credenciales ya que puede contener secretos e información sensible. Para evitar esto, Terraform permite la encriptación con Vault.
Con Pulumi sin embargo el estado se puede almacenar encriptado por defecto con la propia herramienta. De esta forma la capa de seguridad se da sin necesidad de un servicio externo. Al venir de forma nativa también se puede ajustar de forma más fina, encriptando sólo la información sensible, con varias claves, etc.
Por último, como desarrolladores no debemos pasar por alto la comunidad y la documentación de una tecnología a la hora de elegirla. Terraform apareció en 2014 y por el camino ha ido creando una gran comunidad de desarrolladores, así como una de las mejores y más completas documentaciones oficiales, muy actualizada y bien documentada. Por otra parte, aunque Pulumi comenzó en 2017 no ha sido hasta los últimos años cuando ha comenzado a ganar fuerza, por lo que no está tan asentada ni es tan popular aunque va ganando fuerza poco a poco. Su documentación oficial parece bastante completa y bien estructurada, sin embargo, depende del lenguaje de programación que se seleccione e implica un conocimiento previo en dicho lenguaje para entenderla correctamente.
Conclusión
La elección entre Pulumi y Terraform depende de las necesidades y preferencias del equipo. Pulumi puede ser ideal para equipos que desean aprovechar lenguajes de programación comunes y buscan una integración fluida con sus flujos de trabajo de desarrollo. Terraform, por otro lado, es una opción sólida y estable con una comunidad amplia, ideal para aquellos que prefieren un enfoque declarativo y necesitan soporte extensivo.