Passer au contenu

Comment résoudre les problèmes liés à une tâche AWS Batch bloquée à l’état EXÉCUTABLE ?

Lecture de 12 minute(s)
0

Ma tâche AWS Batch est bloquée à l'état EXÉCUTABLE.

Brève description

AWS Batch fait passer une tâche à l’état EXÉCUTABLE lorsqu'elle ne comporte aucune dépendance en attente et qu'AWS Batch peut planifier la tâche. Les tâches de type EXÉCUTABLE démarrent dès que des ressources suffisantes sont disponibles dans l'un des environnements de calcul mappés à la file d'attente de la tâche.

Si les ressources requises pour exécuter une tâche ne sont pas disponibles, la tâche peut rester bloquée à l'état EXÉCUTABLE.

Remarque : La résolution suivante permet de résoudre les problèmes liés aux tâches AWS Batch qui s'exécutent dans des conteneurs Amazon Elastic Container Service (Amazon ECS). Ces conteneurs peuvent être exécutés sur des instances Amazon Elastic Compute Cloud (Amazon EC2) ou sur des environnements de calcul AWS Fargate. Pour résoudre les problèmes liés aux tâches AWS Batch qui s’exécutent sur Amazon Elastic Kubernetes Service (Amazon EKS), consultez la section AWS Batch sur Amazon EKS.

Résolution

Tout d'abord, déterminez si votre tâche bloquée bloque la file d'attente FIFO (premier entré, premier sorti). Si cela ne résout pas votre problème, automatisez la résolution des problèmes pour déterminer le problème ou remédiez-y manuellement.

Vérifier si une file d'attente FIFO est bloquée

Une tâche peut être bloquée à l’état EXÉCUTABLE au début d'une file d'attente FIFO (premier entré, premier sorti) en raison des problèmes suivants :

  • La tâche n'utilise pas une planification à partage équitable, de sorte que toutes les autres tâches qui la sous-tendent ne peuvent pas être exécutées.
  • Votre compte AWS est incorrectement configuré.
  • Votre compte n'a pas accès aux instances requises pour la tâche. Par exemple, votre compte peut nécessiter un type d'instance GPU.

Pour débloquer la file d'attente FIFO, utilisez GetJobQueueSnapshot pour rechercher la tâche qui bloque la file d'attente, puis fermez-la.

Automatiser le processus de résolution de problèmes

Utilisez le dossier d’exploitation AWSSupport-TroubleshootAWSBatchJob pour résoudre les problèmes liés à une tâche AWS Batch bloquée à l'état EXÉCUTABLE. Vous pouvez également suivre les étapes décrites dans les sections suivantes pour résoudre le problème manuellement.

Vérifier si votre environnement de calcul dispose de ressources suffisantes pour exécuter la tâche

Procédez comme suit :

  1. Ouvrez la console AWS Batch.
  2. Dans le volet de navigation, sélectionnez Tableau de bord.
  3. Dans la section Présentation de la file d'attente de tâches, dans la colonne EXÉCUTABLE, sélectionnez la tâche bloquée á l’état EXÉCUTABLE. La page de détails de votre tâche s'affiche.
  4. Choisissez l'onglet Conteneurs, puis notez les valeurs de vCPU, de Mémoire et de GPU pour effectuer les étapes 9-10.
  5. Dans le volet de navigation, choisissez Files d'attente de tâches, puis choisissez votre file d'attente de tâches.
  6. Dans l'onglet Ordre de l’environnement, identifiez les environnements de calcul associés à votre file d'attente de tâches.
  7. Dans le volet de navigation, choisissez Environnements, puis sélectionnez un environnement de calcul pour vérifier ses autorisations.
  8. Dans la section Statut, vérifiez que la colonne Statut de l’environnement de calcul est Valide.
    Remarque : En cas d'erreurs intermittentes ou transitoires, le passage de l'environnement de calcul de l’état Valide à Non valide peut prendre quelques minutes.
  9. Dans l’onglet Détails, vérifiez que le rôle de service associé à l'environnement dispose de toutes les autorisations nécessaires.
  10. Dans la section Statut, vérifiez que la colonne État est Activée.
  11. Dans l'onglet Ressources de calcul, vérifiez la valeur de Nombre maximal de vCPU. Cette valeur doit être suffisamment élevée pour qu'AWS Batch puisse augmenter le nombre de vCPU souhaités pour exécuter les tâches.
    Remarque : Si vous utilisez un environnement de calcul AWS Fargate, consultez la section Vérifier le réseau et les paramètres de sécurité de l'environnement de calcul.
  12. Vérifiez que la valeur de vCPU souhaités est égale ou supérieure au nombre de vCPU que la tâche doit exécuter.
  13. Si vCPU souhaités est défini sur 0, vérifiez la quantité de mémoire et de ressources CPU disponibles pour votre type d'instance Amazon EC2. Si vCPU souhaités est supérieur à 0 ou si votre tâche indique toujours l'état EXÉCUTABLE, suivez les étapes de la section suivante.

Répétez les étapes 6 à 14 pour chaque environnement de calcul.

Important : Au moins l'un des types d'instances de votre environnement de calcul doit disposer d'une quantité de mémoire supérieure à celle spécifiée par votre tâche. En outre, le type d'instance doit disposer de ressources CPU égales ou supérieures à celles spécifiées par votre tâche. Si au moins un type d'instance ne dispose pas de suffisamment de mémoire ou de ressources CPU pour exécuter votre tâche, vous devez annuler celle-ci. Exécutez une nouvelle tâche qui nécessite moins de ressources CPU ou de mémoire. Vous pouvez également créer un nouvel environnement de calcul doté de suffisamment de ressources pour exécuter la tâche, puis attribuer la tâche à la file d'attente de tâches appropriée.

Vérifier que votre environnement de calcul dispose d'instances et que celles-ci sont disponibles pour exécuter votre tâche

Pour l'environnement de calcul qui exécute votre tâche, procédez comme suit :

  1. Ouvrez la console Amazon ECS.
  2. Dans le volet de navigation, choisissez Clusters, puis sélectionnez 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 section Instances de conteneur, recherchez vos instances de conteneur, puis vérifiez que vos instances de conteneur sont disponibles pour exécuter votre tâche.

Si le cluster dispose d'une instance de conteneur disponible pour exécuter votre tâche, vérifiez l'état du démon Docker et de l'agent de conteneur Amazon ECS. Pour plus d’informations, consultez la section Comment résoudre les problèmes liés à un agent Amazon ECS déconnecté ?

Si le cluster Amazon ECS ne contient aucune instance, vérifiez si vous pouvez créer des instances dans votre environnement de calcul.

Environnement de calcul à la demande

Procédez comme suit :

  1. Ouvrez la console Amazon EC2.

  2. Dans le volet de navigation, choisissez Auto Scaling, puis Groupes Auto Scaling.

  3. Dans la zone de recherche, saisissez le nom de votre environnement de calcul, puis sélectionnez votre environnement.
    Remarque : Amazon EC2 peut créer plusieurs groupes Auto Scaling pour le même environnement de calcul.

  4. Pour chaque groupe Auto Scaling, choisissez l'onglet Activité, puis recherchez les problèmes de blocage dans la section Historique des activités.
    Remarque : La colonne Statut indique Échec lorsque des problèmes empêchent le lancement des instances.
    Par exemple, si votre compte a atteint le nombre maximum d'instances, Amazon EC2 peut renvoyer un message similaire à l’exemple suivant :
    « Launching a new EC2 instance. Status Reason: Your quota allows for 0 more running instance(s). You requested at least 1. Launching EC2 instance failed. »
    L'événement inclut un horodatage en UTC correspondant à la date de soumission de la tâche :

    At 2018-09-03T05:54:30Z a user request update of AutoScalingGroup constraints to min: 0, max: 1, desired: 1 changing the desired capacity from 0 to 1.At 2018-09-03T05:54:52Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.

    Remarque : AWS Batch envoie des requêtes aux instances en votre nom. Si vous modifiez manuellement les groupes Auto Scaling, votre environnement de calcul peut être invalidé. Pour plus d’informations sur les quotas d’instances et sur les demandes d'augmentation de quotas, consultez la section Quotas de service Amazon EC2.

Si le groupe Auto Scaling affiche uniquement les événements réussis dans Événements récents, suivez les étapes décrites dans la section Vérifier le rôle IAM de l'instance de conteneur.

Important : Vous devez définir des autorisations pour le rôle de service Gestion des identités et des accès AWS (AWS IAM) AWSServiceRoleForAutoScaling. Le rôle IAM AWSServiceRoleForAutoScaling doit disposer d’un accès à la clé AWS Key Management Service (AWS KMS) gérée par le client. Cette mesure est nécessaire dans les environnements dotés d'Amazon Machine Images (AMI) personnalisés, de volumes Amazon Elastic Block Store (Amazon EBS) chiffrés et de clés AWS KMS gérées par le client. Pour plus d’informations, consultez les sections de la stratégie de clé qui autorisent l'accès à la clé gérée par le client.

Environnement de calcul Spot

Procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le volet de navigation, sélectionnez Requêtes Spot.
  3. Choisissez Type de requête, puis Type de requête = flotte.
  4. Sélectionnez votre requête Spot.
  5. Pour Statut, sélectionnez Actif.
  6. Choisissez Description, puis examinez la valeur de Capacité cible totale totale pour déterminer si la demande d'instance Spot a été satisfaite. S'il n'y a pas d'instance, consultez la vue Historique pour en déterminer la raison.
    Par exemple, les requêtes qui ne parviennent pas à atteindre un prix d'offre renvoient un message similaire à l’exemple suivant :
    « m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324 »
  7. Choisissez un pourcentage d'offre adapté à votre environnement de calcul. Si vous modifiez le prix de l’offre, n'oubliez pas de créer un nouvel environnement de calcul. Pour plus d’informations, consultez la section Historique de tarification d'instances Spot.
    Remarque : AWS Batch crée des demandes de parc d'instances Spot en votre nom. Ne modifiez pas manuellement les demandes de parc d'instances Spot, faute de quoi votre environnement de calcul risque d'être invalidé.

Si les événements les plus récents du groupe Auto Scaling ne montrent que des événements réussis, suivez les étapes de la section ci-dessous.

Vérifier le rôle IAM de l'instance de conteneur

Procédez comme suit :

  1. Ouvrez la console AWS Batch.
  2. Dans le volet de navigation, choisissez Environnements, puis sélectionnez votre environnement de calcul.
  3. Dans l'onglet Détails, notez le nom du rôle d’instance.
  4. Ouvrez la console IAM.
  5. Dans la zone de recherche, saisissez le nom du rôle d’instance, puis sélectionnez votre rôle d'instance.
  6. Choisissez l’onglet Autorisations. Dans la section Politiques d'autorisations, vérifiez que vous avez associé la politique gérée AmazonEC2ContainerServiceforEC2Role au rôle. Si vous avez associé la politique, passez à l'étape 11.
  7. Choisissez Ajouter des autorisations, puis Attacher des politiques.
  8. Dans la section Autres politiques d'autorisations, saisissez AmazonEC2ContainerServiceforEC2Role dans la zone de recherche.
  9. Sélectionnez AmazonEC2ContainerServiceforEC2Role, puis choisissez Ajouter des autorisations.
  10. Cliquez sur l’onglet Relations d’approbation, puis choisissez Modifier la politique d’approbation.
  11. Vérifier que la politique d’approbation contient l’instruction suivante :
{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. Si la politique d’approbation inclut l’instruction précédente, choisissez Annuler. Si la politique d’approbation n'inclut pas l’instruction précédente, ajoutez-la à votre politique. Choisissez Mettre à jour la politique.

Si votre instance ne rejoint toujours pas le cluster Amazon ECS, suivez les instructions dans la section ci-dessous.

Vérifier les paramètres réseau et de sécurité de l'environnement de calcul

Procédez comme suit :

  1. Ouvrez la console AWS Batch.
  2. Dans le volet de navigation, choisissez Environnements, puis sélectionnez votre environnement de calcul.
  3. Dans la section Ressources de calcul, notez les valeurs de Sous-réseaux et de Groupes de sécurité.
  4. Ouvrez la console Amazon Virtual Private Cloud (Amazon VPC).
  5. Dans le volet de navigation, choisissez Sous-réseaux.
  6. Sélectionnez chaque sous-réseau de l'environnement de calcul, puis identifiez les valeurs de Attribuer automatiquement l’adresse IPv4 publique dans l’onglet Détails.
    Si la valeur de Attribuer automatiquement l'adresse IPv4 publique est Oui, les instances lancées dans le sous-réseau auront les propriétés suivantes :
    Une adresse IPv4 publique
    Une table de routage avec une destination d'acheminement correspondant à 0.0.0.0/0
    Une passerelle Internet, par exemple igw-1a2b3c4d, qui est définie sur Cible.
    Si la valeur de Attribuer automatiquement l'adresse IPv4 publique est Non, les instances lancées dans le sous-réseau auront les propriétés suivantes :
    Une adresse IPv4 privée
    Une table de routage avec une destination d'acheminement correspondant à 0.0.0.0/0
    Une passerelle NAT, par exemple nat-12345678901234567, configurée sur Cible
    Remarque : Pour plus d’informations, consultez la page Routage.
  7. Dans le volet de navigation, choisissez Groupes de sécurité.
  8. Pour chaque groupe de sécurité de l'environnement de calcul, choisissez l’onglet Règles sortantes. Puis, vérifier qu'une règle existe avec les paramètres suivants :
    Dans Type, choisissez Tout le trafic.
    Dans Protocole, choisissez Tous.
    Dans Plage de ports, choisissez Toutes.
    Dans Destination, choisissez 0.0.0.0/0.
    Important : Si la règle n'existe pas, choisissez Actions, puis Modifier les règles sortantes. Puis, créez la règle. Pour mettre en place une règle plus restrictive pour le trafic sortant, choisissez HTTPS (443) dans Type et 0.0.0.0/0 dans Destination.
  9. Dans le volet de navigation, sélectionnez ACL réseau.
  10. Sélectionnez la liste de contrôle d'accès au réseau (ACL réseau) du VPC.
  11. Dans les onglets Règles entrantes et Règles sortantes vérifiez que l'ACL réseau autorise l’intégralité du trafic à entrer et à sortir des sous-réseaux associés.

Important : Si vous avez modifié l’ACL réseau, ajoutez une règle qui autorise le trafic HTTPS IPv4 sortant du sous-réseau vers Internet. Pour plus d'informations, consultez les sections Contrôler le trafic vers vos ressources AWS à l'aide de groupes de sécurité et Contrôler le trafic de sous-réseau à l'aide de listes de contrôle d'accès réseau. Pour modifier le VPC, les sous-réseaux ou les groupes de sécurité, créez un nouvel environnement de calcul.

Si votre instance ne rejoint toujours pas le cluster Amazon ECS, connectez-vous à votre instance. Vérifiez l'état du démon Docker et de l'agent de conteneur Amazon ECS. Pour plus d’informations, consultez la section Comment résoudre les problèmes liés à un agent Amazon ECS déconnecté ?

Remarque : Pour résoudre les problèmes liés à une tâche AWS Batch bloquée à l’état EXÉCUTABLE de manière plus approfondie, utilisez AWS CloudTrail. Définissez l'attribut Username sur aws-batch pour rechercher les erreurs qui se produisent lors des tâches planifiées.

Informations connexes

Se connecter à une instance Linux via SSH

Se connecter à une instance Windows via RDP

Présentation de nouvelles alertes pour aider les utilisateurs à détecter les files d'attente de tâches bloquées et à y réagir dans AWS Batch

AWS Batch présente Job Queue Snapshot qui permet de visualiser les tâches en tête des files d'attente

AWS OFFICIELA mis à jour il y a 6 mois