Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
importante
La información y los pasos siguientes le muestran cómo calcular la acumulación de colas de Amazon SQS por instancia utilizando el atributo ApproximateNumberOfMessages
queue antes de publicarlo como una métrica personalizada en. CloudWatch Sin embargo, ahora puede ahorrar el costo y el esfuerzo dedicados a publicar su propia métrica mediante la calculadora de métricas. Para obtener más información, consulte Creación de una política de escalado de seguimiento de destino con cálculos métricos.
En esta sección se muestra cómo escalar el grupo de escalado automático en respuesta a los cambios en la carga del sistema en una cola de Amazon Simple Queue Service (Amazon SQS). Para obtener más información acerca del uso de Amazon SQS, consulte la Guía del desarrollador de Amazon Simple Queue Service.
Hay algunas situaciones en las que es posible que tenga que pensar en la reducción horizontal en respuesta a la actividad en una cola de Amazon SQS. Por ejemplo, supongamos que tiene una aplicación web que permite a los usuarios cargar imágenes y utilizarlas en línea. En este escenario, cada imagen requiere cambiar el tamaño y la codificación antes de poder publicarla. La aplicación se ejecuta en EC2 instancias de un grupo de Auto Scaling y está configurada para gestionar las tasas de carga habituales. Las instancias con error se terminan y se sustituyen para mantener los niveles de instancia actuales en todo momento. La aplicación coloca los datos de mapa de bits sin procesar de las imágenes en una cola de SQS para su procesamiento. Procesa las imágenes y, a continuación, publica las imágenes procesadas donde puedan verlas los usuarios. La arquitectura de este escenario funciona bien si el número de operaciones de carga de imágenes no varía con el tiempo. Sin embargo, si el número de operaciones de carga cambia con el tiempo, podría considerar la posibilidad de utilizar el escalado dinámico para escalar la capacidad del grupo de escalado automático.
Contenido
Uso del seguimiento de destino con la métrica correcta
Si utiliza una política de escalado de seguimiento de destino basada en una métrica de cola de Amazon SQS personalizada, el escalado dinámico puede ajustarse a la curva de demanda de la aplicación de forma más eficaz. Para obtener más información sobre cómo elegir métricas para el seguimiento de destino, consulte Elección de métricas.
El problema de usar una métrica de CloudWatch Amazon SQS, como ApproximateNumberOfMessagesVisible
para el seguimiento de destinos, es que es posible que el número de mensajes de la cola no cambie proporcionalmente al tamaño del grupo de Auto Scaling que procesa los mensajes de la cola. Eso se debe a que el número de mensajes de su cola de SQS no es el único factor que define el número de instancias necesarias. El número de instancias del grupo de escalado automático puede depender de varios factores, como el tiempo que se tarda en procesar un mensaje y la cantidad de latencia (retraso de la cola) aceptable.
La solución es utilizar una métrica de tareas pendientes por instancia con el valor de destino igual a las tareas pendientes aceptables por instancia que desea mantener. Puede calcular estos números como se indica a continuación:
-
Lista de tareas pendientes por instancia: para determinar su lista de tareas pendientes por instancia, comience con el atributo de cola
ApproximateNumberOfMessages
para determinar la longitud de la cola de SQS (número de mensajes disponibles para recuperación de la cola). Divida ese número por la capacidad de ejecución de la flota, que para un grupo de escalado automático es el número de instancias con el estadoInService
, para obtener las tareas pendientes por instancia. -
Lista de tareas pendientes aceptables por instancia: para calcular su valor de destino, determine en primer lugar lo que la aplicación puede aceptar en términos de latencia. A continuación, toma el valor de latencia aceptable y divídelo entre el tiempo medio que tarda una EC2 instancia en procesar un mensaje.
Por ejemplo, supongamos que actualmente tiene un grupo de escalado automático con 10 instancias y el número de mensajes visibles en la cola (ApproximateNumberOfMessages
) es 1500. Si el tiempo de procesamiento medio es de 0,1 segundos para cada mensaje y la mayor latencia aceptable es de 10 segundos, el número de tareas pendientes aceptables por instancia es de 10/0,1, que equivale a 100 mensajes. Esto significa que 100 es el valor de destino para su política de seguimiento de destino. Cuando la lista de tareas pendientes por instancia alcance el valor objetivo, se producirá un evento de escalado horizontal. Si la lista de tareas pendientes por instancia se encuentra actualmente en 150 (1500/10 instancias), su grupo se escala horizontalmente en 5 instancias para mantener la proporción con el valor de destino.
En los procedimientos siguientes se muestra cómo publicar la métrica personalizada y crear la política de escalado de seguimiento de destino que configura el grupo de escalado automático para que el escalado se realice en función de estos cálculos.
importante
Recuerde que, para reducir los costos, puede utilizar la calculadora de métricas. Para obtener más información, consulte Creación de una política de escalado de seguimiento de destino con cálculos métricos.
Existen tres puntos principales para esta configuración:
-
Un grupo de Auto Scaling para administrar EC2 las instancias con el fin de procesar los mensajes de una cola de SQS.
-
Una métrica personalizada para enviar a Amazon CloudWatch que mide la cantidad de mensajes en la cola por EC2 instancia en el grupo Auto Scaling.
-
Una política de seguimiento de objetivos que configura su grupo de Auto Scaling para que escale en función de la métrica personalizada y un valor objetivo establecido. CloudWatch las alarmas invocan la política de escalado.
El siguiente diagrama ilustra la arquitectura de esta configuración.

Limitaciones y requisitos previos
Para utilizar esta configuración, debe tener en cuenta las siguientes limitaciones:
-
Debe usar el SDK AWS CLI o un SDK para publicar su métrica personalizada. CloudWatch A continuación, puede supervisar su métrica con el AWS Management Console.
-
La consola Amazon EC2 Auto Scaling no admite políticas de escalado de seguimiento de objetivos que utilicen métricas personalizadas. Debe usar el AWS CLI o un SDK para especificar una métrica personalizada para su política de escalado.
Las siguientes secciones le indican cómo AWS CLI utilizarla para las tareas que necesita realizar. Por ejemplo, para obtener datos métricos que reflejen el uso actual de la cola, utilice el comando SQS. get-queue-attributes
Antes de comenzar, debe tener una cola de Amazon SQS que pueda usar. En las siguientes secciones se asume que ya tiene una cola (estándar o FIFO), un grupo de Auto Scaling e EC2 instancias que ejecutan la aplicación que usa la cola. Para obtener más información sobre Amazon SQS, consulte la Guía del desarrollador de Amazon Simple Queue Service.
Amazon SQS y protección de la reducción horizontal
Los mensajes que no se procesaron cuando se terminó la instancia se devuelven a la cola de SQS, donde pueden ser procesados por otra instancia que siga ejecutándose. Para las aplicaciones en las que se realizan tareas de ejecución prolongada, puede utilizar opcionalmente la protección frente a la reducción horizontal de instancias para tener el control sobre los procesos de trabajo de la cola que se terminan cuando el grupo de escalado automático se reduce horizontalmente.
En el siguiente pseudocódigo se muestra una forma de proteger los procesos de trabajo controlados por cola de larga ejecución frente a la terminación por reducción horizontal.
while (true)
{
SetInstanceProtection(False);
Work = GetNextWorkUnit();
SetInstanceProtection(True);
ProcessWorkUnit(Work);
SetInstanceProtection(False);
}
Para obtener más información, consulte Diseño de aplicaciones para gestionar sin problemas la terminación de instancias.