Passer au contenu

Comment puis-je résoudre les échecs de surveillance de l'état des tâches Amazon ECS sur Fargate ?

Lecture de 7 minute(s)
0

Je reçois des échecs de surveillance de l'état de mes tâches Amazon Elastic Container Service (Amazon ECS) sur AWS Fargate.

Brève description

Des échecs de surveillance de l'état des tâches Amazon ECS sur Fargate peuvent survenir pour les raisons suivantes :

  • Erreurs de surveillance de l'état du conteneur
  • Une cible située dans une zone de disponibilité désactivée pour l'équilibreur de charge
  • Contraintes liées aux ressources pour le processeur ou la mémoire
  • Paramètres de surveillance de l’état mal configurés
  • Problèmes de connectivité réseau

Lorsque votre tâche échoue la surveillance de l’état de l’équilibreur de charge, vous recevez l’un des messages d’erreur suivants dans le message d’événement de votre service Amazon ECS :

  • « (service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [5xx]/[4xx]/[3xx]) or (Request timed out). »
  • « (service AWS-Service) (task eaa3ec9e9f104070b461490987654321) failed container health checks. »
  • « (service AWS-Service) (instance 10.122.144.145) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) due to (reason Target is in an Availability Zone that is not enabled for the load balancer). »

Sur la console des tâches Amazon ECS, vous pouvez également recevoir le message d'erreur suivant : « Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:ap-south-1:111111111111:targetgroup/aws-targetgroup/123456789) ».

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Résoudre une erreur HTTP [5xx]/[4xx]/[3xx] ou (Request timed out)

Vérifier la configuration de la surveillance de l’état de votre équilibreur de charge

Vous recevez ces erreurs lorsque l'équilibreur de charge Elastic Load Balancing (ELB) attend un code HTTP 200 mais reçoit à la place un code d'erreur 3xx, 4xx ou 5xx. Par conséquent, l'équilibreur de charge arrête la tâche et la marque comme Non saine. Pour résoudre ce problème, configurez le chemin de surveillance de l’état approprié ou modifiez les paramètres de surveillance de l’état.

Pour plus d'informations sur les erreurs HTTP dans votre Application Load Balancer, consultez la section L'équilibreur de charge génère une erreur HTTP.

Si la tâche Amazon ECS ne répond pas à la surveillance de l'état de l'équilibreur de charge dans le délai imparti, l'erreur Request timed out s’affiche.

Vérifiez que l'équilibreur de charge peut effectuer des vérifications de l’état

Vérifiez les configurations suivantes :

  • Le groupe de sécurité associé à votre équilibreur de charge autorise le trafic sortant vers les interfaces réseau Elastic de votre tâche Amazon ECS sur le port de conteneur enregistré.
  • Le groupe de sécurité Amazon ECS autorise tout le trafic entrant sur le port de conteneur enregistré à partir du groupe de sécurité associé à votre équilibreur de charge.

Configurer vos paramètres de délai d’expiration

Si vos tâches Amazon ECS tardent à répondre aux vérifications de l’état, il est recommandé d'augmenter la valeur du paramètre HealthCheckGracePeriod.

Si votre application met généralement beaucoup de temps à répondre aux vérifications de l’état, vous pouvez également augmenter la valeur du délai d'expiration des vérifications de l’état du groupe cible. Ce paramètre définit la durée pendant laquelle les tâches Amazon ECS doivent répondre aux vérifications de l’état.

Vérifier l'utilisation de vos ressources

Si votre application nécessite une connectivité de backend à une base de données, vérifiez si elle utilise beaucoup de ressources au niveau de la base de données. Une utilisation élevée des ressources peut entraîner des problèmes lors du processus d'initialisation de l'application et provoquer des erreurs lors de la surveillance de l'état de l'équilibreur de charge.

Résoudre les problèmes de lenteur de réponse

Utilisez ECS Exec pour vérifier comment l'application répond sur le chemin et le port de surveillance de l’état. Pour vérifier que le backend répond correctement sans délai, exécutez la commande suivante :

curl -iv localhost:container-port/path

Remarque : Remplacez container-port par le port utilisé par votre conteneur et path par le chemin de surveillance de l’état.

Vérifier votre configuration de surveillance de l’état

Tout d'abord, assurez-vous que le fichier se trouve dans le chemin que vous avez configuré lors de la surveillance de l’état du groupe cible.

Si votre fichier se trouve à l’emplacement approprié mais que les vérifications de l’état échouent toujours, procédez comme suit :

  1. Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2).
  2. Dans le volet de navigation, sous Équilibrage de charge, sélectionnez Groupes cibles.
  3. Sélectionnez le groupe cible.
  4. Choisissez l’onglet Vérifications de l’état, puis sur Modifier.
  5. Sur la page Modifier le groupe cible, dans Code de réussite, saisissez le code HTTP figurant dans votre message d'erreur. Par exemple, saisissez 404.
  6. Sélectionnez Enregistrer.

Important : Assurez-vous que le protocole du groupe cible est défini sur le protocole HTTP pris en charge par votre application.

Vérifier les contraintes liées aux ressources dans Amazon ECS

Consultez les métriques de service Amazon ECS pour l'utilisation du processeur et de la mémoire. Si les valeurs de CpuUtilization ou MemoryUtilization sont constamment élevées, vous rencontrez des problèmes de performances qui peuvent entraîner l'échec des vérifications de l’état.

Pour réduire l'utilisation des ressources, prenez les mesures suivantes :

  • Allouez davantage de ressources de processeur et de mémoire dans la définition de tâche.
  • Pour mettre votre configuration à l’échelle horizontale, augmentez le nombre de tâches en cours d'exécution afin de répartir uniformément la charge de travail sur plusieurs instances et d'améliorer les performances lors de pics soudains.
  • Évaluez régulièrement les performances du système dans différentes conditions de charge afin d'identifier les goulots d'étranglement potentiels et de mieux allouer les ressources.
  • Surveillez l'utilisation du réseau, les modèles de connexion et les temps de réponse de votre application pour identifier les goulots d'étranglement potentiels et optimiser les modèles d'utilisation réseau inefficaces.

Il est recommandé de surveiller fréquemment le comportement de votre système et d'ajuster votre configuration si nécessaire.

Résoudre les problèmes liés à l'échec de la vérification de l'état du conteneur

Si les instances de conteneur ECS de votre tâche utilisent des vérifications de l’état que votre service ne peut pas réussir, vous recevez le message d'erreur d’échec des vérifications de l’état du conteneur. Pour résoudre ce problème, consultez la section Comment puis-je résoudre les échecs de surveillance de l'état du conteneur pour les tâches Amazon ECS ?

Résoudre les problèmes de zone de disponibilité liés aux tâches Amazon ECS cibles

Si vous enregistrez des cibles dans une zone de disponibilité que vous n'activez pas, elles ne reçoivent pas de trafic. Pour en savoir plus, consultez la page Zones de disponibilité et nœuds d’équilibreur de charge.

Par exemple, vos sous-réseaux Amazon ECS appartiennent aux zones de disponibilité us-east-1x et us-east-1y. Si les zones de disponibilité us-east-1p et us-east-1q sont activées sur l'équilibreur de charge, un message d'erreur s'affiche.

Pour mettre à jour Amazon ECS afin d'utiliser les sous-réseaux de la zone de disponibilité de l'équilibreur de charge, exécutez la commande de l'interface de ligne de commande AWS update-service :

aws ecs update-service --cluster cluster-name --service service-name --region region-code --network-configuration '{"awsvpcConfiguration": {"subnets": ["subnet-1","subnet-2"],"securityGroups": ["sg-abcdxyz"]}}'

Remarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et region-code par votre région AWS. Remplacez également subnet-1 et subnet-2 par vos sous-réseaux et sg-abcdxyz par votre groupe de sécurité.

Informations connexes

Définitions de conteneur

Mettre automatiquement à l’échelle votre service Amazon ECS

Guide de bonnes pratiques Amazon ECS

Surveillance d'Amazon ECS