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

Date de la dernière mise à jour : 06/10/2021

Une tâche AWS Batch est bloquée sur le 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 pas de dépendances en attente et 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 mappés sur la file d'attente de la tâche.

Si les ressources disponibles pour exécuter la tâche ne sont pas suffisantes, la tâche peut conserver le statut RUNNABLE indéfiniment. Pour plus d'informations, consultez la section Tâches bloquées au statut RUNNABLE du guide de l'utilisateur AWS Batch.

Pour résoudre les tâches AWS Batch bloquées au statut RUNNABLE, procédez comme suit :

Ré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 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 section Environnement, passez en revue les valeurs de vCPU et de mémoire. Ces valeurs sont nécessaires pour effectuer les étapes 7 à 9.

5.    Dans le panneau de navigation de gauche, choisissez Environnements de calcul. Ensuite, dans la colonne Nom, recherchez le nom de l'environnement de calcul dans lequel votre tâche doit être exécutée.

6.    Consultez la colonne Statut de l'environnement de calcul. Assurez-vous qu'il est défini sur VALIDE.

7.    Consultez la colonne État de l'environnement de calcul. Assurez-vous qu'il est défini sur ACTIVÉ.

8.    Consultez les colonnes Nombre max. de vCPU et Nombre de vCPU souhaité de l'environnement de calcul. Vérifiez que Nombre max. de vCPU est défini sur une valeur suffisamment élevée pour permettre à AWS Batch d'augmenter le Nombre de vCPU souhaité afin d'exécuter les tâches.

9.    Vérifiez que la valeur du Nombre de vCPU souhaité est supérieure ou égale au nombre de vCPU requis pour l'exécution de la tâche.

10.    Si la valeur du Nombre de vCPU souhaité est de 0, vérifiez la quantité de ressources de mémoire et de CPU pour votre type d'instance Amazon Elastic Compute Cloud (Amazon EC2).

-ou-

Si le Nombre de vCPU souhaité est supérieur à 0 ou si votre tâche est toujours au statut RUNNABLE, suivez les étapes de la section suivante de cet article.

Important : au moins un des types d'instances de votre environnement de calcul doit avoir plus de mémoire que les spécifications de 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érifier que votre environnement de calcul dispose d'instances et que des instances sont disponibles pour exécuter votre tâche.

1.    Ouvrez la console Amazon Elastic Container Service (Amazon ECS).

2.    Dans le panneau de navigation de gauche, choisissez Clusters. Ensuite, choisissez 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.    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 a une instance de conteneur disponible pour exécuter votre tâche, vérifiez le statut du Démon Docker et de l'agent de conteneur Amazon ECS. Pour plus d'informations, consultez Pourquoi mes instances de conteneur Amazon ECS avec des images AMI Amazon Linux 1 sont-elles déconnectées ?

Si aucune instance ne se trouve dans le cluster Amazon ECS, vérifiez que vos instances peuvent être créées dans votre environnement de calcul. Pour vérifier que vos instances peuvent être créées, effectuez l'une des opérations 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 pourrait 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 les problèmes de blocage. La valeur de la colonne Statut est Échec si des problèmes bloquent le lancement de l'instance. Par exemple, si votre compte a atteint le nombre maximal d'instances, Amazon EC2 peut renvoyer un message similaire à ce qui suit :

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, le statut de votre environnement de calcul risque de devenir NON VALIDE. Pour plus d'informations sur les limites d'instance et pour savoir comment demander une augmentation de limite, consultez Quotas de service Amazon EC2.

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

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 panneau de navigation de gauche, choisissez Instances. Ensuite, choisissez 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, cherchez dans la vue Historique pour voir un message qui en explique la cause. Par exemple, les requêtes qui n'ont pas atteint le prix d'offre renvoient un message semblable à ce qui suit :

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

6.    Choisissez le bon pourcentage d'offre pour votre environnement de calcul. Assurez-vous également de créer un nouvel environnement de calcul si vous modifiez le prix de l'offre. Pour plus d'informations, consultez Historique de tarification des 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, au risque de faire passer le statut de votre environnement de calcul sur NON VALIDE.

7.    Si les événements les plus récents du groupe Auto Scaling affichés sont tous des réussites, 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 AWS Identity and Access Management (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 AmazonEC2ContainerServiceforEC2Role est attachée au rôle. Si la politique est attachée, votre rôle d'instance est bien 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": "2008-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. Puis, choisissez Mettre à jour la politique d'approbation.

Si votre instance ne joint toujours pas le cluster ECS, suivez les étapes de la section suivante.

Vérifier 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 de gauche, 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 panneau de navigation de gauche, choisissez Sous-réseaux.

6.    Pour chaque sous-réseau de l'environnement de calcul, choisissez Description. Ensuite, passez en revue la valeur Attribuer automatiquement l'adresse IPv4 publique.

Si la valeur Attribuer automatiquement 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 Cible (par exemple : igw-1a2b3c4d)

Si la valeur Attribuer automatiquement 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 panneau de navigation de gauche, choisissez 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 panneau de navigation de gauche, choisissez Listes ACL réseau.

10.    Choisissez la liste de contrôle d'accès (ACL) 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 Groupes de sécurité de votre VPC et Listes ACL 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. Puis, vérifiez le statut du processus Docker et de l'agent de conteneur Amazon ECS.


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


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