Blog de Amazon Web Services (AWS)

Cómo configurar Amazon EC2 Auto Scaling basado en la utilización de la memoria mediante CloudWatch Agent

Con Amazon EC2 Auto Scaling puede ajustar dinámicamente el número de instancias de Amazon EC2, permitiendo que una aplicación tenga el menor coste posible, pero manteniendo un rendimiento adecuado.

De forma nativa, Auto Scaling se puede configurar en función de las métricas de CPU, las métricas de red y el número de solicitudes de un Application Load Balancer. Sin embargo, para configurarlo utilizando el porcentaje de consumo de memoria, se requiere una métrica personalizada de Amazon CloudWatch.

Descripción general de la solución

Para configurar este tutorial, necesita tener una VPC con al menos una Subred con acceso a Internet en su entorno.
Requisitos previos
En Auto Scaling Group crearemos dos Políticas usando la métrica personalizada. En la primera, se agrega una nueva instancia cuando el valor de esta métrica es mayor que 80%; y la segunda instancia, que elimina una instancia si el valor es menor que 30%.Para recopilar y enviar el consumo de memoria a una métrica personalizada de CloudWatch, utilizaremos CloudWatch Agent. Se instalará durante el inicio de la instancia a través de EC2 UserData. La configuración estará disponible de forma centralizada a través de un parámetro AWS Systems Manager.

Crear un parámetro en el almacén de parámetros

  1. Vaya a la consola de AWS Systems Manager
  2. En el panel de navegación, seleccione Almacén de parámetros y haga clic en el botón Crear parámetro
  3. Introduzca el valor /asg-mem-ec2/config en el campo Nombre
  4. Seleccionar tipo como formato String
  5. Introduzca el contenido a continuación en el campo Valor y haga clic en el botón Crear parámetro
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "metrics": {
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {  
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 10
                        }
                },
                "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"],[]]
        }
}

Crear rol en IAM

1. Vaya a la consola de AWS IAM

2. En el panel de navegación, seleccione Roles y haga clic en el botón Crear rollo

3. Seleccione EC2 como el servicio que utilizará el desplazamiento y haga clic en Siguiente: Permisos

4. Seleccione las siguientes directivas:

  • CloudWatchAgentServerPolicy
  • AmazonssmManagedInstanceCore

5. Vaya a la sección Revisar e introduzca el valor ROLE-MEM-ASG en el campo Nombre del rol y haga clic en Crear rol

Crear configuración de lanzamiento en Amazon EC2

1. Vaya a la consola de Amazon EC2

2. En el panel de navegación, seleccione Iniciar configuraciones, y haga clic en el botón Crear configuración de inicio

3. En Elegir AMI seleccione la imagen más reciente de Amazon Linux

4. En Elegir tipo de instancia mantenga la configuración predeterminada

5. En Crear configuración de inicio

a. Introduzca el valor LC-MEM-ASG en el campo Nombre

b. En el rol de IAM seleccione el rol ROLE-MEM-ASG

c. Expanda la sección Detalles avanzados y rellene los datos de usuario con el siguiente contenido

#! /bin/bash
cd /tmp
wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
sudo rpm -U. /amazon-cloudwatch-agent.rpm
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm: /asg-mem-ec2/config -s

6. En Configurar grupo de seguridad seleccione el grupo de seguridad de su elección

7. Vaya a la pestaña Revisar, compruebe los datos y haga clic en Crear configuración de inicio

8. En Elegir un par de claves existente seleccione Continuar sin un par de claves, confirme la casilla de verificación a continuación y haga clic en Crear configuración de inicio

Crear grupo de Auto Scaling en Amazon EC2

1. Vaya a la consola de Amazon EC2

2. En el panel de navegación, seleccione Grupos de Auto Scaling, y haga clic en el botón Crear grupos de Auto Scaling

3. Seleccione Launch Configuration LC-MEM-ASG creado en la sección anterior y haga clic en Next Step

4. En Crear grupo de Auto Scaling

a. Introduzca el valor ASG-MEM-ASG en el campo Nombre de Grupo

b. En Tamaño de grupo mantenga el valor 1

c. En Red y subred seleccione la VPC y las subredes de su elección

5. En Configurar directivas de escalado

a. Seleccione Usar políticas de escala para ajustar la capacidad de este grupo

b. En Escala entre introduzca los valores 1 y 2

c. En Tamaño de grupo de escala haga clic en el vínculo Escalar el grupo Auto Scaling usando políticas de escala escalada o simple

d. En Aumentar tamaño de grupo

i. Introduzca el valor AddInstance en el campo Nombre

ii. Haga clic en el vínculo Crear una directiva de escala simple

iii. Introduzca en Tomar la acción o los valores Añadir 1 unidades de capacidad

e.      En Disminuir el tamaño del grupo

i. Introduzca el valor RemoveInstance en el campo Nombre

ii. Haga clic en el vínculo Crear una directiva de escala simple

iii. Introduzca en Tomar la acción los valores Eliminar 1 unidades de capacidad

6. En Configurar etiquetas

a. Introduzca el valor Nombre en Clave

b. Introduzca el valor INSTANCE-MEM-ASG en Valor

c. Mantener seleccionadas las nuevas instancias de etiqueta  

Crear alarma de alta memoria en CloudWatch

Nota: Después de completar el paso anterior, la métrica que creó puede tardar unos 5 minutos en aparecer en CloudWatch

1. Vaya a la consola de Amazon CloudWatch

2. En el panel de navegación, seleccione Alarmas, y haga clic en el botón Crear alarma

3. Haga clic en Seleccionar métrica

a. En Espacios de nombres personalizados haga clic en CWAgent

b. En Métricas haga clic en AutoScalingGroup

c. Seleccione Grupo de Auto Scaling ASG-MEM-ASG

d. Finalice haciendo clic en el botón Seleccionar métrica

4. En el período de cambio de métrica a 1 minuto

5. En Definir la condición de alarma seleccione Mayor

6. En Condiciones escriba en el entonces… el valor  80 y, a continuación, haga clic en Siguiente

7. En Notificaciones haz clic en el botón Eliminar

8. En la acción Auto Scaling

a. Haga clic en Agregar acción de escalado automático

b. En Seleccionar un grupo seleccione Auto Scaling Group ASG-MEM-ASG

c. En Tomar la siguiente acción… seleccione  AddInstance

d. Haga clic en Siguiente

9. Introduzca el valor HighMemoryAlarm-MEM-ASG en Nombre de alarma

10. Compruebe los datos y haga clic en el botón Crear alarma

Crear alarma de baja memoria en CloudWatch

1. Vaya a la consola de Amazon CloudWatch

2. En el panel de navegación, seleccione Alarmas, y haga clic en el botón Crear alarma

3. Haga clic en Seleccionar métrica

a. En Espacios de nombres personalizados haga clic en CWAgent

b. En Métricas haga clic en AutoScalingGroup

c. Seleccione Grupo de Auto Scaling ASG-MEM-ASG

d. Finalice haciendo clic en el botón Seleccionar métrica

4. En el período de cambio de métrica a 1 minuto

5. En Establecer la condición de alarma, seleccione Inferior

6. En Condiciones escriba en el entonces… el valor 30 y, a continuación, haga clic en Siguiente

7. En Notificaciones haz clic en el botón Eliminar

8. En la acción Auto Scaling

a. Haga clic en Agregar acción de escalado automático

b. En Seleccionar un grupo seleccione Auto Scaling Group ASG-MEM-ASG

c. En Tomar la siguiente acción… seleccione  RemoveInstance

d. Haga clic en Siguiente

9. Introduzca el valor LowMemoryAlarm-MEM-ASG en Nombre de alarma

10. Compruebe los datos y haga clic en el botón Crear alarma

Prueba de Auto Scaling

1. Vaya a la consola de AWS Systems Manager

2. En el panel de navegación, seleccione Administrador de sesiones, y haga clic en el botón Iniciar sesión

3. Seleccione la instancia INSTANCE-MEM-ASG y haga clic en Iniciar sesión

4. En la sesión de terminal abierta, ejecute los siguientes comandos

sudo amazon-linux-extras install epel -y
sudo yum install stress -y
estrés -m 3 —vm-keep -t 600

Comprobación de los resultados

1. Vaya a la consola de Amazon CloudWatch

2. En el panel de navegación, seleccione Métricas

3. En la pestaña Todas las métricas

a. Haga clic en el CWAgent de espacios de nombres personalizados

b. En Métricas haga clic en AutoScalingGroup

c. Active la casilla de verificación Auto Scaling Group ASG-MEM-ASG

4. En la pestaña Métricas gráficas cambie el valor Periodo de 5 Minutos a 1 minuto

5. Después de 15 minutos debe ver un gráfico con las siguientes características:

En la primera sección del gráfico, vemos el consumo total de memoria de la constante Auto Scaling Group alrededor del 10%, incluso cuando se ejecuta el comando de esfuerzo causando un pico que se estabiliza cerca del 90%.

Esto hace que la alarma HighMemoryAlarm-MEM-ASG agregue una nueva instancia en el grupo Auto Scaling y el valor del gráfico se estabiliza alrededor del 50%, como se ve en la segunda sección.

En la tercera y última sección del gráfico vemos dos caídas, la primera causada cuando el comando de tensión se termina después de 10 minutos de ejecución, y la segunda mediante la eliminación de una de las instancias del Grupo Auto Scaling a través del LowMemoryAlarm-Mem-ASG alarma.

Además, puede realizar un seguimiento del historial de acciones del grupo de Auto Scaling haciendo clic en la pestaña Historial de actividades, como se muestra en la siguiente imagen.

 

Conclusión

En esta entrada de blog, describimos las instrucciones detalladas para configurar Amazon EC2 Auto Scaling para admitir aplicaciones que dependen principalmente del uso de memoria. Para recopilar la métrica aplicada en la configuración, utilizamos CloudWatch Agent.

Para obtener más información sobre otras métricas recopiladas por el agente de CloudWatch, visite Métricas recopiladas por el agente de CloudWatch.

Nota: Para evitar cargos futuros, recuerde eliminar todos los recursos creados.

 


 

Thiago Pádua

AWS Solutions Architect, trabaja con el desarrollo y la asistencia de socios del sector público. Anteriormente trabajó en el desarrollo de software e integración de sistemas, principalmente en la industria de las telecomunicaciones. Tiene un interés especial en la arquitectura de microservicios, sin servidor y contenedores.

 

 

Si tiene dudas, comuníquese con nuestro equipo a través del chat en línea.