Configuración del escalado basada en Amazon SQS
El siguiente procedimiento describe la forma de configurar el escalado automático basado en Amazon SQS. Aprenderá a crear una métrica personalizada de CloudWatch, además de configurar una política de seguimiento de objetivos mediante la AWS CLI y a probar la configuración.
Antes de comenzar, asegúrese de que ha instalado y configurado la AWS CLI. Además, debe tener una cola de Amazon SQS que pueda usar. En las siguientes tareas se presupone que ya tiene una cola (estándar o FIFO), un grupo de escalado automático e instancias EC2 ejecutándose en la aplicación que utiliza la cola.
Para obtener más información sobre Amazon SQS, consulte la Guía del desarrollador de Amazon Simple Queue Service.
Tareas
Paso 1: Crear una métrica personalizada de CloudWatch
Una métrica personalizada se define mediante un nombre de métrica y un espacio de nombres de su elección. Los espacios de nombres para métricas personalizadas no pueden comenzar por AWS/. Para obtener más información sobre la publicación de métricas personalizadas, consulte el tema Publicación de métricas personalizadas en la Guía del usuario de Amazon CloudWatch.
Siga este procedimiento para crear la métrica personalizada leyendo primero la información de su cuenta de AWS. A continuación, calcule las tareas pendientes para cada métrica de instancia, tal como se recomienda en una sección anterior. Por último, publique este número en CloudWatch con un nivel de detalle de 1 minuto. Siempre que sea posible, le recomendamos que cuando realizado el escalado basado en métricas, utilice una granularidad de un minuto para garantizar una respuesta más rápida a los cambios en la carga del sistema.
Creación de una métrica personalizada de CloudWatch (AWS CLI)
-
Utilice el comando get-queue-attributes
de SQS para obtener el número de mensajes en espera en la cola ( ApproximateNumberOfMessages).aws sqs get-queue-attributes --queue-urlhttps://sqs.region.amazonaws.com/123456789/MyQueue\ --attribute-names ApproximateNumberOfMessages -
Utilice el comando describe-auto-scaling-groups
para obtener la capacidad de ejecución del grupo, que es el número de instancias que tienen el estado de ciclo de vida InService. Este comando devuelve las instancias de un grupo de escalado automático junto con su estado de ciclo de vida.aws autoscaling describe-auto-scaling-groups --auto-scaling-group-namesmy-asg -
Calcule las tareas pendientes por instancia dividiendo el número aproximado de mensajes disponibles para su recuperación de la cola por la capacidad de puesta en marcha del grupo.
-
Cree un script que se ejecute cada minuto para recuperar el valor del backlog por instancia y publíquelo en una métrica personalizada de CloudWatch. Cuando publica una métrica personalizada, especifica el nombre de la métrica, el espacio de nombres, la unidad, el valor y cero o más dimensiones. Una dimensión consta de un nombre de dimensión y un valor de dimensión.
Para publicar su métrica personalizada, sustituya los valores de los marcadores de posición en
cursivapor el nombre de la métrica que prefiera, el valor de la métrica, un espacio de nombres (siempre que no comience por “AWS”) y las dimensiones (opcional) y, a continuación, ejecute el siguiente comando put-metric-data. aws cloudwatch put-metric-data --metric-nameMyBacklogPerInstance--namespaceMyNamespace\ --unit None --value20--dimensionsMyOptionalMetricDimensionName=MyOptionalMetricDimensionValue
Después de que la aplicación emita la métrica deseada, los datos se envían a CloudWatch. La métrica aparece en la consola de CloudWatch. Puede acceder a ella iniciando sesión en la Consola de administración de AWS y desplazándose a la página de CloudWatch. A continuación, puede ver la métrica desplazándose a la página de métricas o buscándola usando el campo de búsqueda. Para obtener información sobre la visualización de métricas, consulte Visualización de las métricas disponibles en la Guía del usuario de Amazon CloudWatch.
Paso 2: Crear una política de escalado de seguimiento de destino
La métrica que creó ahora se puede añadir a una política de escalado de seguimiento de destino.
Creación de una política de escalado de seguimiento de destino (AWS CLI)
-
Utilice el siguiente comando
catpara almacenar un valor de destino para su política de escalado y una especificación de métricas personalizada en un archivo JASON llamadoconfig.jsonen su directorio principal. Reemplace cadamarcador de posición de entrada del usuariocon información propia. Para elTargetValue, calcule las tareas pendientes aceptables por cada métrica de instancia e introdúzcala aquí. Para calcular este número, decida un valor de latencia normal y divídalo por el tiempo medio que tarda en procesar un mensaje, como se describe en una sección anterior.Si no especificó ninguna dimensión para la métrica que creó en el paso 1, no incluya ninguna dimensión en la especificación métrica personalizada.
$ cat ~/config.json { "TargetValue":100, "CustomizedMetricSpecification":{ "MetricName":"MyBacklogPerInstance", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"None" } } -
Utilice el comando put-scaling-policy
, junto con el archivo config.jsoncreado en el paso anterior, para crear su política de escalado.aws autoscaling put-scaling-policy --policy-namesqs100-target-tracking-scaling-policy\ --auto-scaling-group-namemy-asg--policy-type TargetTrackingScaling \ --target-tracking-configurationfile://~/config.jsonEsto crea dos alarmas: una para el escalado horizontal y otra para la reducción horizontal. También devuelve el Nombre de recurso de Amazon (ARN) de la política registrada en CloudWatch, que CloudWatch utiliza para invocar el escalado siempre que se interrumpe el umbral de la métrica.
Paso 3: Prueba de la política de escalado
Una vez que finalice la configuración, verifique que la política de escalado funcione. Puede probarla aumentando el número de mensajes en la cola de SQS y verificando después que el grupo de escalado automático ha lanzado una instancia EC2 adicional. También puede probarla reduciendo el número de mensajes en la cola de SQS y verificando después que el grupo de escalado automático ha terminado una instancia EC2.
Pruebas de la función de escalado horizontal
-
Siga los pasos de Creación de una cola estándar de Amazon SQS y envío de un mensaje o Creación de una cola FIFO de Amazon SQS y envío de un mensaje para añadir mensajes a la cola. Asegúrese de que ha aumentado el número de mensajes en la cola de forma que las tareas pendientes por cada métrica de instancia supere el valor de destino.
Este proceso puede tardar unos minutos hasta que los cambios invoquen la alarma.
-
Utilice el comando describe-auto-scaling-groups
para verificar que el grupo ha lanzado una instancia. aws autoscaling describe-auto-scaling-groups --auto-scaling-group-namemy-asg
Cómo probar la función de reducción horizontal
-
Siga los pasos de Recibir y eliminar un mensaje (consola) para eliminar los mensajes de la cola. Asegúrese de que ha disminuido el número de mensajes en la cola de forma que las tareas pendientes por cada métrica de instancia esté por debajo del valor de destino.
Este proceso puede tardar unos minutos hasta que los cambios invoquen la alarma.
-
Utilice el comando describe-auto-scaling-groups
para verificar que el grupo ha terminado una instancia. aws autoscaling describe-auto-scaling-groups --auto-scaling-group-namemy-asg