Ma tâche Amazon Elastic Container Service (Amazon ECS) échoue à la surveillance de l'état des conteneurs. Comment puis-je résoudre ce problème ?
Brève description
Si vous recevez l'erreur suivante, les conteneurs Amazon ECS de votre tâche utilisent des surveillances de l'état que votre service ne peut pas passer :
(service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks
Remarque : si vous rencontrez des problèmes de surveillance de l'état d'Elastic Load Balancing (ELB), consultez la section Comment puis-je faire en sorte que mes tâches Amazon ECS fonctionnent pour passer la surveillance de l'état d'Application Load Balancer dans Amazon ECS ?
Solution
Pour résoudre les problèmes liés aux échecs de la surveillance de l'état des conteneurs Amazon ECS, suivez les conseils suivants :
- Testez le conteneur localement pour vous assurer qu'il passe les surveillances de l'état du conteneur avant l'approvisionnement sur Amazon ECS.
- Confirmez que la commande que vous transmettez au conteneur est correcte et que vous êtes en train d'utiliser la syntaxe correcte pour vos tâches Amazon ECS.
- Assurez-vous que votre conteneur dispose de suffisamment de temps pour être instancié.
- Si votre tâche Amazon ECS est en cours d'exécution depuis un certain temps, vérifiez les journaux de votre application et les journaux Amazon CloudWatch.
Testez le conteneur localement pour vous assurer qu'il passe la surveillance de l'état du conteneur
Avant l'approvisionnement de votre conteneur sur Amazon ECS, assurez-vous qu'il peut fonctionner comme prévu et qu'il passe la surveillance de l'état du conteneur spécifiée. Vous pouvez tester votre conteneur avec la configuration Dockerfile HEALTHCHECK sur le site Web de Docker. Une fois que votre conteneur a passé la surveillance de l'état définie dans Dockerfile, vous pouvez spécifier la configuration de surveillance de l'état dans la définition de la tâche. La spécification de la configuration de la surveillance de l'état permet à l'agent de conteneur Amazon ECS de surveiller et de signaler la surveillance de l'état spécifiée.
Remarque : Amazon ECS ne surveille pas les surveillances de l'état de Docker qui sont intégrées dans une image de conteneur et qui ne sont pas spécifiées dans la définition du conteneur. Les paramètres de surveillance de l'état qui sont spécifiés dans une définition du conteneur remplacent toute surveillance de l'état de Docker qui existe dans l'image du conteneur.
Confirmez que vous utilisez la syntaxe correcte pour vos tâches Amazon ECS
Assurez-vous que vous utilisez les commandes et la syntaxe correctes pour vos tâches Amazon ECS.
Par exemple, si vous utilisez le panneau JSON de la console de gestion AWS, l'AWS Command Line Interface (AWS CLI) ou les API, mettez la liste des commandes entre parenthèses, comme ceci :
["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
Si vous utilisez la console de gestion AWS pour modifier votre tâche ECS, vous n'avez pas besoin d'inclure les parenthèses :
"CMD-SHELL", "curl -f http://localhost/ || exit 1"
Veillez également à ne pas séparer la commande de surveillance de l'état par des guillemets doubles, comme ["CMD-SHELL", "healthcheck.sh", "||", "exit 1"]. Utilisez plutôt la syntaxe de commande suivante :
["CMD-SHELL", "healthcheck.sh || exit 1"]
Assurez-vous que votre conteneur dispose de suffisamment de temps pour instancier
Si le lancement de votre conteneur prend un certain temps, il risque d'échouer à la surveillance de l'état du conteneur. Essayez de définir startPeriod dans le paramètre avancé de définition du conteneur. Cela donne à votre conteneur Amazon ECS suffisamment de temps pour amorcer avant que les surveillances de l'état qui ont échoué soient incluses dans le nombre maximum de nouvelles tentatives.
Vérifiez vos journaux d'application et les journaux Amazon CloudWatch si la tâche est en cours d'exécution depuis un certain temps
Si votre conteneur Amazon ECS est en cours d'exécution depuis un certain temps et qu'il échoue à la surveillance de l'état du conteneur, vérifiez les journaux de votre application. Si votre tâche Amazon ECS utilise le pilote de journal awslogs, vérifiez les journaux de votre application sur Amazon CloudWatch.
Remarque : AWS Fargate est un service géré. Par conséquent, vous ne pouvez pas accéder à l'infrastructure sous-jacente. Pour résoudre le problème, lancez vos tâches Amazon ECS dans Amazon Elastic Compute Cloud (Amazon EC2). Connectez-vous ensuite à vos instances Amazon EC2 en utilisant SSH. Vous pouvez également essayer d'utiliser Amazon ECS Exec pour interagir directement avec vos conteneurs ECS.