Introducción a la creación automática de plantillas con Packer

Algunas de las tareas de automatización que más retorno nos pueden ofrecer (siempre y cuando trabajemos en infraestructuras con mucha generación de VMs) son las que van relacionadas con el despliegue de nuevas máquinas virtuales. En esta entrada conoceremos a Packer, la herramienta que nos permitirá crear y personalizar plantillas de sistema operativo de forma automática en multitud de plataformas y en la que nos apoyaremos en futuras entradas para acercarnos al mundo del IaC.

Introducción a la creación automática de plantillas con Packer

¿Qué es Packer?

Packer es una herramienta de software libre desarrollada por Hashicorp que nos permite crear imágenes de sistema operativo de forma automatizada y utilizando archivos de configuración para tal efecto.

Una vez creada la configuración (que veremos en próximas entradas) Packer se conectará a la infraestructura de destino, creará la máquina virtual y aplicará todas las configuraciones que hayamos definido en nuestros archivos. Todo esto mientras nos tomamos un rico café.

Packer incluye la funcionalidad necesaria para trabajar con las grandes plataformas del mercado sin la necesidad de instalar ningún plugin adicional:

  • Aws.
  • Azure.
  • DigitalOcean.
  • Docker.
  • Google Cloud Platform.
  • Hyper-V.
  • VMware.

Podéis consultar la lista completa aquí.

Además, Packer funciona con todos los grandes sistemas operativos del mercado, permitiéndonos crear imágenes de cualquiera de ellos, así como la capacidad de trabajar con las herramientas de gestión de configuración más importantes como Ansible, Chef o Puppet.

Si queréis más información sobre esta impresionante herramienta os recomiendo que os paséis por su sitio web donde disponen de muchísima información al respecto.

¿Qué ventajas tiene crear plantillas con Packer?

La generación automatizada de plantillas con Packer puede aportarnos muchos beneficios a nuestro flujo de trabajo:

  • Velocidad de aprovisionado: Con Packer nuestras plantillas pueden disponer siempre de las últimas versiones de sistema operativo y de aplicaciones, con lo que podemos desplegar una plantilla siempre lista para su uso en cuestión de segundos o pocos minutos.
  • Consistencia: Utilizando Packer nos aseguramos de que todas las máquinas virtuales que despleguemos partirán de la misma configuración.
  • Consistencia multiplataforma: Siguiendo con el punto anterior, con Packer podemos partir de imágenes idénticas si disponemos de entornos híbridos. En todo momento estaremos seguros que nuestra instancia de Compute Engine de GCP es identica a nuestra máquina virtual de VMware vSphere.
  • Versionado de configuración: Tener nuestras configuraciones en archivos de texto nos permite versionarlas de forma muy sencilla, por ejemplo, con Git, con lo que siempre podremos echar la vista atrás a la hora de hacer troubleshooting de nuestras máquinas.

Cómo funciona Packer

Packer utiliza templates en formato JSON con los que definiremos las distintas configuraciones necesarias para el despliegue, configuración y post procesado de nuestras plantillas.

Una template de Packer dispone de los siguientes elementos de configuración (subrayados los más importantes) para generar nuestras imágenes:

  • Variables (opcional): Una sección de nuestra template en la que podremos definir variables que utilizaremos posteriormente en la misma. Es opcional pero más que recomendable utilizar variables para facilitar el uso de nuestra template. Las variables pueden ser definidas en un archivo separado de nuestra template.
  • Descripción (opcional): Un campo en el que podemos definir qué hace nuestra template.
  • Builders (obligatorio): En esta sección definiremos los «constructores» de nuestra plantilla, esto es, la parte encargada de conectarse con la infraestructura destino (VMware, GCP, AWS…) y que construirá la plantilla.
  • Versión mínima de packer (opcional): Un campo en el que definiremos la mínima versión necesaria de packer necesaria para desplegar nuestra plantilla.
  • Provisioners (opcional): La sección donde configuraremos todo lo necesario para instalar y configurar el software del sistema operativo. Aquí tenemos la opción de hacerlo mediante scripts o con una herramienta externa de gestión de configuración.
  • Post processors (opcional): La sección encargada de definir los pasos posteriores a la creación de la imágen, como subirla a otra infraestructura, renombrar, convertir a plantilla…

Cómo instalar Packer

Existen distintas formas de instalar Packer, podéis consultar todas ellas en su documentación.

De largo la forma más sencilla es descargar sus binarios precompilados y ubicarlos en el path de nuestro usuario. Si queremos conocer las posibles ubicaciones:

  • Linux / MacOS: Desde un terminal ejecutamos echo $PATH.
  • Windows: Desde PowerShell ejecutamos $Env:Path.

Una vez copiados los ejecutables en dichas ubicaciones deberíamos ser capaces de ejecutar desde nuestra terminal el comando packer sin problemas.

Conclusión

Hasta aquí esta entrada introductoria sobre Packer. En próximas entradas empezaremos a construir plantillas de sistema operativo y veremos todo el potencial que oculta esta increíble herramienta.

¡Nos leemos en la próxima!

Deja un comentario