Comment puis-je configurer Amazon ECS Service Auto Scaling sur Fargate ?

Dernière mise à jour : 06/04/2021

Je souhaite configurer Amazon Elastic Container Service (Amazon ECS) Service Auto Scaling sur AWS Fargate.

Brève description

Vous pouvez augmenter ou diminuer le nombre de tâches souhaité en intégrant Amazon ECS sur Fargate aux alarmes Amazon CloudWatch et à Application Auto Scaling. Vous pouvez ensuite utiliser les métriques CloudWatch pour configurer vos alarmes CloudWatch.

Lorsque vos alarmes CloudWatch déclenchent une stratégie Auto Scaling, Application Auto Scaling détermine le nouveau nombre souhaité en fonction de la stratégie de mise à l'échelle configurée. Application Auto Scaling passe ensuite l'appel d'API UpdateService à Amazon ECS avec le nouveau nombre souhaité. Le planificateur de service Amazon ECS lance ou arrête les tâches pour répondre au nouveau nombre souhaité. Votre activité de mise à l'échelle reste dans l'état InProgress jusqu'à ce que le nombre souhaité et le nombre en cours soient identiques.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Résolution

Configuration de Service Auto Scaling pour votre service Fargate

Lorsque vous créez ou mettez à jour un service dans la console Amazon ECS, choisissez ce qui suit sur la page Auto Scaling :

1.    Choisissez Configurer la fonctionnalité Service Auto Scaling pour ajuster le nombre souhaité de votre service.

2.    Dans le champ Nombre minimum de tâches, entrez le plus petit nombre de tâches que Service Auto Scaling doit utiliser.

3.    Dans le champ Nombre de tâches souhaité, entrez le nombre de tâches que Service Auto Scaling doit utiliser.

Remarque : le nombre de tâches souhaité doit être compris entre le nombre de tâches minimum et maximum.

4.    Dans le champ Nombre maximal de tâches, entrez le plus grand nombre de tâches que Service Auto Scaling doit utiliser.

Remarque : les nombres minimum et maximum de tâches sont des limites strictes pour votre service.

5.    Dans le champ Rôle IAM pour Service Auto Scaling, choisissez ecsAutoscaleRole.

Remarque : si ce rôle n'existe pas, choisissez Créer un nouveau rôle pour que la console crée le rôle pour vous.

6.    Dans le champ Stratégies de mise à l'échelle automatique des tâches, choisissez Stratégie Auto Scaling.

7.    Suivez les étapes restantes de l'assistant de configuration pour créer ou mettre à jour votre service.

Choix d'une stratégie de mise à l'échelle

Choisissez une stratégie avec suivi de la cible ou une stratégie de mise à l'échelle par étapes en fonction de vos besoins et des considérations suivantes :

Pour les stratégies avec suivi de la cible :

  • Vous devez définir une valeur cible (seuil) pour la métrique spécifiée. Application Auto Scaling crée et gère les alarmes CloudWatch qui déclenchent la stratégie de mise à l'échelle.
  • Vous pouvez utiliser les métriques Amazon ECS Service ECSServiceAverageCPUUtilization, ECSServiceAverageMemoryUtilization et ALBRequestCountPerTarget pour le suivi de la cible.
  • Une stratégie avec suivi de la cible calcule l'ajustement de la mise à l'échelle (c'est-à-dire le nombre de tâches souhaité) en fonction de la métrique et de la valeur cible que vous définissez. Vous n'avez pas besoin de configurer l'opération de mise à l'échelle comme vous le faites avec une stratégie de mise à l'échelle par étapes. Cela s'explique par le fait qu'une stratégie avec suivi de la cible ajoute ou supprime la capacité nécessaire pour maintenir la métrique au niveau, ou proche du niveau, de la valeur cible spécifiée.
  • Vous devez choisir un temps de stabilisation de montée en charge et de diminution en charge.

Pour les stratégies de mise à l'échelle par étapes :

  • Vous pouvez créer ou utiliser des alarmes CloudWatch existantes pour n'importe quelle métrique de la mise à l'échelle par étapes.
  • Vous devez choisir des opérations de mise à l'échelle ou des ajustements d'étape, tels que ScalingAdjustment, MetricIntervalUpperBound et MetricIntervalLowerBound.
  • Vous pouvez spécifier le type d'ajustement de la mise à l'échelle sous forme de pourcentage de la capacité actuelle de votre cible évolutive, ou en utilisant des nombres absolus.
  • Vous pouvez augmenter ou diminuer le nombre de tâches souhaité en créant des stratégies de mise à l'échelle pour gérer les activités de montée et de diminution en charge.

Remarque : pour plus d'informations, consultez Étape 5 : Configuration de votre service pour utiliser Service Auto Scaling.

Configuration de Service Auto Scaling à l'aide d'AWS CLI

1.    Enregistrez votre service Fargate en tant que cible évolutive auprès d'Application Auto Scaling :

aws application-autoscaling register-scalable-target \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name \
--min-capacity 1 --max-capacity 10 --region us-east-1

2.    Créez une stratégie avec suivi de la cible ou une stratégie de mise à l'échelle par étapes pour la cible évolutive (c'est-à-dire votre service Fargate).

Stratégie avec suivi de la cible :

Créez une stratégie avec suivi de la cible :

aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<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}'

Remarque : lorsque vous créez une stratégie avec suivi de la cible, Application Auto Scaling crée des alarmes CloudWatch pour la montée et la diminution en charge en fonction de la valeur cible (seuil) que vous choisissez.

Stratégie de mise à l'échelle par étapes :

1.    Créez une stratégie de mise à l'échelle par étapes avec les ajustements d'étape requis :

aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-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"}'

2.    Associez votre stratégie de mise à l'échelle de l'étape 1 à votre alarme CloudWatch nouvelle ou existante en tant qu'action d'alarme :

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=your-cluster Name=ServiceName,Value=your-service-name --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"

3.    Créez une autre stratégie de mise à l'échelle par étapes et une alarme CloudWatch pour l'activité de diminution en charge.

Remarque : lorsque l'activité de montée en charge de votre service est en cours, toute activité de diminution en charge déclenchée par les métriques CloudWatch est bloquée jusqu'à ce que l'activité de montée en change soit terminée. L'activité de montée en charge en cours (InProgress) expire lorsqu'Amazon ECS n'atteint pas le nombre souhaité défini par Auto Scaling. L'expiration peut avoir différentes causes, comme des problèmes d'image ou de réseau. Si une activité de diminution en charge est déclenchée par des métriques CloudWatch pendant la période de stabilisation de la montée en charge, mais qu'une activité de montée en charge est terminée, une activité de diminution en charge est exécutée.