Políticas de escalado de seguimiento de destino para Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling

Políticas de escalado de seguimiento de destino para Amazon EC2 Auto Scaling

Para crear una política de escalado de seguimiento de objetivos, debe especificar una métrica de Amazon CloudWatch y un valor objetivo que represente el nivel de uso o rendimiento promedio ideal para su aplicación. Amazon EC2 Auto Scaling puede escalar horizontalmente el grupo (agregar más instancias) para hacer frente a la alta demanda en las horas punta, y reducir horizontalmente el grupo (poner en marcha menos instancias) para reducir los costos durante los periodos de baja utilización o rendimiento.

Por ejemplo, supongamos que tiene una aplicación web que actualmente se pone en marcha en dos instancias y desea que la utilización de CPU del grupo de escalado automático permanezca en torno al 50 % cuando cambie la carga en la aplicación. De este modo dispone de capacidad adicional para gestionar picos de tráfico sin mantener una cantidad excesiva de recursos inactivos.

Puede satisfacer esta necesidad mediante la creación de una política de escalado de seguimiento de destino que tenga como destino una utilización media de CPU del 50 por ciento. A continuación, el grupo de escalado automático escala el número de instancias para mantener el valor real de la métrica en o cerca del 50 por ciento.

Políticas de escalado de seguimiento de destino

Puede tener varias políticas de escalado de seguimiento de destino juntas que le ayuden a optimizar su rendimiento, siempre que cada una de ellas use una métrica diferente. Por ejemplo, la utilización y el rendimiento pueden influir mutuamente. Cada vez que una de estas métricas cambia, normalmente implica que otras métricas también se verán afectadas. Por lo tanto, el uso de varias métricas proporciona información adicional sobre la carga a la que se encuentra el grupo de escalado automático y mejora la toma de decisiones a la hora de determinar cuánta capacidad añadir al grupo.

La intención de Amazon EC2 Auto Scaling siempre es dar prioridad a la disponibilidad, por lo que su comportamiento varía en función de si las políticas de seguimiento de destino están listas para el escalado o la reducción horizontales. Escalará horizontalmente el grupo de Auto Scaling si cualquiera de las políticas de seguimiento de destino está lista para el escalado horizontal, pero solo lo reducirá horizontalmente si todas las políticas de seguimiento de destino (que tienen habilitada la parte de reducción horizontal) están listas para la reducción horizontal.

Consideraciones

Las siguientes consideraciones se aplican al trabajar con las políticas de escalado de seguimiento de destino:

  • No modifique ni elimine las alarmas de CloudWatch que están configuradas para las políticas de escalado de seguimiento de destino. Amazon EC2 Auto Scaling crea y administra las alarmas de CloudWatch asociadas a las políticas de escalado de seguimiento de destino y se eliminan automáticamente cuando ya no se necesitan.

  • Una política de escalado de seguimiento de objetivos prioriza la disponibilidad durante los períodos de niveles de tráfico fluctuantes al reducir horizontalmente de forma más gradual cuando el tráfico disminuye. Si desea que su grupo de escalado automático se reduzca horizontalmente inmediatamente cuando finalice una carga de trabajo, puede desactivar la parte de reducir horizontalmente de la política. Esto le proporciona la flexibilidad para usar el método de reducción horizontal que mejor satisfagan sus necesidades cuando la utilización sea baja. Para garantizar que la reducción horizontal se realice lo más rápido posible, recomendamos no utilizar una política de escalado simple para evitar que se agregue un periodo de recuperación.

  • Si faltan puntos de datos en la métrica, el estado de alarma de CloudWatch cambia a INSUFFICIENT_DATA. Cuando esto ocurre, Amazon EC2 Auto Scaling no puede escalar su grupo hasta que se encuentren nuevos puntos de datos.

  • Es posible que haya diferencias entre el valor objetivo y los puntos de datos de la métrica real. Esto se debe a que actuamos de forma conservadora redondeando hacia arriba o hacia abajo a la hora de determinar el número de instancias que se deben agregar o quitar. Esto impide que agreguemos un número insuficiente de instancias o eliminemos demasiadas. Sin embargo, en el caso de los grupos de Auto Scaling que son más pequeños y tienen menos instancias, la utilización del grupo puede parecer que está muy lejos del valor de destino. Por ejemplo, supongamos se establece un valor de destino del 50 por ciento de utilización de la CPU y el grupo de Auto Scaling lo supera. Es posible determinar que la adición de 1,5 instancias disminuirá la utilización de la CPU hasta aproximadamente el 50 por ciento. Como no es posible agregar 1,5 instancias, redondeamos hacia arriba y añadimos dos instancias. Esto podría reducir la utilización de la CPU a un valor inferior al 50 por ciento, pero garantizaría que la aplicación cuenta con los recursos suficientes. Del mismo modo, si determinamos que, en caso de que se eliminen 1,5 instancias, la utilización de la CPU podría aumentar por encima del 50 por ciento, eliminamos una sola instancia.

  • En el caso de grupos de Auto Scaling más grandes con más instancias, la utilización se distribuye entre un número de instancias mayor, en cuyo caso, si se agregan o quitan instancias, la diferencia entre el valor de destino y los puntos de datos de la métrica real es menor.

  • En las políticas de escalado de seguimiento de destino, se presupone que el grupo de Auto Scaling debe escalarse horizontalmente cuando la métrica especificada está por encima del valor de destino. Las políticas de escalado de seguimiento de destino no pueden utilizarse para escalar horizontalmente el grupo de escalado automático si la métrica está por debajo del valor de destino.

Elección de métricas

En una política de escalado de seguimiento de destino, puede utilizar métricas predefinidas o personalizadas.

Están disponibles las siguientes métricas predefinidas:

  • ASGAverageCPUUtilization: promedio de utilización de la CPU del grupo de Auto Scaling.

  • ASGAverageNetworkIn: número promedio de bytes recibidos en todas las interfaces de red.

  • ASGAverageNetworkOut: número promedio de bytes enviados en todas las interfaces de red.

  • ALBRequestCountPerTarget: recuento de solicitudes del equilibrador de carga de aplicación por destino.

importante

Puede encontrar información valiosa sobre las métricas de utilización de CPU, E/S de red y recuento de solicitudes del equilibrador de carga de aplicación por destino en el tema List the available CloudWatch metrics for your instances (Mostrar las métricas de CloudWatch disponibles para las instancias) en Amazon EC2 User Guide for Linux Instances (Guía del usuario de Amazon EC2 para instancias de Linux) y en el tema CloudWatch metrics for your Application Load Balancer (Métricas de CloudWatch para el equilibrador de carga de aplicación) en User Guide for Application Load Balancers (Guía del usuario para equilibrador de carga de aplicación) respectivamente.

Puede elegir otras métricas de CloudWatch disponibles o sus propias métricas en CloudWatch al especificar una métrica personalizada. Debe utilizar la AWS CLI o un SDK para crear una política de seguimiento de destino con una métrica personalizada.

Tenga en cuenta las siguientes consideraciones al elegir una métrica:

  • No todas las métricas de funcionan para el seguimiento de destino. Esto puede ser importante cuando se especifica una métrica personalizada. La métrica debe ser una métrica de utilización válida y describir el nivel de actividad de una instancia. El valor de la métrica debe aumentar o disminuir proporcionalmente al número de instancias del grupo de Auto Scaling. De esta forma, los datos de las métricas se pueden utilizar para ampliar o reducir proporcionalmente el número de instancias. Por ejemplo, la utilización de la CPU de un grupo de Auto Scaling (es decir, la métrica CPUUtilization de Amazon EC2 con la dimensión de métrica AutoScalingGroupName) funciona si la carga del grupo de Auto Scaling se distribuye entre las instancias.

  • Las siguientes métricas no sirven para hacer un seguimiento de destino:

    • El número de solicitudes recibidas por el balanceador de carga frente al grupo de Auto Scaling (es decir, la métrica Elastic Load Balancing de RequestCount). El número de solicitudes recibidas por el balanceador de carga no cambia en función de la utilización del grupo de Auto Scaling.

    • La latencia de las solicitudes del balanceador de carga (es decir, la métrica Latency de Elastic Load Balancing). La latencia de las solicitudes puede aumentar si lo hace la utilización, pero el cambio no tiene que ser necesariamente proporcional.

    • La métrica ApproximateNumberOfMessagesVisible de la cola de Amazon SQS de CloudWatch. El número de mensajes de una cola no tiene por qué cambiar en proporción al tamaño del grupo de Auto Scaling que procesa los mensajes de la cola. Sin embargo, puede funcionar una métrica personalizada que mida el número de mensajes de la cola por instancia EC2 en el grupo de Auto Scaling. Para obtener más información, consulte Escalado basado en Amazon SQS .

  • Cuando una métrica emite valores 0 reales a CloudWatch (por ejemplo, ALBRequestCountPerTarget), un grupo de escalado automático puede reducir horizontalmente a 0 cuando no haya tráfico a la aplicación. Para que el grupo de escalado automático se reduzca horizontalmente a 0 cuando no se envíen solicitudes, la capacidad mínima del grupo debe ser de 0.

  • Para utilizar la métrica ALBRequestCountPerTarget, debe especificar el parámetro ResourceLabel para identificar el grupo de destino del balanceador de carga asociado a la métrica.

Al usar las métricas de instancias EC2 en su política, recomendamos que las configure con una frecuencia de 1 minuto para garantizar una respuesta más rápida a los cambios en el valor de la métrica. El escalado de métricas de instancias con una frecuencia de 5 minutos puede generar un tiempo de respuesta más lento y hacer que el escalado se realice con datos de métricas que están obsoletos.

Para obtener este nivel de datos para las métricas de Amazon EC2, debe habilitar específicamente el monitoreo detallado. De forma predeterminada, las instancias de Amazon EC2 tienen habilitado monitoreo básico, lo que significa que los datos de las métricas de las instancias están disponibles con una frecuencia de 5 minutos. Para obtener más información, consulte Configuración de la supervisión para instancias de Auto Scaling .

Definición del valor de destino

Al crear una política de escalado de seguimiento de destino, debe especificar un valor de destino. El valor objetivo representa la utilización o el rendimiento promedio ideal para el grupo de escalado automático en su conjunto. Para usar los recursos de manera rentable, establezca el valor objetivo lo más alto posible con un búfer razonable para aumentos inesperados de tráfico. Cuando la aplicación se escala horizontalmente a varias instancias, el valor de la métrica real para un flujo de tráfico normal debe ser igual o justo por debajo del valor objetivo.

Definición del tiempo de preparación de la instancia

importante

Le recomendamos que utilice la opción predeterminada de preparación de la instancia, que unifica toda la configuración de preparación y recuperación para el grupo de escalado automático. Para obtener más información, consulte Opciones de configuración disponibles de preparación y recuperación .

Puede especificar el número de segundos que se tarda en preparar una instancia recién lanzada. Hasta que finaliza el tiempo de preparación especificado, la instancia no se tiene en cuenta para las métricas agregadas del grupo de Auto Scaling.

Mientras las instancias se encuentran en el periodo de preparación, las políticas de escalado solo escalan horizontalmente si el valor de la métrica de las instancias que no están en preparación es mayor que la utilización objetivo de la política.

Si el grupo se vuelve a escalar horizontalmente, las instancias que aún estén en preparación se considerarán parte de la capacidad deseada para la siguiente actividad de escalado horizontal. La intención es realizar continuamente (pero no excesivamente) un escalado ascendente.

Mientras la actividad de escalado horizontal está en curso, todas las actividades de reducción horizontal iniciadas por las políticas de escalado se bloquean hasta que las instancias terminen de prepararse.

Creación de una política de escalado de seguimiento de destino (consola)

Puede elegir configurar una política de escalado de seguimiento de destino en un grupo de Auto Scaling al crearlo o después de crear el grupo de Auto Scaling.

Para crear un grupo de Auto Scaling con una política de escalado de seguimiento de destino

  1. Abra la consola de Amazon EC2 Auto Scaling en https://console.aws.amazon.com/ec2autoscaling/.

  2. Elija Create Auto Scaling group (Crear grupo de Auto Scaling).

  3. En los pasos 1, 2 y 3, elija las opciones que desee y continúe en el Paso 4: Configurar el tamaño del grupo y las políticas de escalado.

  4. En Group size (Tamaño del grupo), especifique el rango entre el que desea escalar actualizando la capacidad mínima y la máxima. Estas dos configuraciones permiten escalar dinámicamente el grupo de Auto Scaling. Amazon EC2 Auto Scaling escala el grupo en el rango de valores especificado por la capacidad mínima y la máxima.

  5. En Scaling policies (Políticas de escalado), elija Target tracking scaling policy (Política de escalado de seguimiento de destino).

  6. Para definir una política, haga lo siguiente:

    1. Especifique un nombre para la política.

    2. En Tipo de métrica, elija una métrica.

      Si eligió Application Load Balancer request count per target (Recuento de solicitudes de Application Load Balancer por destino), elija un grupo de destino en Target group (Grupo de destino).

    3. Especifique un valor de destino para la métrica en Target value.

    4. (Opcional) Especifique un valor de preparación de instancia para Instances need (Instancias necesarias). Esto le permite controlar el tiempo que una instancia recién lanzada tarda en poder contribuir a las métricas de CloudWatch.

    5. (Opcional) Seleccione Disable scale in to create only a scale-out policy (Deshabilitar el escalado descendente para crear solo una política de escalado ascendente). De este modo, si lo desea, puede crear por separado una política de escalado descendente de otro tipo.

  7. Proceda a crear el grupo de Auto Scaling. La política de escalado se creará después de que se haya creado el grupo de Auto Scaling.

Para crear una política de escalado de seguimiento de destino para un grupo de Auto Scaling existente

  1. Abra a consola de Amazon EC2 Auto Scaling en https://console.aws.amazon.com/ec2autoscaling/.

  2. Seleccione la casilla situada junto al grupo de Auto Scaling.

    Se abre un panel dividido en la parte inferior de la página Auto Scaling groups (Grupos de Auto Scaling).

  3. Verifique que las capacidades mínima y máxima estén establecidas correctamente. Por ejemplo, si el grupo ya tiene el tamaño máximo, especifique un nuevo valor máximo de escalado ascendente. Amazon EC2 Auto Scaling no escala el grupo por debajo de la capacidad mínima ni por encima de la capacidad máxima. Para actualizar el grupo, en la pestaña Details (Detalles), cambie la configuración actual para la capacidad mínima y máxima.

  4. En la pestaña Automatic scaling (Escalado automático), en Dynamic scaling policies (Políticas de escalado dinámico), elija Create dynamic scaling policy (Crear política de escalado dinámico).

  5. Para definir una política, haga lo siguiente:

    1. En Policy type (Tipo de política), deje el valor predeterminado de Target tracking scaling (Escalado de seguimiento de destino).

    2. Especifique un nombre para la política.

    3. En Tipo de métrica, elija una métrica. Solo puede elegir un tipo de métrica. Para utilizar más de una métrica, cree varias políticas.

      Si eligió Application Load Balancer request count per target (Recuento de solicitudes de Application Load Balancer por destino), elija un grupo de destino en Target group (Grupo de destino).

    4. Especifique un valor de destino para la métrica en Target value.

    5. (Opcional) Especifique un valor de preparación de instancia para Instances need (Instancias necesarias). Esto le permite controlar el tiempo que una instancia recién lanzada tarda en poder contribuir a las métricas de CloudWatch.

    6. (Opcional) Seleccione Disable scale in to create only a scale-out policy (Deshabilitar el escalado descendente para crear solo una política de escalado ascendente). De este modo, si lo desea, puede crear por separado una política de escalado descendente de otro tipo.

  6. Seleccione Create (Crear OpsItem).

Creación de una política de escalado de seguimiento de destino (AWS CLI)

Utilice la AWS CLI tal y como se indica a continuación para configurar políticas de escalado de seguimiento de destino para el grupo de Auto Scaling.

Paso 1: Crear un grupo de Auto Scaling

Utilice el comando create-auto-scaling-group para crear un grupo de Auto Scaling denominado my-asg con la configuración de lanzamiento my-launch-config. Si no dispone de una configuración de lanzamiento que desee utilizar, puede crear una llamando a create-launch-configuration.

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \ --launch-configuration-name my-launch-config \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" \ --max-size 5 --min-size 1

Paso 2: Crear una política de escalado de seguimiento de destino

Tras haber creado el grupo de Auto Scaling, puede crear una política de escalado de seguimiento de destino que indique a Amazon EC2 Auto Scaling que aumente y reduzca el número de instancias EC2 en ejecución en el grupo de manera dinámica cuando cambie la carga de la aplicación.

Ejemplo: archivo de configuración de seguimiento de destino

A continuación, se incluye un ejemplo de configuración de seguimiento de destino que mantiene la utilización media de la CPU en un 40 por ciento. Guarde esta configuración en un archivo llamado config.json.

{ "TargetValue": 40.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }

Para obtener más información, consulte PredefinedMetricSpecification en la Referencia de la API de Amazon EC2 Auto Scaling.

También puede personalizar la métrica utilizada para el escalado mediante la creación de una especificación de métrica personalizada y la adición de valores para cada parámetro desde CloudWatch. ​A continuación, se muestra un ejemplo de configuración de seguimiento de destino que mantiene la utilización media de la métrica especificada en un 40 por ciento.

{ "TargetValue":40.0, "CustomizedMetricSpecification":{ "MetricName":"MyUtilizationMetric", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"Percent" } }

Para obtener más información, consulte CustomizedMetricSpecification en la Referencia de la API de Amazon EC2 Auto Scaling.

Ejemplo: cpu40-target-tracking-scaling-policy

Utilice el comando put-scaling-policy junto con el archivo config.json que creó anteriormente para crear una política de escalado llamada cpu40-target-tracking-scaling-policy que mantenga la utilización media de la CPU del grupo de Auto Scaling en el 40 por ciento.

aws autoscaling put-scaling-policy --policy-name cpu40-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://config.json

Si tiene éxito, este comando devuelve los ARN y los nombres de las dos alarmas de CloudWatch creadas en su nombre.

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/cpu40-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }