Ma tâche Amazon Elastic Container Service (Amazon ECS) prend beaucoup de temps pour passer à l'état STOPPED (ARRETÉE). Ou, ma tâche Amazon ECS est bloquée à l'état RUNNING (EN COURS D'EXÉCUTION) lorsque l'instance de conteneur est définie sur DRAINING (DRAINAGE). Comment puis-je résoudre ce problème ?
Brève description
Amazon ECS effectue les opérations suivantes lorsque vous définissez une instance ECS sur DRAINING (DRAINAGE) :
- Empêche la planification du placement de nouvelles tâches sur l'instance de conteneur.
- Arrête les tâches de l'instance de conteneur qui sont à l'état RUNNING (EN COURS D'EXÉCUTION).
Vos tâches peuvent être bloquées à l'état RUNNING (EN COURS D'EXÉCUTION) ou prendre plus de temps pour passer à l'état STOPPED (ARRETÉE) en raison de problèmes liés aux paramètres de configuration ou aux tâches. Pour résoudre ces problèmes, envisagez les options suivantes :
Résolution
Vérifiez que vos paramètres DeploymentConfiguration sont correctement définis.
- Ouvrez la console Amazon ECS.
- Dans le panneau de navigation, choisissez Clusters, puis choisissez le cluster dans lequel votre instance de conteneur est en cours de drainage.
- Choisissez l'onglet ECS Instances (Instances ECS) puis DRAINING (DRAINAGE) dans la section Status (Statut).
- Choisissez votre instance de conteneur, puis recherchez le service pour les tâches qui sont en cours de drainage ou qui prennent beaucoup de temps.
- Choisissez l'onglet Services, sélectionnez le service, puis choisissez Deployments (Déploiements).
- Vérifiez les valeurs pour minimumHealthyPercent et maximumPercent.
Remarque : les tâches de service sur l'instance de conteneur qui sont à l'état RUNNING (EN COURS D'EXÉCUTION) sont arrêtées et remplacées selon les paramètres de configuration du 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 l'Application Load Balancer ou le Network Load Balancer. Si votre service utilise le Classic Load Balancer, vérifiez les valeurs de connection draining.
- Ouvrez la console Amazon ECS.
- Dans le panneau de navigation, choisissez Clusters, puis choisissez le cluster dans lequel votre instance de conteneur est en cours de drainage.
- Choisissez l'onglet Services puis sélectionnez le service dont la pile est bloquée dans l'état RUNNING (EN COURS D'EXÉCUTION).
- Choisissez Target Group Name (Nom du groupe cible).
- Sous l'onglet Details (Informations) faites défiler l'écran vers le bas, puis cochez la case Deregistration delay (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 avec SSH.
- Exécutez la commande docker inspect ecs-agent -format '{{json. Config.Env}}'.
- Vérifiez s'il existe une valeur 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 mettre fin à un conteneur. Le décompte de cette durée commence immédiatement après l'arrêt d'une tâche. Si vous ne voyez pas le paramètre ECS_CONTAINER_STOP_TIMEOUT dans la sortie après l'exécution de la commande à l'étape 2, Amazon ECS utilise 30 secondes comme valeur par défaut.
Rechercher d'autres problèmes liés aux tâches
- Connectez-vous à votre instance de conteneur avec 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 journal défini par logConfiguration.
Remarque : par exemple, si vos tâches utilisent le pilote de journal awslogs, recherchez d'éventuels problèmes liés à vos Amazon CloudWatch Logs.