Auto Scaling: Configurar autoescalamiento en AWS

Auto Scaling: Configurar autoescalamiento en AWS

¿En qué consiste el auto scaling?

El autoscaling es la habilidad de poder montar servidores en proporción a las cargas de trabajo en la nube. Provisionar servidores en demanda (instancias de EC2) y después liberarlos cuando no estén siendo utilizados puede proveer una reducción de costo significativo para aplicaciones que no tienen cargas de trabajo constante.

¿Que planes de auto scaling existen?

Existen diferentes tipos de esquemas de auto scaling que se pueden usar para controlar el performance.

Auto scaling por número de instancias fijo (Maintain Current Instance Levels)

Se puede configurar Auto Scaling para mantener un numero mínimo o especificado de instancias ejecutándose al mismo tiempo. Para mantener este numero, Auto Scaling realiza checks periódicos en instancias ejecutándose dentro de un Auto Scaling Group. Cuando encuentra alguna que no este en buenas condiciones, la termina y crea una nueva.

Auto scaling por escalamiento manual (Manual Scaling)

Es la forma mas básica de escalar los recursos, solo es necesario especificar el cambio en el numero máximo, mínimo o deseado de capacidad de su Auto Scaling Group. Auto Scaling maneja el proceso de crear o terminar instancias para mantener la capacidad actualizada.

El escalamiento manual puede ser muy útil para incrementar los recursos de un evento infrecuente (pe una noticia muy vista o el release de un nuevo producto). Para eventos extremos incluso el load balancer puede estar preparado para trabajar con cargas de trabajo enormes.

Auto scaling por escalamiento calendarizado (Scheduled Scaling)

Algunas veces es necesario incrementar o decrementar el numero de instancias en el grupo en un momento específico. El escalamiento calendarizado (scheduled scaling) permite realizar estas operaciones de forma automática en función de la hora y fecha.

Dynamic scaling

Le permite definir parámetros que controlan el proceso de auto escalamiento mediante políticas. Es posible por ejemplo añadir mas instancias a la capa web cuando el ancho de banda medido por CloudWatch alcance determinado punto.

¿Cuáles son los componentes del auto scaling?

Configuración de Despliegue (Launch Configuración)

Es una plantilla (template) que Auto Scaling utiliza para crear nuevas instancias y esta compuesta de:

  • El nombre de la configuración.
  • La AMI.
  • El tipo de instancia.
  • El grupo de seguridad.
  • La llave (key pair) de la instancia.

Cada Auto Scaling Group puede tener únicamente una configuración de despliegue a la vez.

Ejemplo de configuración de auto scaling:

  • nombre: miLC
  • ami: ami-0242a99b
  • tipo de instancia: m3.medium
  • security group: sg-a32cda4d
  • instance key pair: miLlave

$ aws autoscaling create-launch-configuration –laun-configuration-name miLC –image-id ami-0242a99b –instance-type m3.medium –security-groups sg-a32cda4d –key-name miLlave

¿Qué es el escalado dinámico (Dynamic Scaling)?

El escalado dinámico permite definir parámetros que controlan el proceso de AutoScaling en una política de escalado. Por ejemplo, se pueden agregar mas instancias.

Los Security Groups para instancias EC2-Classic pueden ser referenciados como “SSH” o “Web” o “sg-659584”.

Los Security Groups para instancias en VPC utilizan el Security Group ID para referenciar cuando se desean asociar con instancias en el Launch Configuration.

El límite este tipo de configuraciones es de 100 por región. Si se excede este valor, la llamada a create-launch-configuration fallará. Se puede ver y actualizar este limite mediante $ aws autoscaling describe-account-limits.

AutoScaling puede propiciar que se alcancen los límites de algunos de los servicios, como el numero máximo de instancias EC2 que se pueden utilizar dentro de una región (20). Cuando sea el caso, es importante tener en cuenta el límite en el uso de los servicios de Amazon.

Es posible incrementar los límites de los servicios dirigiéndose a la Guida de Referencia de Amazon, dentro de AWS Service Limits. Después creando un ticket de soporte en el AWS Support Center solicitando el servicio y el numero limite.

Grupo de Autoescalamiento (AutoScaling Group)

Es una colección de instancias manejadas por el servicio AutoScaling. Cada grupo contiene opciones de configuración que controlan cuando el AutoScaling debe crear nuevas instancias y terminar las existentes. Un grupo de autoescalamiento debe contener un nombre, así como un numero mínimo y máximo de instancias que pueden existir en el grupo. De manera opcional la capacidad deseada,que es el numero de instancias que el grupo debe tener a todas horas. Si no se específica una capacidad deseada, la capacidad por default es el mínimo numero de instancias que usted especifique.

Ejemplo:

  • nombre: miASG
  • launch configuration: miLC
  • availability zones: us-east-1a y us-east-1c
  • tamaño mínimo: 1
  • capacidad deseada: 3
  • capacidad máxima: 10
  • load balancers: miELB
$ aws autoscaling create-auto-scaling-group --auto-scaling-group-name miASG --launch-configuration-name miLC --availability-zones us-east-1a, us-east-1c --min-size 1 --max-size 10 --desired-capacity 3 --load-balancer-names miELB

Un autoscaling group puede utilizar instancias en demanda o spot instances. Para poder utilizar spot instances hay que definir un precio ofertado en la configuración de despliegue (-spot-price "0.15") asociada con un Auto Scaling Group. Las Spot Instances como se menciono requieren que los procesos ejecutados sean tolerantes a los fallos por si estas son terminadas. Pueden ser definidas Spot Instances u On-Demand Instances pero no ambas.

Las Spot Instances pueden realizar un equilibro de precio en los grupos de Auto Scaling, especialmente cuando se utilizan para servicios premium ofrecidos a los usuarios, en los cuales pagan una suscripción para agregar funcionalidad adicional.

Política de Escalamiento (Scaling Policy)

Usted puede asociar las alarmas CloudWatch y las scaling policies con un AutoScaling Group para ajustar Auto Scaling dinámicamente. Cuando un umbral es cruzado, CloudWatch enviará una alarma para modificar el numero de instancias recibiendo tráfico mediante un load balancer. Después de que la alarma es enviada, Auto Scaling ejecutar la policy asociada para escalar el grupo. La política es una serie de instrucciones que le indica a AutoScaling si escalar hacia arriba o hacia abajo el numero de instancias.

Hay varias formas de configurar una scaling policy:

  • Se puede incrementar o decrementar el numero de instancias (de 2 en 2 por ejemplo).
  • Ajustarlas basadas en un porcentaje.
  • Escalar por pasos incrementando o decrementando la capacidad del grupo en basado en el tamaño del disparador de una alarma.

Se puede asociar mas de una política a un AutoScaling Group. Por ejemplo, se puede crear una política que mantenga en un nivel el uso del CPU llamada CPULoad y otra que mida la utilización del CPU llamada CPUUtilization.

Una practica recomendada es escalar hacia arriba rápidamente y escalar hacia abajo lentamente, de manera que se puede responder a los picos pero no terminar de manera inadvertida instancias muy rápidamente. Auto Scaling también soporta cooldown period, que es una característica configurable que determina cuando suspender actividades de scaling por un corto tiempo para un AutoScaling group.

Si inicia instancias de EC2, un cargo se realizará por una hora completa de ejecución. La ejecución parcial de instancias equivale al uso completo de una hora. Esto significa que si existe una policy permisiva que dispare, termine y reinicie muchas instancias dentro de una hora, un cobro por la hora completa de cada instancia incluso si se terminaron algunas de ellas en menos de una hora.

Es importante considerar que el bootstraping toma algo de tiempo para disparar las nuevas instancias. Las instancias que se inician y están disponibles para despliegue mas rápido pueden aumentar la capacidad mas rápidamente. Por otra parte, las instancias mas stateless que stateful entran y salen de forma mas sencilla del AutoScaling Group.

La configuración del AutoScaling Group puede ser modificada para referenciar una nueva AMI, e incluso una nueva instancia si es necesario. Después cuando se desregistren o terminen las otras instancias, la nueva instancia sera la referencia (esta puede incluir por ejemplo parches de seguridad y actualizaciones del software).