Spiga

Packer, imágenes idénticas para múltiples plataformas

Hola!

A través de la lista de correo de madrid-devops he conocido Packer, una herramienta libre que permite crear imágenes idénticas para diferentes plataformas partiendo de un único fichero de configuración. Packer es ligero, multiplataforma, tiene un rendimiento muy bueno, ya que crea las imágenes en paralelo, y es posible integrarlo con Chef o Puppet para instalar y configurar software en las imágenes.

Una herramienta como Packer presenta unas características muy interesantes, ya que permite lanzar máquinas totalmente operativas y configuradas en segundos y además permite tener exactamente el mismo equipo (con unas configuraciones idénticas) en, por ejemplo, una máquina en producción en AWS, otra para pruebas en un cloud privado como OpenStack y otra en el equipo del desarrollador en VMWare o VirtualBox.

Actualmente se pueden crear imágenes para Amazon EC2 (AMI), DigitalOcean, VirtualBox (OVF) y VMWare (VMX), pero el proyecto está trabajando para ampliar la lista y además permite que cualquiera pueda colaborar para soportar más plataformas a través de plugins.

En la sección de documentación de la web de Packer pueden encontrarse  ejemplos de configuración. Así, el siguiente ejemplo muestra cómo se lanzaría una imagen Amazon EC2 AMI con Redis preinstalado.  Para ello es necesario crear una plantilla (template) que define qué queremos construir y cómo queremos configurarlo. El formato elegido para las plantillas es JSON, ya que permite que sea editado fácilmente por personas y que sea generado de forma automática por un equipo.

El contenido del template ejemplo.json sería el siguiente:

{
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "YOUR KEY HERE",
    "secret_key": "YOUR SECRET KEY HERE",
    "region": "us-east-1",
    "source_ami": "ami-de0d9eb7",
    "instance_type": "t1.micro",
    "ssh_username": "ubuntu",
    "ami_name": "packer-example {{.CreateTime}}"
  }],

  "provisioners": [{
    "type": "shell",
    "inline": [
      "sudo apt-get update",
      "sudo apt-get install -y redis-server"
    ]
  }]
}

A continuación, lo único que habría que hacer para lanzar la imagen sería validar la plantilla:

$ packer validate ejemplo.json

Y, por último, lanzar la imagen:

$ packer build ejemplo.json


Packer se trata por tanto de una herramienta ideal para la integración y la entrega continua (continuous delivery), ya que se puede usar para generar una nueva máquina para múltiples plataformas por cada cambio que se produzca en Chef o Puppet, lo que no sólo se traduce en mejoras en la estabilidad frente cambios en la infraestructura, sino que es un sistema perfecto para mantener la consistencia en el entorno de trabajo desde el desarrollo hasta los equipos en producción.