Ma tâche Amazon Elastic Container Service (Amazon ECS) met du temps à passer à l’état « ARRÊTÉ ». Ou bien, ma tâche Amazon ECS reste bloquée à l’état « EN COURS D’EXÉCUTION » lorsque l’instance de conteneur est définie sur « DRAINAGE ». Comment puis-je résoudre ce problème ?
Brève description
Lorsque vous définissez une instance ECS sur DRAINAGE, Amazon ECS :
- Empêche la planification de nouvelles tâches en vue de leur placement sur l’instance de conteneur
- Arrête les tâches sur l’instance de conteneur qui sont à l’état EN COURS D’EXÉCUTION
Vos tâches peuvent rester bloquées à l’état EN COURS D’EXÉCUTION ou mettre plus de temps à passer à l’état ARRÊTÉ en raison de problèmes liés aux paramètres de configuration ou aux tâches. Pour résoudre ces problèmes, vous pouvez envisager les options suivantes :
Résolution
Vérifiez que vos paramètres DeploymentConfiguration sont correctement définis
- Ouvrez la console Amazon ECS.
- Dans le volet de navigation, choisissez Clusters, puis choisissez le cluster correspondant à la destination de drainage de votre instance de conteneur.
- Choisissez l’onglet Instances ECS, puis choisissez DRAINAGE dans la section Statut.
- Choisissez votre instance de conteneur, puis recherchez le service associé aux tâches qui sont en cours de drainage ou dont le drainage est lent.
- Cliquez sur l’onglet Services, sélectionnez le service, puis choisissez Déploiements.
- Vérifiez les valeurs minimumHealthyPercent et maximumPercent.
Remarque : les tâches de service sur l’instance de conteneur qui sont à l’état EN COURS D’EXÉCUTION sont arrêtées et remplacées conformément aux paramètres de configuration de déploiement du service : minimumHealthyPercent et maximumPercent.
Vérifiez que la valeur du délai d’annulation de l’enregistrement est correctement définie
Important : les étapes suivantes s’appliquent uniquement aux services qui utilisent un Application Load Balancer ou un Network Load Balancer. Si votre service utilise un Classic Load Balancer, vérifiez les valeurs de drainage de la connexion.
- Ouvrez la console Amazon ECS.
- Dans le volet de navigation, choisissez Clusters, puis choisissez le cluster correspondant à la destination de drainage de votre instance de conteneur.
- Choisissez l’onglet Services, puis sélectionnez le service dont la pile est bloquée à l’état EN COURS D’EXÉCUTION.
- Sélectionnez Nom du groupe cible.
- Dans l’onglet Détails, faites défiler l’écran vers le bas, puis cochez la case Délai d’annulation de l’enregistrement.
Vérifiez que la valeur ECS_CONTAINER_STOP_TIMEOUT est correctement définie
- Connectez-vous à votre instance de conteneur via SSH.
- Exécutez la commande docker inspect ecs-agent --format '{{json .Config.Env}}'.
- Vérifiez qu’une valeur est présente pour ECS_CONTAINER_STOP_TIMEOUT.
Remarque : ECS_CONTAINER_STOP_TIMEOUT est un paramètre d’agent de conteneur ECS qui définit la durée pendant laquelle Amazon ECS attend avant de résilier un conteneur. Ce décompte commence dès l’arrêt d’une tâche. Si le paramètre ECS_CONTAINER_STOP_TIMEOUT n’apparaît pas dans la sortie une fois que vous avez exécuté la commande de l’étape 2, cela signifie qu’Amazon ECS utilise la valeur par défaut de 30 secondes.
Rechercher d’autres problèmes liés aux tâches
- Connectez-vous à votre instance de conteneur via SSH.
- Vérifiez que le démon Docker et l’agent de conteneur Amazon ECS sont en cours d’exécution pour vos AMI Amazon Linux 1 ou vos AMI Amazon Linux 2.
- Vérifiez les journaux d’application en fonction du pilote de journalisation défini par le paramètre logConfiguration.
Remarque : par exemple, si vos tâches utilisent le pilote de journalisation awslogs, consultez Amazon CloudWatch Logs pour détecter d’éventuels problèmes.