En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

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

Lecture de 6 minute(s)
0

Les tâches de mon environnement de calcul AWS Batch échouent et renvoient l'erreur suivante : « DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s ». Je souhaite corriger cette erreur.

Brève description

Si vos appels d'API Docker start et Docker create prennent plus de 4 minutes, AWS Batch renvoie une erreur DockerTimeoutError.

Remarque : le délai d'expiration par défaut qui est défini par l'agent de conteneur Amazon Elastic Container Service (Amazon ECS) est de 4 minutes.

Cette erreur est généralement due aux raisons suivantes :

  • Les volumes d'instance ECS de l'environnement de calcul AWS Batch sont soumis à une pression d'E/S élevée en raison de toutes les autres tâches présentes dans votre file d'attente. Ces tâches peuvent épuiser l'équilibre de rafale.
  • Les conteneurs ECS arrêtés ne font pas l’objet d’un nettoyage assez rapide pour libérer le démon Docker. Si vous utilisez une Amazon Machine Image (AMI) personnalisée au lieu de l'AMI par défaut fournie par AWS Batch, vous pouvez rencontrer des problèmes avec Docker.

Si aucune de ces causes n'est à l'origine de l'erreur, suivez ces instructions pour résoudre le problème :

  • Consultez vos journaux Docker pour identifier la source de l'erreur.
  • Exécutez le script de collecte de journaux Amazon ECS sur les instances ECS du cluster ECS associé à votre environnement de calcul AWS Batch.

Résolution

Résolution des problèmes d'équilibre de rafale

Vérifiez l'équilibre de rafale de votre instance ECS

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez la version la plus récente d’AWS CLI.

Procédez comme suit :

  1. Ouvrez la console Amazon ECS.
  2. Dans le volet de navigation, choisissez Clusters. Sélectionnez 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 chiffres et de lettres.
  3. Choisissez l'onglet Infrastructure.
  4. Dans la colonne Infrastructure, sous la ligne Instances de conteneur, choisissez votre ID d'instance.
    Remarque : pour trouver l'ID d'instance de la tâche qui a échoué, vous devez exécuter la commande AWS CLI describe-jobs pour AWS Batch. L'ID d'instance apparaît dans la sortie de containerInstanceArn.
  5. Dans la console Amazon EC2, assurez-vous que l'instance est toujours sélectionnée. Ensuite, dans la section Stockage, choisissez le lien correspondant à votre volumeID.
  6. Dans la fenêtre contextuelle du périphérique de stockage en mode bloc, sélectionnez votre volume dans le champ ID du volume.
  7. Choisissez l'onglet Surveillance. Ensuite, choisissez Équilibre de rafale pour vérifier vos indicateurs d’équilibre de rafale. Si votre équilibre de rafale passe à 0, cela signifie que votre solde de rafale est épuisé.

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.

Procédez comme suit :

  1. Ouvrez la console Amazon EC2, puis choisissez Lancer des modèles.
  2. Choisissez Créer un modèle de lancement.
  3. Dans le champ ID AMI, sélectionnez l'AMI optimisée pour Amazon ECS par défaut.
  4. Dans la section Stockage (volumes), choisissez un type de volume dans la colonne Type de volume. Saisissez ensuite une valeur entière dans la colonne Taille (Gio).
    Remarque : si vous choisissez SSD IOPS provisionnées (io1) pour votre type de volume, veillez à saisir une valeur entière autorisée pour les IOPS.
  5. Choisissez Créer un modèle de lancement.
  6. Utilisez votre nouveau modèle de lancement pour créer un nouvel 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 nouvel environnement de calcul car vous ne pouvez pas mettre à jour le paramètre ID AMI.

Procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Choisissez Lancer l’instance.
  3. Suivez les étapes de l'assistant de configuration pour créer votre instance.
    Important : sur la page Ajouter le stockage, veillez à modifier le type de volume ou la taille de votre instance. Plus le volume est important, plus les performances de base sont élevées et plus le réapprovisionnement de l’équilibre de rafale est lent. Pour obtenir de meilleures performances en cas de charges d'E/S élevées, faites passer le volume en type io1.
  4. Créez une AMI de ressources de calcul à partir de votre instance.
  5. Créez un environnement de calcul pour AWS Batch qui inclut votre ID AMI.

Résolution de problèmes dans 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, il est possible que votre stockage de conteneurs se remplisse d'images Docker que vous n'utilisez pas. L'AMI par défaut pour AWS Batch optimise vos paramètres de nettoyage Amazon ECS.

Procédez comme suit :

  1. Utilisez le protocole SSH pour vous connecter à l'instance de conteneur de votre environnement de calcul AWS Batch.
  2. Pour inspecter l'agent de conteneur Amazon ECS, exécutez la commande Docker inspect ecs-agent. Examinez ensuite la section env dans la sortie.
    Remarque : pour accélérer le nettoyage des tâches et des images, réduisez les valeurs associées aux variables suivantes :
    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 ajustables pour le nettoyage automatique des ECS tâches et des images Amazon.
  3. Créez une nouvelle AMI avec des valeurs mises à jour.
    -ou-
    Créez un modèle de lancement avec des données utilisateur qui incluent vos nouvelles variables d'environnement.

Création d'une nouvelle AMI avec des valeurs mises à jour

Procédez comme suit :

  1. Définissez les paramètres de configuration de votre 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 AMI.

Création d’un modèle de lancement avec des données utilisateur qui incluent vos nouvelles variables d'environnement

Procédez comme suit :

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

    Par exemple, les données utilisateur contenues dans le fichier MIME partitionné suivant remplacent les paramètres de nettoyage des images Docker par défaut d’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==--

    Pour en savoir plus sur les fichiers MIME partitionnés, consultez la section MIME multi-part archive sur le site Web de cloud-init.

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

Informations connexes

Services AWS qui publient des métriques CloudWatch

AMI de ressources de calcul

amazon-ecs-agent sur le site Web de GitHub

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois