Pulumi: qué es y usos principales

11min

Pensada para gestionar infraestructura en la nube, Pulumi es una herramienta que nos permite una gran agilidad y flexibilidad, ya que tiene características que la hacen única, como el uso de lenguajes populares o su capacidad de trabajar de una manera transparente sobre múltiples tipos de entornos cloud.

Índice

¿Qué es Pulumi?

Pulumi es una plataforma de las conocidas como Infrastructure as Code, lo que significa en pocas palabras que nos permite usar programación para conseguir desplegar y administrar recursos en la nube. Esto es muy útil por varios motivos, pero sobre todo por la capacidad de mantenimiento de los procesos y la automatización de flujos de trabajo, pruebas y despliegues.

Una de las principales características de Pulumi es que no se trata de un lenguaje de programación nuevo, que tengamos que aprender desde cero. El lugar de ello en Pulumi podemos utilizar otros lenguajes de programación conocidos como TypeScript, Python, Go o C#.

Para crear nuestras infraestructuras usaremos un enfoque imperativo, en lugar de otras herramientas similares que utilizan lenguajes declarativos. Esto nos permite un mayor control sobre las infraestructuras y un trabajo más alineado a las costumbres de los desarrolladores. Paralelamente nos ofrece unas posibilidades de modularización más sencillas y también capacidad de integrarse con otros sistemas.

¿Para qué se utiliza Pulumi?

Como hemos dicho, Pulumi nos permite crear infraestructura en la nube. Es perfecto para equipos DevOps, desarrolladores y administradores de sistemas que necesiten orquestar, automatizar y mantener infraestructuras cloud a partir de código.

Automatización de infraestructura como código (IaC) con lenguajes de programación reales

Lo más destacado y novedoso de Pulumi es que nos permite escribir scripts en lenguajes de programación que probablemente ya conozcas, lo que te permite un acceso más rápido a la tecnología y la reutilización de prácticas que ya dominas en el ámbito del desarrollo del software.

Gestión de recursos en múltiples nubes (AWS, Azure, GCP y más)

También resulta muy relevante la posibilidad de gestionar entornos en distintas plataformas cloud tan variadas como AWS, Azure o Google Cloud, sin olvidarnos de otras más sencillas, económicas y accesibles como la nube de Arsys. Todo ello lo puedes hacer con un único código base, que funcionará en distintos tipos de plataformas de manera segura.

Incluso se pueden gestionar entornos híbridos o multicloud, con lo que los escenarios son diversos y muy flexibles.

Implementación continua de entornos de desarrollo y producción

Gracias al lenguaje puedes implantar de manera sencilla y automática los proyectos en entornos de desarrollo y producción. Además, el propio código de implementación de cada plataforma se integra dentro de la base de código de tu aplicación completa.

Escalado y mantenimiento de infraestructuras modernas en la nube

Gracias al enfoque de infraestructura como código (IaC) es muy fácil mantener los entornos de despliegue en la nube, ya que cualquier cambio simplemente requerirá alterar el código de nuestros scripts, manteniendo las versiones a través de algún sistema de control como Git.

Esto es ideal porque permite un escalado sencillo de los proyectos y la capacidad de optimizar recursos o corregir errores con mínima intervención manual.

Integración con pipelines DevOps para despliegues eficientes y seguros

Por supuesto, puedes integrar Pulumi con cualquier o herramientas de CI/CD, ya sean GitHub Actions, GitLab CI o Azure DevOps, entre otras. Esto te permite automatizar despliegues y realizar tareas habituales como la ejecución de pruebas automáticas o verificación del código, reduciendo el riesgo de errores humanos.

Características clave de Pulumi

Vamos a ver ahora algunas de las características de Pulumi de una manera más detallada, para que puedas entender mejor esta herramienta.

Infraestructura como Código

Como hemos dicho, Pulumi es una herramienta de Infraestructura como Código. Esto nos permite definir infraestructura y procesos de despliegue e integración continua mediante programas que son versionables e integrables en el código de la aplicación.

Soporte para múltiples lenguajes

Otra característica que ya hemos mencionado es el soporte a múltiples lenguajes de programación populares como son TypeScript, Python, Go o C#. Esto hace que no tengas que aprender un nuevo lenguaje con una sintaxis diferente a la que ya vienes utilizando en tu día a día.

Integración con la nube

También es muy destacable que mediante un mismo código puedas trabajar con distintas plataformas cloud,  algunas complejas y poderosas como AWS o Azure, Google y otras más accesibles y económicas como el cloud de Arsys. Por supuesto, también puedes hacer uso de herramientas de contenedores como Docker o de orquestación como Kubernetes, entre otros muchos servicios.

Comunidad y soporte

Aunque Pulumi es una herramienta relativamente nueva ya ofrece una buena cantidad de documentación en Internet gracias a una activa comunidad. Su ecosistema está en rápido crecimiento, por lo que ya puedes encontrar soluciones de integración con una amplia gama de herramientas habituales en el ámbito DevOps.

Gestión del estado

Otra de las posibilidades de la programación imperativa y la integración con recursos accesibles desde los lenguajes de programación soportados, es la posibilidad de gestionar la infraestructura con respecto a fuentes externas y el control de su estado más preciso.

Ventajas de usar Pulumi en proyectos cloud

Con todo lo anterior ya habrás podido apreciar muchas de las ventajas de Pulumi para la gestión de infraestructura en la nube. De todos modos vamos a destacar algunas que nos resultan especialmente importantes.

Código reutilizable y modular

El código de la gestión de infraestructura mediante Pulumi puede beneficiarse de las capacidades de modularización que nos ofrecen los lenguajes de programación modernos, lo que permite trabajar con un estándar de codificación mucho más sofisticado que otros lenguajes declarativos creados específicamente para usar en herramientas DevOps anteriores.

Visibilidad y control del estado de la infraestructura

El control del estado de las infraestructuras puede ser mucho más detallado y minucioso, además de la gestión del propio código DevOps, lo que facilita la trazabilidad de cambios y un historial de versiones.

Integración con herramientas populares (GitHub, Kubernetes, Docker…)

Pulumi está perfectamente integrado con la mayor parte de las herramientas del ecosistema DevOps que ya usas en tu día a día. Algunos ejemplos típicos son Git, GitHub, GitLab, Azure DevOps, Kubernetes, Docker y un largo etc.

Reducción de errores

Gracias a los lenguajes de programación utilizados para definir los procesos se pueden reducir los errores en el despliegue, lo que aporta mayor seguridad al equipo técnico.

Escalabilidad

También es muy sencillo realizar el escalado de los proyectos, comenzando con scripts sencillos que nos permitan definir un despliegue elemental, hasta arquitecturas complejas y distribuidas de proyectos tan grandes como sea necesario.

¿En qué se diferencia Pulumi de otros frameworks?

A lo largo de este post hemos ofrecido algunas características que hacen diferente a Pulumi, con respecto a otras herramientas DevOps que puedas conocer. Algunas de las más importantes son las siguientes.

Uso de lenguajes de programación comunes como TypeScript, Python o Go

Esto te evita tener que aprender un lenguaje específico, como era necesario en otras tecnologías como Terraform.

Enfoque en el desarrollo orientado a software más que solo a infraestructura

El uso de lenguajes de programación populares hace que puedas aplicar los principios de ingeniería de software en la definición e implementación de infraestructuras.

Soporte multicloud desde una única base de código

También es muy relevante la posibilidad de gestionar las infraestructuras desplegadas en múltiples plataformas de Cloud, todo ello desde una única base de código.

Integración nativa con herramientas CI/CD modernas

Pulumi es perfectamente compatible con sistemas de pipelines automatizados y despliegues continuos como los mencionados GitHub Actions o Azure DevOps.

Mayor flexibilidad frente a la sintaxis declarativa de Terraform o CloudFormation

A veces la sintaxis declarativa y específica de tecnologías como Terraform o CloudFormation hacían difícil la aplicación de reglas para la construcción de la infraestructura. En el caso de Pulumi es inmediato aplicar lógica condicional o bucles, ya que se usan los propios lenguajes imperativos, así como el acceso a todo tipo de recursos externos.

Pasos sobre cómo empezar a usar Pulumi

En los siguientes puntos vamos a ver cómo puedes comenzar a usar Pulumi. Verás que es bastante sencillo y rápido.

1. Instala Pulumi en tu sistema operativo

Comenzamos por instalar Pulumi en nuestro sistema operativo. Está disponible para Windows, macOS y Linux, por lo que es perfectamente accesible e integrable con tus herramientas habituales.

Dependiendo de tu sistema operativo la instalación puede cambiar pero generalmente usarás los gestores de paquetes como Homebrew, Chocolatey. También puedes descargar los binarios del software con el instalador desde la web oficial: https://www.pulumi.com/docs/iac/download-install/

2. Crea tu cuenta y configura las credenciales de nube

Dentro de los distintos productos que ofrece la plataforma Pulumi hemos abordado específicamente Pulumi IaC. Este producto lo puedes utilizar tanto con Pulumi Cloud como con una instalación de un software libre en tu máquina. Tienes todos los detalles en la página de documentación: https://www.pulumi.com/docs/iac/get-started/

Si quieres usarlo como Pulumi Cloud necesitas crear tu cuenta y configurar las credenciales de tus plataformas cloud (AWS, Azure, GCP, etc.) siguiendo la documentación para autenticar tus despliegues.

Si lo usas en tu propia máquina tendrás que aplicar esas credenciales en tus variables de entorno, tal como indica la documentación.

3. Inicia un nuevo proyecto con tu lenguaje favorito

Cuando trabajas en tu ordenador local podrás utilizar el comando «pulumi new» para crear un proyecto base en el lenguaje que prefieras, que defines en el asistente, ya sea TypeScript, Python, Go o C#

Esto genera la estructura inicial con archivos y dependencias ya específicos del lenguaje que hayas escogido.

4. Define tu infraestructura como código en el archivo principal

A partir de aquí ya se trata de definir tus recursos cloud en el archivo de código fuente de arranque. Guíate por la documentación para ver cuáles son las API disponibles de las bibliotecas del lenguaje escogido, que te permiten crear recursos como máquinas virtuales, redes, bases de datos, etc.

5. Ejecuta pulumi up para desplegar tu infraestructura

Una vez tengas definido tu código utiliza el comando «Pulumi up» para lanzar el proceso de creación y despliegue en tu infraestructura. Este comando analizará tu código fuente y realizará un informe de los resultados de aplicación de tus configuraciones, mostrando un resumen antes de confirmar la ejecución.

Casos de uso reales de Pulumi

Realmente podemos usar Pulumi en cualquier proceso de despliegue, ya que se adapta a múltiples escenarios, tan simples y complejos como requieras. De todos modos, le sacaremos partido si la automatización y el control de la infraestructura son muy importantes para ti.

Automatización del despliegue de microservicios en Kubernetes

Por ejemplo, puedes sacarle mucho partido en despliegues complejos, donde tengas que orquestar múltiples contenedores con Kubernetes. De este modo puedes definir clústeres y desplegar aplicaciones dockerizadas sin tener que intervenir manualmente.

Gestión de entornos de staging y producción en la nube

También te vendrá muy bien cuando tengas que gestionar diversos entornos para la ejecución de las aplicaciones. Cada uno de estos entornos puede estar perfectamente separado y tener configuraciones específicas, lo que facilita las pruebas y los despliegues.

Aprovisionamiento de servidores y redes en AWS o Azure

Puedes gestionar mediante Pulumi todo tipo de infraestructura, tan sencilla o avanzada como requiera tu proyecto, desde simples instancias, hasta balanceadores, subredes y reglas de firewall.

Configuración de pipelines DevOps en plataformas multi-cloud

Si tienes que realizar también el trabajo utilizando múltiples plataformas de Cloud al mismo tiempo Pulumi te facilitará mucho la labor, ya que es multi-cloud de manera nativa.

Creación de infraestructura serverless en AWS Lambda o Azure Functions

También permite el trabajo con infraestructura serverless como AWS Lambda o Azure Functions, lo que permite ejecutar aplicaciones y procesos sin gestionar servidores físicos.

Fernando Fuentes

Productos relacionados: