Comment résoudre les problèmes liés aux échecs de surveillance de l’état de l’Application Load Balancer pour les tâches Amazon ECS sur Fargate ?

Lecture de 7 minute(s)
0

Je souhaite résoudre les problèmes de surveillance de l’état de l’Application Load Balancer lors de l’exécution de tâches Amazon Elastic Container Service (Amazon ECS) sur AWS Fargate.

Brève description

Si les tâches Amazon ECS échouent aux surveillances de l’état de l’Application Load Balancer, il est possible que vous receviez l’une des erreurs suivantes dans le message d’événement de service d’Amazon ECS :

  • Le délai de la demande a expiré
  • Les surveillances d’état ont échoué sans code d’erreur
  • Les surveillances d’état ont échoué avec les codes d’erreur 404 ou 5xx
  • La cible se trouve dans une zone de disponibilité qui n’est pas activée pour l’équilibreur de charge

Pour en savoir plus sur les surveillances de l’état des conteneurs, consultez la page Comment résoudre les échecs de la surveillance de l’état des conteneurs pour les tâches Amazon ECS ?

Si vous utilisez Amazon ECS avec des instances de conteneur Amazon Elastic Compute Cloud (Amazon EC2), consultez la documentation suivante :

Résolution

Remarque : Si vous recevez des erreurs lors de l’exécution des commandes de l’interface de la ligne de commande AWS (AWS CLI), vérifiez que vous exécutez une version récente d’AWS CLI. Dans les commandes de l’AWS CLI suivantes, remplacez les valeurs de l’exemple par les vôtres.

Erreur d’expiration du délai de la demande

Vérifiez les groupes de sécurité pour vous assurer que l’équilibreur de charge peut envoyer des demandes de surveillance de l’état à la tâche Fargate. Le groupe de sécurité des tâches Fargate doit autoriser le trafic entrant et sortant sur le port de conteneur spécifié dans la définition de la tâche. La source doit être le groupe de sécurité de l’Application Load Balancer. Le groupe de sécurité de l’Application Load Balancer doit autoriser le trafic sortant vers le groupe de sécurité des tâches Fargate.

Remarque : Il est recommandé de configurer différents groupes de sécurité pour la tâche Fargate et l’équilibreur de charge afin de permettre le trafic entre eux.

Si les groupes de sécurité autorisent la communication entre votre tâche Fargate et l’Application Load Balancer, vérifiez le HealthCheckTimeoutSeconds dans vos paramètres de surveillance de l’état. Augmentez légèrement le délai d’attente en secondes, si nécessaire.

Remarque : Augmentez le HealthCheckTimeoutSeconds uniquement si votre application met du temps à répondre à la surveillance de l’état.

Pour vérifier le temps de réponse moyen, exécutez la commande suivante :

$ time curl -Iv http://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>

Remarque : Une utilisation élevée des ressources pour les tâches peut ralentir ou bloquer le processus et entraîner l’échec de la surveillance de l’état.

Les surveillances d’état ont échoué sans code d’erreur

Exemple de message d’erreur d’échec de la surveillance de l’état :

(service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)

Si vous recevez un message d’erreur similaire, vérifiez que la tâche répond rapidement après son démarrage dans Amazon ECS. Vérifiez également que l’application répond avec le bon code de réponse.

Assurez-vous que la tâche a le temps de répondre après son démarrage dans Amazon ECS

Pour vous assurer que la tâche dispose de suffisamment de temps pour répondre après son démarrage, augmentez la valeur de healthCheckGracePeriodSeconds. Cela permet à Amazon ECS de conserver la tâche pendant une période plus longue et d’ignorer les surveillances de l’état des cibles Elastic Load Balancing non conformes.

Remarque : Si vous créez un nouveau service, vous pouvez configurer la période de grâce de la surveillance de l’état sur la page de configuration de l’équilibreur de charge.

Pour mettre à jour le healthCheckGracePeriodSeconds de votre service Amazon ECS existant, exécutez la commande suivante :

$ aws ecs update-service --cluster <EXAMPLE-CLUSTER-NAME> --service <EXAMPLE-SERVICE-NAME> --region <EXAMPLE-REGION> --health-check-grace-period-seconds <example-value-in-seconds>

Vérifiez que l’application répond avec le bon code de réponse

Pour confirmer le code de réponse que votre application a envoyé sur le chemin de la surveillance de l’état, appliquez les méthodes suivantes.

Si vous avez configuré la journalisation des accès sur votre application, utilisez ELB-HealthChecker/2.0 pour vérifier la réponse. Si vous utilisez AWS CloudWatch Logs, utilisez CloudWatch Logs Insights et exécutez la commande suivante :

fields @timestamp, @message
  | sort @timestamp desc
  | filter @message like /ELB-HealthChecker/

Pour les instances Amazon EC2 situées dans le même Amazon Virtual Private Cloud (Amazon VPC), exécutez les commandes suivantes pour vérifier que vos tâches répondent aux surveillances manuelles. Pour lancer une nouvelle instance Amazon EC2, consultez le didacticiel : Démarrez avec les instances Linux Amazon EC2.

Surveillances de l’état HTTP

$ curl -Iv http://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>

Surveillances de l’état HTTPS

$ curl -Iv https://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>

Si les tâches s’arrêtent rapidement et que vous ne parvenez pas à obtenir les adresses IP privées, lancez une tâche autonome en dehors d’Amazon ECS pour résoudre le problème. Utilisez la même définition de tâche et exécutez une commande curl sur son adresse IP pour la lancer. La tâche ne s’arrête pas en raison d’un échec de la surveillance de l’état.

Utilisez également Amazon ECS Exec pour vérifier les ports d’écoute au niveau du conteneur. À l’aide de netstat, vérifiez que l’application écoute sur le port approprié :

$ netstat -tulpn | grep LISTEN

Les surveillances d’état ont échoué avec les codes d’erreur 404 ou 5xx

La réception d’échecs de surveillance de l’état avec les codes d’erreur 404 ou 5xx indique que la demande a été confirmée, mais qu’un code de réponse non valide a été reçu. Les codes indiquent également que le code de réponse envoyé par l’application ne correspond pas au code de réussite configuré au niveau du groupe cible (paramètre : Matcher).

Un code d’erreur 404 peut apparaître lorsqu’un chemin de la surveillance de l’état n’existe pas ou qu’il y a une faute de frappe dans la configuration du chemin de surveillance de l’état.Un code d’erreur 5xx peut apparaître lorsque l’application associée à la tâche ne répond pas correctement à la demande ou qu’il y a une erreur de traitement.

Pour déterminer si votre application démarre correctement, consultez les journaux de l’application.

La cible se trouve dans une zone de disponibilité qui n’est pas activée pour l’équilibreur de charge

Lorsqu’une zone de disponibilité est activée pour l’équilibreur de charge, Elastic Load Balancing crée un nœud d’équilibrage de charge dans la zone de disponibilité. Si vous enregistrez des cibles dans une zone de disponibilité et que vous n’activez pas celle-ci, les cibles enregistrées ne reçoivent pas de trafic. Pour plus d’informations, consultez la section Zones de disponibilité et nœuds d’équilibrage de charge.

Pour identifier les zones de disponibilité pour lesquelles votre équilibreur de charge est configuré, exécutez la commande suivante :

aws elbv2 describe-load-balancers --load-balancer-arns <EXAMPLE-ALB-ARN> --query 'LoadBalancers[*].AvailabilityZones[].{Subnet:SubnetId}'

Pour identifier les zones de disponibilité pour lesquelles votre tâche Fargate est configurée, exécutez la commande suivante :

aws ecs describe-services --cluster <EXAMPLE-CLUSTER-NAME> --service <EXAMPLE-SERVICE-NAME> --query 'services[*].deployments[].networkConfiguration[].awsvpcConfiguration.{Subnets:subnets}'

Remarque : Utilisez la commande update-service de l’interface de la ligne de commande AWS pour modifier la configuration du sous-réseau d’un service Amazon ECS. Utilisez la commande enable-availability-zones-for-load-balancer de l’interface de la ligne de commande AWS pour ajouter une zone de disponibilité à un équilibreur de charge d’applications existant.

Informations connexes

Résolution des problèmes liés aux équilibreurs de charge des services

Vérifications de l’état de vos groupes cibles

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an