Quiero configurar el escalamiento automático de servicios de Amazon Elastic Container Service (Amazon ECS) en AWS Fargate.
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Cuando una alarma de Amazon CloudWatch inicia el escalamiento automático, Application Auto Scaling utiliza tu política de escalamiento para determinar el nuevo recuento deseado. A continuación, Application Auto Scaling inicia la llamada a la API UpdateService a Amazon ECS con el nuevo valor del parámetro desiredCount. El programador de servicio de Amazon ECS inicia o cierra las tareas para cumplir con el nuevo recuento deseado. La actividad de escalamiento permanece en estado InProgress hasta que el recuento deseado y en curso coincidan.
Puedes usar la consola de Amazon ECS o la AWS CLI para configurar el escalamiento automático de Amazon ECS en Fargate. El usuario de AWS Identity and Access Management (IAM) que configura los ajustes del escalamiento automático de servicios debe tener permisos para los servicios que admiten el escalamiento dinámico. Para obtener más información, consulta Permisos de IAM necesarios para el escalamiento automático del servicio Amazon ECS.
Uso de la consola de Amazon ECS
Sigue estos pasos:
- Abre la consola de Amazon ECS.
- Elige Escalamiento automático del servicio y, a continuación, selecciona la opción Usar el escalamiento automático del servicio.
- Introduce los siguientes valores para el escalamiento automático del servicio:
En Número mínimo de tareas, introduce el número más bajo de tareas.
En Número máximo de tareas, introduce el número máximo de tareas.
Nota: El recuento deseado no está por debajo del número mínimo ni por encima del máximo.
- Crea una política de escalamiento de seguimiento de objetivos o una política de escalamiento por pasos para agregarla a Amazon ECS.
Uso de la AWS CLI
Ejecuta el siguiente comando register-scalable-target para registrar Fargate como un objetivo escalable con Application Auto Scaling:
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--min-capacity 1 --max-capacity 10 --region REGION
Nota: Sustituye CLUSTER_NAME por el nombre del clúster, SERVICE_NAME por el nombre del servicio y REGION por la región de AWS.
A continuación, ejecuta put-scaling-policy para crear la política de escalamiento de seguimiento de objetivos o la política de escalamiento por pasos para Fargate como objetivo escalable. En el comando, incluye el archivo JSON que has creado.
Ejemplo de comando para la política de escalamiento del seguimiento de objetivos:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--policy-name Test-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{ "TargetValue": 75.0, "PredefinedMetricSpecification": {"PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60,"ScaleInCooldown": 60}'
Nota: Sustituye CLUSTER_NAME por el clúster, SERVICE_NAME por el servicio y REGION por tu región. Application Auto Scaling crea alarmas de CloudWatch para escalarlas en función de tus valores objetivo.
Ejemplo de comando para la política de escalamiento por pasos:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--policy-name Test-Step-scaling-policy-ScaleOut --policy-type StepScaling \
--step-scaling-policy-configuration '{"AdjustmentType": "ExactCapacity","StepAdjustments": [ { "MetricIntervalLowerBound": 20, "ScalingAdjustment": 10}, { "MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 20,"ScalingAdjustment": 5}],"Cooldown": 60, "MetricAggregationType": "Average"}'
Nota: Sustituye CLUSTER_NAME por el clúster, SERVICE_NAME por el servicio y REGION por tu región.
Si has creado una política de escalamiento por pasos, ejecuta el siguiente comando put-metric-alarm para agregar tu política de escalamiento a una alarma de CloudWatch. A continuación, repite el paso anterior para crear una segunda política de escalamiento por pasos y una alarma de CloudWatch para la actividad de escalamiento:
aws cloudwatch put-metric-alarm \
--alarm-name Test-ScaleOut --metric-name MemoryUtilization \
--namespace AWS/ECS \
--statistic Average --period 60 --threshold 60 \
--comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --datapoints-to-alarm 1 \
--dimensions Name=ClusterName,Value=CLUSTER_NAME Name=ServiceName,Value=SERVICE_NAME --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"
Nota: Sustituye CLUSTER_NAME por el clúster, SERVICE_NAME por el servicio y REGION por tu región.
Application Auto Scaling bloquea todas las actividades de desescalamiento horizontal durante las actividades de escalamiento horizontal hasta que se complete el escalamiento horizontal. Si no cumples con el recuento que has configurado, Amazon ECS agota el tiempo de espera de la actividad de escalamiento horizontal de InProgress. Los motivos por los que se agota el tiempo de espera incluyen problemas con la imagen o la red. Si las métricas de CloudWatch se desescalan horizontalmente durante el periodo de recuperación del escalamiento horizontal y la actividad de escalamiento horizontal finaliza, Application Auto Scaling ejecuta la actividad de desescalamiento horizontal.
Información relacionada
Solución de problemas de escalamiento automático del servicio en Amazon ECS
Escalamiento automático del servicio Amazon ECS
DescribeScalingActivities
application-autoscaling