Amazon Beanstalk

Beanstalk es un servicio gestionado pensado para el desarrollador, que permite de forma simplificada implementar todos los servicios necesarios para el desarrollo que se esté realizando: EC2, ASG, ELB, RDS, … Todo esto está integrado en Beanstalk para poder hacer despliegues sencillos, pero con un control total sobre la configuración.

El servicio de Beanstalk es gratuito, solo se paga por la infraestructura desplegada.

Componentes

Beanstalk está formado por los siguientes componentes:

  • Aplicación
  • Despliegue: Versión de la aplicación
  • Entorno (dev, test, prod, …)

Funcionalidades

  • Desplegar una versión de una aplicación a un determinado entorno.
  • Promocionar una versiónd de la aplicación al siguiente entorno (dev->test)
  • Rollback a la versión previa de la aplicación
  • Control total sobre el ciclo de vida de cada entorno
  • Clonar un entorno en otro, para simular en PRE lo que tenemos desplegado en PRO, por ejemplo.
  • Soporte para: Go, Java SE, Java con Tomcat, .NET en Windows con IIS, Node.js, PHP, Python, Ruby, Packer Builder, Single Container Docker, Multicontainer Docker, Preconfigured Docker.

Deployment Modes

Single Instance

Consiste en una instancia EC2 con un SG y una Elastic IP, y una base de datos en otro SG, todo dentro de una AZ.

Es ideal para desarrollo.

High Availability with Load Balancer

Consiste en varias instancias EC2 distribuidas en varias AZ, cada una con un SG, y una base de datos RDS en HA con Multi-AZ. Además, incluye un ELB para los servicios web de las EC2.

Es ideal para entornos de producción que necesitan HA y balanceo.

Opciones para despliegues al actualizar

Al desplegar actualizaciones de una aplicación, hay varios modos que podemos utilizar.

All at once

Es la más rápida, pero hay un corte de servicio ya que se actualiza la versión sobre las mismas instancias, y hay un tiempo en el que no están disponibles.

Rolling

Actualiza la versión de algunas instancias (bucket size) al mismo tiempo (eliminando previamente las antiguas), y cuando están totalmente disponibles continúa con las siguientes. No aumenta el número de instancias, pero hay momentos donde hay menor número de ellas para atender peticiones.

Rolling with additional batches

Similar al anterior pero antes de parar las instancias de versión anterior, se asegura de desplegar la nueva versión en las nuevas instancias. Es buena para entornos de producción, aumenta temporalmente el número de instancias utilizadas.

Immutable

Crea las nuevas instancias en un nuevo ASG, y despliega las nuevas versiones ahí y cuando está todo disponible intercambia las instancias. Es bueno para RollBack rápidos en caso necesario.

Traffic Splitting (Blue/Green)

Se despliega la nueva versión en nuevas instancias y se divide el tráfico entre la nueva versión y la anterior.

Línea de comandos (CLI)

Se puede instalar un CLI adicional, para realizar de forma más simple tareas o automatizada de gestión del entorno de Beanstalk. Los comandos básicos son

eb create
eb status
eb health
eb events
eb logs
eb open
eb deploy
eb config
eb terminate

LifeCycle Policy

Beanstalk permite almacenar un máximo de 1000 versiones de aplicaciones. Por tanto, si no se borran las versiones más antiguas, no permitirá hacer más despliegues al haber superado ese número.

Para ayudar a gestionar esta situación, se puede aplicar una política que elimine las versiones antiguas:

  • Basado en tiempo, borrando las versiones más antiguas
  • Basado en espacio, almacenando un máximo de versiones

Las versiones en uso no se borran nunca, y permite no borrar el código fuente original manteniéndolo en S3, para prevenir pérdida de datos.

Extensiones

Permite configurar los parámetros de la consola mediante ficheros de código:

  • Debe estar en el directorio .ebextensions/ del root del código fuente
  • Formato JSON o YAML
  • Ficheros con extensión .config (ej: logging.config)
  • Posibilidad de modificar opciones por defecto
  • Posibilidad de añadir recursos como RDS, ElastiCache, DynamoDB, …

En este mismo directorio se puede utilizar código de CloudFormation para desplegar los recursos que necesitemos.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.