Comment résoudre les problèmes de mise à l'échelle avec mon fournisseur de capacité Amazon ECS ?

Date de la dernière mise à jour : 14/04/2022

J'ai configuré un fournisseur de capacité pour mon cluster Amazon Elastic Container Service (Amazon ECS). Cependant, le fournisseur de capacité n'augmente pas la capacité lorsque le cluster manque de ressources ou la diminue lorsqu'elle est moins occupée.

Brève description

Le fournisseur de capacité de votre cluster Amazon ECS ne parvient pas à diminuer ou à augmenter automatiquement la capacité pour l'une ou plusieurs des raisons suivantes :

  • Amazon ECS service n'est pas associé au fournisseur de capacité.
  • Les politiques de mise à l'échelle liées au fournisseur de capacité ne sont pas attachées au groupe Auto Scaling.
  • Les politiques de suivi des objectifs et d'échelonnement ne sont pas configurées correctement.
  • Le pourcentage de capacité cible n'est pas configuré correctement dans le fournisseur de capacité.
  • La stratégie de placement des tâches n'est pas définie en fonction de la charge de travail.
  • Le service ECS échoue avec certaines erreurs et bloque le fournisseur de capacité de mettre à l'échelle.
  • Vous utilisez la mise à l'échelle gérée pour le fournisseur de capacité, et le groupe Auto Scaling a des politiques de mise à l'échelle personnalisées qui lui sont attachées.
  • Le groupe Auto Scaling a lancé l'instance de conteneur, mais n'est pas en mesure de rejoindre le cluster.
  • Vos instances de conteneur sont protégées contre la diminution de la capacité.
  • Le fournisseur de capacité est bloqué en état d'échec.
  • Le groupe Auto Scaling est bloqué dans une boucle d'augmentation et de diminution de la capacité.

Solution

Amazon ECS service n'est pas associé au fournisseur de capacité

Pour vérifier si le service ECS est associé au fournisseur de capacité, exécutez la commande describe-services de l'AWS Command Line Interface (AWS CLI).

aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query services[].capacityProviderStrategy

Si votre service ECS est associé au fournisseur de capacité, la sortie doit ressembler à ce qui suit :

[
  [
    {
      "capacityProvider": "example-capacity-provider",
      "weight": 1,
      "base": 1
    }
  ]
]

Assurez-vous que le champ capacityProviderStrategy n'est pas nul dans la sortie. Vous pouvez voir la configuration du service en examinant les événements AWS CloudTrail pour les appels d'API CreateService et UpdateService.

Pour résoudre ce problème, mettez à jour le service ECS à l'aide des commandes AWS CLI update-service, run-task ou put-cluster-capacity-providers. Vous pouvez également mettre à jour le service à l'aide de la console Amazon ECS.

Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS CLI, assurez-vous que vous utilisez la version la plus récente d'AWS CLI.

Lorsqu'un fournisseur de capacité est créé et associé à un groupe Auto Scaling, ce dernier crée une politique de mise à l'échelle qui utilise le suivi des objectifs pour modifier la capacité souhaitée afin d'accommoder les charges du cluster.

Pour résoudre ce problème, examinez les événements CloudTrail pour les API UpdateAutoScalingGroup, CreateCapacityProvider, UpdateCapacityProvider et PutScalingPolicy.

Vérifiez que le groupe Auto Scaling est créé en tant qu'attachement de cluster en exécutant la commande suivante :

aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query clusters[].attachments[]

La sortie de la commande doit ressembler à ce qui suit :

[
  {
    "id": "100a23456-5f0b-4abc-b998-d6789d111a",
    "type": "asp",
    "status": "CREATED",
    "details": [
      {
        "name": "capacityProviderName",
        "value": "example-capacityProvider"
      },
      {
        "name": "scalingPlanName",
        "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345"
      }
    ]
  }
]

Si vous utilisez une politique de mise à l'échelle gérée, vérifiez si elle est attachée au groupe Auto Scaling en procédant comme suit :

  1. Ouvrez la console Amazon ECS.
  2. Dans le panneau de navigation, choisissez Clusters.
  3. Ouvrez le cluster que vous voulez vérifier.
  4. Choisissez l'onglet Capacity Providers (Fournisseurs de capacité).
  5. Pour le fournisseur de capacité que vous voulez vérifier, choisissez l'ASG.
    Vous êtes redirigé vers la page des groupes Auto Scaling dans la console Amazon EC2.
  6. Choisissez l'onglet Automatic Scaling (Scalabilité automatique).
    Vous pouvez afficher les politiques de mise à l'échelle.
  7. Vérifiez si la politique de mise à l'échelle que vous utilisez est incluse.

Assurez-vous également d'inclure le préfixe AutoScaling-ECSManagedAutoScalingPlan au nom de la politique de mise à l'échelle du groupe Auto Scaling. Sinon, le groupe Auto Scaling utilise une politique de mise à l'échelle différente de celle gérée par le fournisseur de capacité. Notez que les fournisseurs de capacité peuvent être utilisés avec d'autres types de politiques de mise à l'échelle. Pour plus d'informations, consultez Scalabilité automatique des services.

Les politiques de suivi des objectifs et d'échelonnement ne sont pas configurées correctement

Une politique de suivi des objectifs et d'échelonnement suit une valeur cible pour la métrique que vous définissez. La scalabilité automatique d'Amazon ECS service crée et gère les alarmes Amazon CloudWatch qui déclenchent la politique de mise à l'échelle et calcule l'ajustement de l'échelle en fonction de la métrique et de la valeur cible. Si la politique de suivi des objectifs n'est pas configurée correctement, les tâches risquent de ne pas être mises à l'échelle automatiquement selon les besoins.

Supposons que la politique de suivi des objectifs et de scalabilité automatique effectue le suivi de la métrique CPUUtilization dans CloudWatch, et que vous spécifiez un pourcentage de suivi des objectifs de 60. Dans ce cas, le fournisseur de capacité fait de son mieux pour maintenir l'utilisation globale du CPU à 60 %. Cela entraîne un événement d'augmentation de la capacité lorsque l'utilisation du CPU est supérieure à 60 % et un événement de diminution de la capacité lorsque l'utilisation est inférieure à 60 %.

Pour résoudre ce problème, choisissez la bonne métrique et définissez les valeurs correctes de scale-in et scale-out dans la politique de suivi des objectifs en fonction de votre charge de travail. Pour plus d'informations, consultez Politiques de suivi des objectifs et d'échelonnement.

Le pourcentage de capacité cible n'est pas configuré correctement dans le fournisseur de capacité

La valeur de capacité cible est utilisée comme valeur cible pour la métrique CloudWatch qui est utilisée dans la politique de suivi des objectifs et d'échelonnement gérée par Amazon ECS. Cette valeur de capacité cible est mise en correspondance sur la base du meilleur effort. Les valeurs autorisées pour cette valeur sont des nombres entiers compris entre 1 et 100. Par exemple, si vous définissez la capacité cible à 100 %, toutes les instances sont utilisées et la capacité de toutes les instances qui n'exécutent pas de tâches est diminuée. Toutefois, ce comportement n'est pas garanti à tout moment. Si vous avez besoin d'une capacité supplémentaire, définissez la capacité cible à une valeur légèrement inférieure à 100 % en fonction de vos besoins.

Pour mettre à jour le fournisseur de capacité avec le pourcentage de capacité cible correcte, suivez les instructions de la section Mise à jour du fournisseur de capacité d'un groupe Auto Scaling à l'aide de la console classique.

La stratégie de placement des tâches n'est pas définie en fonction de la charge de travail

Les stratégies de placement des tâches peuvent être spécifiées lorsque vous créez un service ou exécutez une tâche. Vous pouvez également mettre à jour les stratégies de placement des tâches pour les services existants. Par exemple, si votre charge de travail nécessite beaucoup de mémoire et que vous n'avez pas configuré la stratégie de placement des tâches en conséquence, les tâches ne sont pas mises à l'échelle en fonction de votre utilisation de la mémoire. Assurez-vous de vérifier les types de stratégie de placement des tâches et à définir ces stratégies en fonction de votre charge de travail.

Le service ECS échoue avec certaines erreurs et bloque le fournisseur de capacité de mettre à l'échelle

Si votre service ECS échoue avec des erreurs, le fournisseur de capacité est bloqué et ne peut pas diminuer ou augmenter la capacité. Pour déterminer la raison de l'échec du service ECS, vérifiez les messages d'événement du service dans la console Amazon ECS.

Vous utilisez la mise à l'échelle gérée pour le fournisseur de capacité, et le groupe Auto Scaling a des politiques de mise à l'échelle personnalisées qui lui sont attachées

Lorsque votre cluster ne se met pas à l'échelle automatiquement, vous pouvez obtenir l'erreur suivante :

"StatusCode": "ActiveWithProblems"
"StatusMessage": "Scaling plan has been created but failed to be applied to all resources. Problems were encountered for 1 resource. See scaling plan resources for the failure details."
Cette erreur se produit lorsque les deux conditions suivantes sont vraies :
  • Vous utilisez la mise à l'échelle gérée par AWS pour le fournisseur de capacité.
  • Le groupe Auto Scaling possède des politiques de mise à l'échelle personnalisées qui ne sont pas créées par Amazon ECS attaché.

Pour résoudre cette erreur, consultez Éviter l'erreur ActiveWithProblems. Lorsque vous activez la mise à l'échelle gérée, Amazon ECS gère les actions de diminution et d'augmentation de la capacité du groupe Auto Scaling avec des plans de mise à l'échelle Auto Scaling. La bonne pratique consiste à toujours créer un nouveau groupe Auto Scaling et à attacher ce groupe au fournisseur de capacité.

Le groupe Auto Scaling a lancé l'instance de conteneur, mais n'est pas en mesure de rejoindre le cluster

Vos instances de conteneur sont protégées contre la diminution de la capacité

Si vous avez activé la protection de résiliation gérée lorsque vous avez configuré le fournisseur de capacité, Amazon ECS empêche les instances Amazon EC2 d'un groupe Auto Scaling qui contiennent des tâches d'être résiliées pendant une action de diminution de capacité.

Pour vous assurer que le groupe Auto Scaling peut résilier les anciennes instances lorsque vous modifiez la capacité souhaitée, procédez comme suit :

Pour plus d'informations, consultez Comment éliminer l'erreur « The managed termination protection setting for the capacity provider is invalid » (Le paramètre de protection de résiliation gérée du fournisseur de capacité n'est pas valide) dans Amazon ECS ?

Le fournisseur de capacité est bloqué en état d'échec

La bonne pratique consiste à créer un nouveau groupe Auto Scaling à utiliser avec votre fournisseur de capacité au lieu d'utiliser un groupe existant. Si vous utilisez un groupe Auto Scaling existant, vous risquez d'avoir des problèmes en utilisant le fournisseur de capacité. En effet, les instances Amazon EC2 en cours d'exécution qui sont associées au groupe existant et enregistrées dans un cluster Amazon ECS peuvent ne pas être correctement enregistrées auprès du fournisseur de capacité.

Pour connaître l'état du fournisseur de capacité, exécutez la commande AWS CLI describe-capacity-providers.

Examinez également les événements CloudTrail et recherchez les erreurs liées à l'API CreateCapacityProvider.

Le groupe Auto Scaling est bloqué dans une boucle d'augmentation et de diminution de la capacité

Lorsque la valeur de la métrique spécifiée dans la politique de mise à l'échelle de votre service ECS atteint un pic, le groupe Auto Scaling effectue une augmentation de la capacité et lance des instances selon les besoins. Cependant, si la valeur de la métrique chute après le pic soudain, le groupe Auto Scaling tente de diminuer les instances. Si la valeur de la métrique fluctue plusieurs fois dans un court laps de temps, le groupe Auto Scaling peut se retrouver bloqué dans une boucle d'augmentation et de diminution de la capacité. Pour éviter ce problème, assurez-vous de définir la valeur seuil de la métrique dans la politique de mise à l'échelle en fonction de votre charge de travail.