intive Argentina Blog

Packer vs EC2 Image Builder

Pensemos en el proceso de poner a disposición un nuevo servidor donde nuestra aplicación o aplicaciones van a ejecutarseNecesitamos varios pasos para que eso suceda en un ambiente productivo. A efectos prácticos, podemos dividir este proceso en tres grandes fases compuestas por varios pasos: 

Fase 1: Levantar una instancia 

Esta fase abarca todos los pasos que van desde que se inicia la instancia hasta que esté todo lo necesario para ejecutar una aplicación. En un paso intermedio, también se puede considerar la actualización de los parches de seguridad. Es un segmento del proceso que puede demorar entre 3 minutos y media hora. El tiempo total es una incógnita, ya que, si existe un proceso de actualización, lo que dure esta fase dependerá de qué tan desactualizada se encuentre la imagen del sistema operativo que estemos usando. 

Fase 2: Lanzar una aplicación 

Esta segunda fase incluye copiar la aplicación al servidor, aplicar la configuración necesaria y, ejecutarla. Este segmento del proceso puede tardar desde segundos a pocos minutos si todo sale correctamente. 

Fase 3: Desplegar la instancia 

Ahora que tenemos todo lo necesario, el siguiente paso en esta tercera fase es agregar el servidor a la infraestructura, de tal manera que empiece a recibir tráfico de los usuarios. Lo normal es que se agregue a un balanceador de carga, que distribuirá las peticiones de los usuarios entre las distintas instancias que se tienen de la aplicación. Cuando se utiliza un balanceador de carga, al menos en AWS, se espera que pase una secuencia de peticiones a la aplicación para asegurarse que puede recibir peticiones de los usuarios. Esto puede tardar varios minutos en finalizar. 

El cooldown 

Todos los pasos anteriores transcurren dentro de lo que se conoce como “cooldown”, tiempo que va desde la toma de decisión de agregar un nuevo servicio hasta que el mismo está disponible. Durante ese lapso, cualquier indicador que nos diga que necesitamos agregar o retirar nuevos servidores, no debería ser tomado en cuenta. 

Ahora, lo que sí debemos considerar es que, si nuestro proceso de punta a punta nos lleva mucho tiempo (ejemplo: un servidor tarda 45 minutos en levantarse y ponerse a disposición) vamos a necesitar predecir con muchísima antelación agregar un servidor, lo que no solamente tiene un impacto en el rendimiento de la aplicación, sino también monetario. Agregar recursos o retirarlos puede afectar el comportamiento de nuestra aplicaciónya que se nos dificulta saber cuándo los usuarios realmente los necesitan. 

Existen varias estrategias para poder bajar estos tiempos, con el fin de no tener que anticipar y errar la creación de nuevos recursos. En este lugar aclaro: eliminar un recurso, a efectos de infraestructura, es mucho más rápido que crearlo. Una de estas alternativas es crear una imagen. 

Utilizar una imagen previa: Packer y EC2 

Para reducir el tiempo invertido en levantar una instancia y desplegar una aplicaciónen lugar de hacer todo el proceso de cero, desde actualizar el sistema operativo, podríamos tener una imagen que anteriormente hayamos preparado. Así obtendríamos nuestra instancia nueva en pocos minutos. 

Ahora, después de una larga introducción, llegamos a dos herramientas que nos facilitan crear imágenes que podemos usar dentro de nuestra infraestructura. 

Packer es una herramienta multiplataforma, que ya tiene un tiempo en el mercado. Permite una fácil integración con otras herramientas de provisionamiento y proveedores, de manera muy transparente. Para utilizarla necesitamos dos componentes mínimos: un archivo JSON y el ejecutable que va a ejecutar el archivo JSON que definimos. 

MientrasEC2 Image Builder es una herramienta relativamente nueva, que usa YML y permite una integración nativa con AWS. La mayor diferencia con Packer es que podemos definir pasos más chicos, y reutilizarlos en diferentes construcciones de imágenes. Una clara desventaja que tiene es que, por el momento permite usar solamente dos tipos de imagen (Windows y Linux), mientras que Packer no muestra limitaciones en este aspecto. Esto es definitivamente un problema cuando necesitamos una imagen distinta a las que nos ofrece AWS por defecto. Por ejemplo, si quisiéramos entonces usar una distribución de Linux diferente, deberemos instalar un agente y crear la imagen manualmente para después automatizarla.  

Pero, para darle puntos a EC2 Image Builder, esta herramienta tiene dos funcionalidades que mencionamos antes que me parecen interesantes: 

  • Permite ejecutar la creación de imágenes variacon diferentes condiciones (por ejemplo, ante un evento en la infraestructura o, cada cierta cantidad de tiempo). 
  • Se pueden reutilizar componentes con facilidad, tanto para crear, como para probar la imagen (siendo esta última en sí misma, otra funcionalidad que me pareció interesante: la opción de poder ejecutar código para probar la imagen). 

Entonces, ¿Packer o EC2 Image Builder? 

 Packer tiene grandes puntos a favor como su madurez y sencillez para empezar a usarPara cualquier persona que venga usando herramientas como Chef, Puppet o Ansible, es fácil dar el brinco. También es multiplataforma y fácil de integrar con otros servicios. 

Por el momento, EC2 Image Builder es un producto bastante nuevo, comparado con Packer. Realmente, su curva de aprendizaje, para alguien que no está acostumbrado al ecosistema de AWS, es bastante complicada. La herramienta resulta confusa ya que existen varios detalles sobre los que tener especial cuidado. Tiene sus ventajas por su integración con otros servicios AWS. 

La elección queda en cada uno de ustedes, pero, como pensamiento final, les dejo 

“Las especies que sobreviven no son las más fuertes, ni las más rápidas, ni las más inteligentes; sino aquellas que se adaptan mejor al cambio.” Charles Darwin 

Rodolfo Cordero

Rodolfo Cordero es desarrollador en la compañía desde junio de 2016. Es Licenciado en Desarrollo de Software, graduado de la Universidad Latina de Costa Rica, país del cual es oriundo. Asiduo lector y melómano, hizo cursos de coctelería y barismo, habilidades con las que deleita al staff de intive en los afters organizados por la compañía.

Deja un comentario