Pourquoi ma tâche AWS Batch reste-t-elle bloquée à l'état EXÉCUTABLE ?

Lecture de 12 minute(s)
0

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

Brève description

AWS Batch fait passer une tâche à l'état EXÉCUTABLE lorsque la tâche en question ne présente aucune dépendance non traitée et qu'elle peut être planifiée sur un hôte. 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 indéfiniment à l'état EXÉCUTABLE. Pour en savoir plus, reportez-vous à Tâches bloquées à l'état EXÉCUTABLE.

Pour résoudre les problèmes liés à une tâche AWS Batch bloquée à l'état EXÉCUTABLE, utilisez le runbook AWSSupport-TroubleshootAWSBatchJob. Reportez-vous ensuite à la section Sorties pour déterminer la cause possible du problème et les étapes à suivre pour le résoudre.

Remarque : cet article couvre le dépannage d'Amazon Elastic Container Service (Amazon ECS) sur Amazon Elastic Compute Cloud (Amazon EC2) et d'Amazon ECS sur AWS Fargate. Pour résoudre les problèmes liés à AWS Batch sur Amazon Elastic Kubernetes Service (Amazon EKS), reportez-vous à AWS Batch sur Amazon EKS.

Résolution

Utilisation du runbook SAW AWSSupport-TroubleshootAWSBatchJob

Utilisez AWS Support Automation Workflows (AWS SAW) pour automatiser ce processus de dépannage. Pour utiliser le runbook AWSSupport-TroubleshootAWSBatchJob, reportez-vous à Comment puis-je utiliser un runbook SAW pour dépanner une tâche AWS Batch bloquée à l'état EXÉCUTABLE ?

Si ce runbook ne vous aide pas à identifier le problème, reportez-vous aux sections suivantes pour résoudre manuellement le blocage de votre tâche.

Vérifiez que votre environnement de calcul dispose de suffisamment de ressources pour exécuter la tâche

1.    Ouvrez la console AWS Batch.

2.    Choisissez Tableau de bord.

3.    Dans le volet Présentation de la file d'attente de tâches, dans la colonne EXÉCUTABLE, choisissez la tâche bloquée à l'état EXÉCUTABLE. La page Détails de la tâche apparaît alors.

4.    Sur la page des Détails de la tâche, dans la section Conteneur, examinez les valeurs des champs vCPU, Mémoire et GPU. Vous aurez besoin de ces valeurs pour les étapes 9 et 10.

5.    Sur la page Files d'attente de tâches, sélectionnez une file d'attente de tâches et passez en revue ses environnements de calcul associés, car n'importe quel environnement de calcul peut exécuter votre tâche. Répétez ensuite les étapes 6 à 10 pour chaque environnement de calcul.

6.    Sur la page Environnements de calcul, sélectionnez un environnement de calcul pour vérifier ses autorisations.

7.    Vérifiez que la colonne État de l'environnement de calcul indique bien VALIDE. Assurez-vous également que la fonction du service associée à l'environnement dispose de toutes les autorisations nécessaires.

Remarque : en cas d'erreurs intermittentes ou transitoires, le passage de l'état de l'environnement de calcul de VALIDE à NON VALIDE peut prendre quelques minutes.

8.    Vérifiez que la colonne État indique bien ACTIVÉ.

9.    Vérifiez que la valeur associée au champ Maximum de vCPU est suffisamment élevée pour permettre à AWS Batch d'augmenter le nombre de vCPU souhaité pour l'exécution des tâches.

Remarque : si vous utilisez un environnement de calcul AWS Fargate, reportez-vous à Vérifiez le réseau et les paramètres de sécurité de l'environnement de calcul ci-dessous.

10.    Vérifiez que le nombre de vCPU souhaité est égal ou supérieur au nombre de vCPU que la tâche doit exécuter.

Si le nombre de vCPU souhaité est défini sur 0, vérifiez la quantité de mémoire et de ressources CPU disponibles pour votre type d'instance Amazon EC2.

-ou-

Si le nombre de vCPU souhaité est supérieur à 0 ou si votre tâche indique toujours l'état EXÉCUTABLE, suivez les étapes de la section suivante.

Important : au moins l'un des types d'instance 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

Suivez ces étapes pour l'environnement de calcul identifié comme étant celui qui doit exécuter la tâche :

1.    Ouvrez la console Amazon ECS.

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

Pour obtenir des instructions générales quant à la résolution de problèmes dans ECS, reportez-vous à Résolution des problèmes avec Amazon ECS.

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

3.    Choisissez la vue Instances ECS. Vérifiez ensuite que les instances de conteneur sont disponibles pour exécuter votre tâche.

4.    Si le cluster dispose d'une instance de conteneur disponible pour exécuter votre tâche, vérifiez l'état du démon Docker. Vérifiez ensuite l'état de l'agent de conteneur Amazon ECS.

Remarque : pour en savoir plus, reportez-vous à Comment puis-je résoudre les problèmes liés à un agent Amazon ECS déconnecté ?

Si le cluster Amazon ECS ne contient pas d'instance, vérifiez qu'il est possible de créer des instances dans votre environnement de calcul. Pour vérifier que vos instances peuvent être créées, utilisez l'une des méthodes suivantes en fonction de votre environnement de calcul.

Pour vérifier que vos instances peuvent être créées dans un environnement de calcul à la demande :

1.    Ouvrez la console Amazon EC2.

2.    Dans le volet de navigation de gauche, sélectionnez Groupes Auto Scaling.

3.    Dans Filtre, saisissez le nom de votre environnement de calcul.

Remarque : Amazon EC2 peut créer plusieurs groupes Auto Scaling pour le même environnement de calcul.

4.    Pour chaque groupe Auto Scaling, choisissez la vue Historique d'activité. Cherchez ensuite des blocages potentiels.

La colonne État indiquera Échec si des problèmes empêchent le lancement des instances.

Par exemple, si votre compte a atteint le nombre maximum d'instances, il est possible qu'Amazon EC2 renvoie un message de ce type :

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 demandes aux instances en votre nom. Si vous modifiez les groupes Auto Scaling manuellement, votre environnement de calcul risque d'être invalidé. Pour en savoir plus sur les quotas des instances et sur les demandes d'augmentation de quotas, reportez-vous à Quotas de service Amazon EC2.

5.    Si le groupe Auto Scaling indique uniquement des réussites pour les événements récents, suivez les instructions de la section ci-dessous.

Important : certaines autorisations doivent être définies pour le rôle AWS Identity and Access Management (IAM) AWSServiceRoleForAutoScaling lié au service. Au minimum, le rôle IAM AWSServiceRoleForAutoScaling doit posséder un accès utilisateur à 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 en savoir plus, consultez les sections de la stratégie de clés qui autorisent l'accès à la clé gérée par le client.

Pour vérifier que vos instances peuvent être créées dans un environnement de calcul Spot :

1.    Ouvrez la console Amazon EC2.

2.    Dans le volet de navigation, choisissez Instances. Choisissez ensuite Demandes Spot.

3.    Dans le filtre, pour Type de demande, sélectionnez flotte.

4.    Dans le champ État, sélectionnez Actif.

5.    Choisissez Description. Examinez ensuite la valeur de la Capacité cible totale pour voir si la demande d'instance Spot a été traitée. Si aucune instance n'a été créée, consultez le message d'explication dans la vue Historique. Par exemple, les demandes qui ne parviennent pas à atteindre un prix d'offre renvoient un message de ce type :

m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324

6.    Choisissez un pourcentage d'offre adapté à votre environnement de calcul. N'oubliez pas de créer un nouvel environnement de calcul si vous modifiez le prix de l'offre. Pour en savoir plus, reportez-vous à Historique de tarification d'instances Spot.

Remarque : AWS Batch crée des demandes de parc d'instances Spot en votre nom. Évitez de modifier les demandes de parc d'instances Spot manuellement, faute de quoi votre environnement de calcul risque d'être invalidé.

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

Vérification du rôle IAM de l'instance de conteneur

1.    Ouvrez la console AWS Batch.

2.    Dans le volet de navigation, sélectionnez Environnements de calcul. Choisissez ensuite votre environnement de calcul.

3.    Dans la section Détails de l'environnement de calcul, copiez le nom du Rôle de l'instance.

4.    Ouvrez la console IAM.

5.    Dans le champ de recherche, saisissez le nom du Rôle d'instance. Choisissez ensuite votre rôle d'instance dans les résultats.

6.    Choisissez la vue Autorisations. Vérifiez ensuite que la politique gérée AmazonEC2ContainerServiceforEC2Role est bien associée au rôle. Si la politique est associée, votre rôle d'instance est correctement configuré et vous pouvez passer à l'étape 11.

7.    Choisissez Associer des politiques.

8.    Dans le champ de recherche, saisissez AmazonEC2ContainerServiceforEC2Role.

9.    Pour la politique AmazonEC2ContainerServiceforEC2Role, cochez la politique. Choisissez ensuite Associer la politique.

10.    Choisissez la vue Relations d'approbation. Choisissez ensuite Modifier la relation d'approbation.

11.    Vérifiez si la relation d'approbation contient la politique suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

12.    Si la relation d'approbation correspond à la politique de l'exemple précédent, choisissez Annuler.

-ou-

Si la relation d'approbation ne correspond pas à la politique de l'exemple précédent, copiez cette dernière dans la console Document de politique. Choisissez ensuite Mettre à jour la politique d'approbation.

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

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

1.    Ouvrez la console AWS Batch.

2.    Dans le volet de navigation, sélectionnez Environnements de calcul. Choisissez ensuite votre environnement de calcul.

3.    Dans la section Ressources de calcul, copiez les valeurs des sous-réseaux et des 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.    Pour chaque sous-réseau de l'environnement de calcul, sélectionnez Description. Examinez ensuite les valeurs du champ Attribuer automatiquement l'adresse IPv4 publique.

Si le champ Attribuer automatiquement l'adresse IPv4 publique indique 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 définie sur Cible (par exemple : igw-1a2b3c4d)

Si le champ Attribuer automatiquement l'adresse IPv4 publique indique 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 définie sur Cible (par exemple : nat-12345678901234567).

Remarque : pour en savoir plus, reportez-vous à Routage dans Exemple : VPC avec des serveurs dans des sous-réseaux privés et NAT.

7.    Dans le volet de navigation, sélectionnez Groupes de sécurité.

8.    Pour chaque groupe de sécurité spécifié dans l'environnement de calcul, choisissez la vue Règles sortantes. Vérifiez ensuite qu'une règle avec les paramètres suivants existe :

  • 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 cette règle n'existe pas, choisissez Modifier. puis créez-la. 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, choisissez ACL réseau.

10.    Choisissez la liste de contrôle d'accès au réseau (ACL réseau) du VPC.

11.    Vérifiez que la liste de contrôle d'accès au réseau par défaut est configurée pour autoriser l'ensemble du trafic à entrer et sortir des sous-réseaux associés.

Important : si vous avez modifié la liste de contrôle d'accès au réseau, ajoutez une règle qui autorise le trafic HTTPS IPv4 sortant du sous-réseau vers Internet. Pour en savoir plus, reportez-vous à Contrôler le trafic vers les instance EC2 à l'aide de groupes de sécurité et à Contrôler le trafic vers les sous-réseaux à l'aide des ACL réseau. Pour modifier le VPC, les sous-réseaux ou les groupes de sécurité, vous devez créer 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.

Remarque : les procédures décrites dans cet article ne couvrent pas toutes les causes et solutions possibles. Pour résoudre d'autres problèmes liés au blocage d'une tâche AWS Batch à l'état EXÉCUTABLE, vous pouvez utiliser AWS CloudTrail. Recherchez les événements pour lesquels l'attribut Nom d'utilisateur est défini sur aws-batch, afin d'identifier les erreurs survenant lors de tâches planifiées.

Informations connexes

Connexion à votre instance Linux

Connexion à votre instance Windows

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