Comment résoudre l'erreur « DockerTimeoutError » dans AWS Batch ?

Dernière mise à jour : 03/02/2022

Les tâches dans mon environnement de calcul AWS Batch échouent en raison de l'erreur suivante : « DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s. » (DockerTimeoutError - impossible d'effectuer la transition vers créé ; l'appel expire après 4 m 0 s d'attente.) Comment résoudre les erreurs « DockerTimeoutError » dans AWS Batch ?

Brève description

Si vos appels d'API docker start etdocker create prennent plus de quatre minutes, AWS Batch renvoie une erreur DockerTimeoutError.

Remarque  le délai d'expiration par défaut fixé par l'agent de conteneur Amazon Elastic Container Service (Amazon ECS) est de quatre minutes.

Cette erreur peut se produire pour diverses raisons, mais le plus souvent dans les cas suivants :

  • Les volumes de l'instance ECS de l'environnement de calcul AWS Batch font face à un nombre d'I/O élevé en raison de toutes les autres tâches présentes dans votre file d'attente. Ces tâches, qui sont créées et exécutées sur l'instance ECS, peuvent épuiser le solde de transmission en rafales. Pour résoudre ce problème, suivez la procédure décrite dans la section Résolution des problèmes de solde de transmission en rafales.
  • Les conteneurs ECS arrêtés ne sont pas nettoyés suffisamment rapidement pour pouvoir libérer le démon Docker. Vous pouvez rencontrer des problèmes avec Docker si vous utilisez une Amazon Machine Image (AMI) personnalisée au lieu de l'AMI fournie par défaut par AWS Batch. L'AMI par défaut pour AWS Batch optimise vos paramètres de nettoyage Amazon ECS. Pour résoudre ce problème, suivez la procédure décrite dans la section Résolution des problèmes de Docker de cet article.

Si aucun de ces problèmes n'est à l'origine de l'erreur, poursuivez le dépannage en procédant comme suit :

Résolution

Résolution des problèmes de solde de transmission en rafales

Vérification du solde de transmission en rafales de votre instance ECS :

1.    Ouvrez la console Amazon ECS.

2.    Dans le panneau de navigation, choisissez Clusters. Choisissez ensuite le cluster qui contient votre tâche.

Remarque : le nom du cluster commence par le nom de l'environnement de calcul, suivi de _Batch_ et d'un hachage aléatoire de lettres et de chiffres.

3.    Accédez à l'onglet ECS Instances (Instances ECS).

4.    Dans la colonne EC2 Instance (Instance EC2), choisissez votre instance.

Remarque : pour obtenir l'ID d'instance de la tâche ayant échoué, exécutez la commande AWS Batchdescribe-jobs. L'ID d'instance s'affiche dans la sortie pour containerInstanceArn.

5.    Dans l'onglet Descriptions de la console Amazon EC2, cliquez sur le lien correspondant à votre volume sous Block devices (Périphérique de stockage en mode bloc).

6.    Dans la fenêtre contextuelle de périphérique de stockage en mode bloc, sous EBS ID (ID d'EBS), choisissez votre volume.

7.    Choisissez l'onglet Monitoring (Surveillance). Choisissez ensuite Burst Balance (Solde de transmission en rafales) pour afficher vosmétriques de solde de transmission en rafales. Votre solde de transmission en rafales est épuisé lorsqu'il passe à 0.

Création d'un modèle de lancement pour votre environnement de calcul géré

Remarque : si vous modifiez le modèle de lancement, vous devez créer un nouvel environnement de calcul.

1.    Ouvrez la console Amazon EC2, puis sélectionnez Load Balancers (Équilibreurs de charge).

2.    Sélectionnez Create launch template (Créer un modèle de lancement).

3.    Sous AMI ID (ID d'AMI), sélectionnez l'AMI optimisée pour Amazon ECS par défaut.

4.    Dans la section Storage (Volumes) (Stockage (Volumes)), choisissez un type de volume dans la colonneVolume type (Type de volume). Saisissez ensuite une valeur entière dans la colonneSize (GiB) (Taille (Gio)).

Remarque : si vous choisissez Provisioned IOPS SSD (io1) (IOPS provisionnés SSD (io1)) pour le type de volume, saisissez une valeur entière autorisée pour les IOPS.

5.    Sélectionnez Create launch template (Créer un modèle de lancement).

6.    Utilisez votre nouveau modèle de lancement pour créer un environnement de calcul géré.

Création d'un environnement de calcul AWS Batch avec votre AMI

Remarque : si vous modifiez l'AMI, vous devez créer un environnement de calcul, car le paramètre AMI ID (ID d'AMI) ne peut pas être mis à jour.

1.    Ouvrez la console Amazon EC2.

2.    Sélectionnez Launch instance (Lancer des instances).

3.    Suivez les étapes de l'assistant de configuration pour créer votre instance.

Important : sur la page Add Storage (Ajouter le stockage), modifiez le type de volume ou la taille de votre instance. Plus la taille de volume est élevée, meilleure est la performance de référence, mais cela ralentit également proportionnellement le réapprovisionnement de son solde en rafales. Pour obtenir les meilleures performances pour les charges d'E/S élevées, modifiez le type de volume pour io1.

4.    Créez une ressource de calcul AMI à partir de votre instance.

5.    Créez un environnement de calcul pour AWS Batch qui inclut votre ID d'AMI.

Résolution des problèmes de Docker

Par défaut, l'agent de conteneur Amazon ECS nettoie automatiquement les tâches arrêtées et les images Docker que vos instances de conteneur n'utilisent pas. Si vous exécutez de nouvelles tâches avec de nouvelles images, votre stockage de conteneur peut se remplir avec des images Docker que vous n'utilisez pas.

1.    Utilisez SSH pour vous connecter à l'instance de conteneur pour votre environnement de calcul AWS Batch.

2.    Pour inspecter l'agent de conteneur Amazon ECS, exécutez la commande Docker inspect ecs-agent. Ensuite, passez en revue la sectionenv de la sortie.

Remarque : vous pouvez réduire les valeurs des variables suivantes pour accélérer le nettoyage des tâches et des images :

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

Vous pouvez également utiliser des paramètres adaptables pour les tâches automatisées et le nettoyage d'images.

3.    Créez une nouvelle AMI avec des valeurs mises à jour.

-ou-

Créez un modèle de lancement avec les données utilisateur incluant vos nouvelles variables d'environnement.

Pour créer une nouvelle AMI avec des valeurs mises à jour

1.    Définissez vos paramètres de configuration de l'agent dans le fichier /etc/ecs/ecs.config.

2.    Redémarrez votre agent de conteneur.

3.    Créez une ressource de calcul AMI à partir de votre instance.

4.    Créez un environnement de calcul pour AWS Batch qui inclut votre ID d'AMI.

Pour créer un modèle de lancement avec les données utilisateur incluant vos nouvelles variables d'environnement

1.    Créez un modèle de lancement avec des données utilisateur.

Par exemple, les données utilisateur du fichier MIME en plusieurs parties suivant remplacent les paramètres de nettoyage d'images Docker par défaut pour une ressource de calcul :

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==MYBOUNDARY==--

2.    Utilisez votre nouveau modèle de lancement pour créer un environnement de calcul géré.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?