Pourquoi ma tâche AWS Batch est-elle bloquée au statut RUNNABLE ?

Lecture de 11 minute(s)
0

Ma tâche AWS Batch est bloquée au statut RUNNABLE. Pourquoi cela se produit-il et comment puis-je débloquer ma tâche AWS Batch ?

Brève description

AWS Batch passe une tâche au statut RUNNABLE lorsqu'elle n'a plus de dépendances en attente et qu'elle est prête pour la planification sur un hôte. Les tâches RUNNABLE sont lancées dès que des ressources suffisantes sont disponibles dans l'un des environnements de calcul associé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 conserver le statut RUNNABLE indéfiniment. Pour plus d'informations, voir la sectionTâches bloquées au statut RUNNABLE.

Remarque : cet article traite le dépannage des problèmes liés à Amazon Elastic Container Service (Amazon ECS) sur Amazon Elastic Compute Cloud (Amazon EC2) et Amazon ECS sur AWS Fargate. Pour dépanner AWS Batch sur Amazon Elastic Kubernetes Service (Amazon EKS), voirAWS Batch sur Amazon EKS.

Pour dépanner les tâches AWS Batch bloquées au statut RUNNABLE, procédez comme suit.

Solution

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

1.    Ouvrez la console AWS Batch.

2.    Choisissez Dashboard (Tableau de bord).

3.    Dans le panneau Aperçu de la file d'attente de tâches, dans la colonne RUNNABLE, choisissez la tâche qui est bloquée au statut RUNNABLE. La page Détails de la tâche apparaît.

4.    Sur la page Détails de la tâche, dans la sectionConteneur, passez en revue les valeurs des processeurs virtuels, de la mémoire et des processeurs graphiques. Vous avez besoin de ces valeurs pour effectuer les étapes 9 à 10.

5.    Sur la page Files d'attente de tâches, sélectionnez une file d'attente de tâches et passez en revue les 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 informatique.

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

7.    Vérifiez que la colonne Statut de l'environnement de calcul est définie sur 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 changement du Statut de l'environnement de calcul de VALIDE à INVALIDE peut prendre quelques minutes.

8.    Vérifiez que la colonne État est définie sur ACTIVÉ.

9.    Vérifiez que la valeur Max de processeurs virtuels est suffisamment élevée pour permettre à AWS Batch d'augmenter le nombre de processeurs virtuels souhaités pour exécuter des tâches.

Remarque : Si vous utilisez un environnement de calcul AWS Fargate, accédez à la section « Vérifier les paramètres réseau et de sécurité de l'environnement de calcul ».

10.    Vérifiez que la valeur des processeurs virtuels souhaités est égale ou supérieure au nombre de processeurs virtuels dont la tâche a besoin pour s'exécuter.

Si lesprocesseurs virtuels souhaités sont 0, vérifiez la quantité de mémoire et de ressources de processeur disponibles pour votre type d'instance Amazon EC2.

-ou-

Si le processeur virtuel souhaité est supérieur à 0 ou si le statut de votre tâche est toujours RUNNABLE, procédez comme indiqué dans la section suivante.

Important : Au moins 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. Par ailleurs, le type d'instance doit disposer de ressources de CPU supérieures ou égales aux spécifications de votre tâche. Si au moins un type d'instance n'a pas assez de ressources de mémoire ou de CPU pour exécuter votre tâche, annulez la tâche. Puis, exécutez une nouvelle tâche qui nécessite moins de processeur ou de mémoire. Sinon, créez un nouvel environnement de calcul avec suffisamment de ressources pour exécuter la tâche, puis attribuer la tâche à la file d'attente appropriée.

Vérifiez que votre environnement de calcul comporte des instances et que celles-ci sont disponibles pour exécuter votre tâche

Pour l'environnement de calcul que vous avez identifié comme étant celui qui doit exécuter votre tâche, procédez comme suit :

1.    Ouvrez la console Amazon ECS.

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

Pour obtenir des instructions générales de dépannage d'ECS, consultez la section Résolution des problèmes liés à Amazon ECS.

Remarque : Le nom du cluster commence par le nom de l'environnement de calcul. Ceci 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 conteneurs 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 le statut du démon Docker. Vérifiez ensuite l'état de l'agent de conteneur Amazon ECS.

Remarque : Pour plus d'informations, consultez l'article Comment résoudre les problèmes liés à un agent Amazon ECS déconnecté ?

S'il n'y a aucune instance dans le cluster Amazon ECS, vérifiez que des instances peuvent être créées dans votre environnement de calcul. Pour vérifier que vos instances peuvent être créées, effectuez l'une des procédures 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 panneau de navigation de gauche, choisissez Groupes Auto Scaling.

3.    Pour 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é. Ensuite, recherchez tout problème de blocage.

La colonne Statut indique Échec en cas de problème empêchant le lancement des instances.

Par exemple, si votre compte atteint le nombre maximum d'instances, Amazon EC2 peut renvoyer un message similaire au 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 à partir du moment où vous avez soumis le travail. Par exemple :

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 demande des instances en votre nom. Si vous modifiez les groupes Auto Scaling manuellement, votre environnement de calcul risque d'être invalidé. Pour plus d'informations sur les limites d'instance et sur la manière de demander une augmentation de limite, consultez les service quotas Amazon EC2.

5.    Si le groupe Auto Scaling affiche uniquement les événements réussis dans les événements récents, procédez comme indiqué dans la section suivante.

Important : Certaines autorisations doivent être définies pour le rôle de la Gestion des identités et des accès AWS (IAM) lié à un service AWSServiceRoleForAutoScaling. Le rôle IAM AWSServiceRoleForAutoScaling doit disposer au minimum d'un accès utilisateur à la clé AWS Key Management Service (AWS KMS) gérée par le client. Cela est nécessaire dans les environnements comportant des Amazon Machine Images (AMI) personnalisées, des volumes Amazon Elastic Block Store (Amazon EBS) cryptés et des clés AWS KMS gérées par le client. Pour plus d'informations, consultez les sections relatives aux politiques 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, choisissezInstances. Choisissez ensuite Demandes Spot.

3.    Dans le filtre, pour Request type, sélectionnez fleet.

4.    Pour Statut, sélectionnez actif.

5.    Choisissez Description. Ensuite, examinez la valeur de la capacité cible totale pour voir si la demande d'instance Spot a été satisfaite. Si aucune instance n'a été créée, consultez la vue Historique pour voir un message expliquant pourquoi. Par exemple, les demandes qui ne peuvent pas atteindre un prix d'enchère renvoient un message similaire au suivant :

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'enchère adapté à votre environnement de calcul. Assurez-vous de créer un nouvel environnement de calcul si vous modifiez le prix de l'offre. Pour plus d'informations, voir Historique de tarification des instances Spot.

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

7.    Si les événements les plus récents du groupe Auto Scaling affichés sont tous des réussites, alors suivez les étapes de la section ci-dessous.

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

1.    Ouvrez la console AWS Batch.

2.    Dans le panneau de navigation, choisissez 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 d'instance.

4.    Ouvrez la console IAM.

5.    Dans la zone de recherche, saisissez le nom du rôle d'instance. Ensuite, choisissez votre rôle d'instance dans les résultats.

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

7.    Choisissez Attacher des politiques.

8.    Dans la zone de recherche, saisissez AmazonEC2ContainerServiceforEC2Role.

9.    Pour la politique AmazonEC2ContainerServiceforEC2Role, cochez la case. Choisissez Attacher une politique.

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

11.    Vérifiez que la relation d'approbation comprend 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, alors copiez cette dernière dans la console Document de politique. Choisissez ensuite Mettre à jour la politique de confiance.

Si votre instance ne rejoint toujours pas le cluster Amazon ECS, suivez les étapes décrites dans la section suivante.

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 panneau de navigation, choisissez Environnements de calcul. Choisissez ensuite votre environnement de calcul.

3.    Dans la section Ressources de calcul, copiez les valeurs Sous-réseaux et Groupes de sécurité.

4.    Ouvrez la console Amazon Virtual Private Cloud (Amazon VPC).

5.    Dans le volet de navigation, sélectionnezSous-réseaux.

6.    Pour chaque sous-réseau de l'environnement de calcul, choisissez Description. Passez ensuite en revue la section Attribuer automatiquement des valeurs d'adresses IPv4 publiques.

Si la valeur d'attribution automatique de l'adresse IPv4 publique est Oui, les instances lancées dans le sous-réseau disposent des éléments suivants :

  • Une adresse IPv4 publique
  • Une table de routage avec une destination d'acheminement 0.0.0.0/0
  • Une passerelle Internet définie sur Target (par exemple : igw-1a2b3c4d)

Si la valeur d'attribution automatique de l'adresse IPv4 publique est Non, les instances lancées dans le sous-réseau disposent des éléments suivants :

  • Une adresse IPv4 privée
  • Une table de routage avec une destination d'acheminement 0.0.0.0/0
  • Une passerelle NAT définie sur Cible (par exemple : nat-12345678901234567).

Remarque : pour plus d'informations, consultez Routage.

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 :

  • Pour Type, choisissez TOUT le trafic.
  • Pour Protocole, sélectionnez TOUT.
  • Pour Plage de ports, sélectionnez TOUT.
  • Pour Destination, choisissez 0.0.0.0/0.

Important : si la règle n'existe pas, choisissez Modifier. Créez ensuite la règle. Pour obtenir une règle plus restrictive pour le trafic sortant, choisissez HTTPS (443) pour Type et 0.0.0.0/0 pour Destination.

9.    Dans le volet de navigation, sélectionnezACL réseau.

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

11.    Vérifiez que l'ACL 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 (ACL), ajoutez une règle qui autorise le trafic HTTPS IPv4 sortant du sous-réseau vers Internet. Pour plus d'informations, consultez Contrôler le trafic vers les instances EC2 avec des groupes de sécurité et Contrôler le trafic vers les sous-réseaux avec des 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 ensuite 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 profondes possibles et les moyens de les résoudre. Si vous devez approfondir un problème où votre tâche AWS Batch est bloquée au statut RUNNABLE, AWS CloudTrail peut être utile. Dans CloudTrail, vous pouvez rechercher des événements dont l'attribut Nom d’utilisateur est défini sur aws-batch afin de recueillir des indices sur 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 un mois