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

Date de la dernière mise à jour : 17/08/2020

Une tâche AWS Batch est bloquée sur le statut RUNNABLE.

Brève description

AWS Batch passe votre 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 avec le statut RUNNABLE sont lancées lorsqu'il y a suffisamment de ressources disponibles dans l'un des environnements de calcul mappés sur votre file d'attente des tâches. Si les ressources disponibles ne sont pas suffisantes, une tâche peut conserver le statut RUNNABLE indéfiniment.

Si vous utilisez un environnement de calcul géré avec une Amazon Machine Image (AMI) par défaut, votre tâche peut être bloquée sur le statut RUNNABLE pour les motifs suivants :

  • Ressources insuffisantes : votre tâche spécifie plus de ressources de processeur ou mémoire que ce que l'environnement de calcul peut allouer.
  • Aucune instance de conteneur attribuée : les instances ne peuvent pas être créées, et des problèmes de mise en réseau ou de sécurité empêchent l'instance de conteneur de rejoindre le cluster Amazon Elastic Container Service (Amazon ECS) sous-jacent.
  • Des problèmes au niveau de l'hôte : il pourrait y avoir des problèmes au sein de l'instance de conteneur au niveau de l'hôte ou du processus Docker. Par exemple, les volumes de l'instance peuvent être pleins, ou le processus Docker ou un agent de conteneur Amazon ECS peuvent rencontrer des problèmes d'arrêt et de lancement.

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.    Pour Files d'attente de tâches, dans la colonne RUNNABLE, choisissez la file d'attente de la tâche bloquée sur le statut RUNNABLE.

3.    Sélectionnez la tâche bloquée sur le statut RUNNABLE.

4.    Dans Détails de la tâche, dans la sectionEnvironnement, notez les valeurs de vCPU et Mémoire.

5.    Dans le volet de navigation, sélectionnez Environnements de calculs.

6.    Pour l'environnement de calcul dans lequel la tâche doit s'exécuter, vérifiez que Statut a pour valeur VALID et État est défini comme ENABLED.

7.    Vérifiez que Max vCPU est défini sur une valeur suffisamment élevée pour permettre à AWS Batch d'augmenter le Nombre de vCPU souhaité pour exécuter des tâches.

8.    Vérifiez que la valeur de Nombre de vCPU souhaité est identique ou supérieure à la quantité de vCPU requis pour la tâche.

9.    Si la valeur de Nombre de vCPU souhaité est de 0, vérifiez la quantité de ressources de mémoire et de processeur pour votre type d'instance Amazon Elastic Compute Cloud (Amazon EC2). Si la valeur de Nombre de vCPU souhaité est supérieure à 0 ou si votre tâche reste bloquée sur le statut RUNNABLE, suivez la procédure décrite dans la section Vérifier que votre environnement de calcul dispose d'instances et que des instances sont disponibles pour exécuter votre tâche.

Important : au moins un des types d'instances pour votre environnement de calcul doit avoir plus de mémoire que les spécifications de votre tâche. De plus, le type d'instance doit disposer de ressources de processeur qui sont égales ou supérieures aux spécifications de votre tâche. Si au moins un type d'instance ne dispose pas de suffisamment de ressources de processeur ou de mémoire pour exécuter votre tâche, annulez-la. Puis, exécutez une nouvelle tâche qui nécessite moins de processeur ou de mémoire. Sinon, vous pouvez créer un environnement de calcul avec suffisamment de ressources pour exécuter la tâche, puis attribuer la tâche à la file d'attente pertinente.

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 ECS.

2.    Dans le volet de navigation, sélectionnez 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 lettres et de chiffres.

3.    Sélectionnez l'affichageInstances ECS, puis vérifiez que des 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 le statut du processus Daemon et de l'agent de conteneur Amazon ECS. Pour en savoir plus, consultez Pourquoi les 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 ECS, procédez comme suit dans l'une des sections suivantes en fonction de votre environnement de calcul :

  • Vérifier que vos instances peuvent être créées dans un environnement de calcul à la demande
  • Vérifier que vos instances peuvent être créés dans un environnement de calcul ponctuel

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, sélectionnez 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, sélectionnez l'affichage Historique des activités, puis cherchez tout problème pouvant causer un 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 d'erreur 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. Évitez de modifier les groupes Auto Scaling manuellement, au risque de rendre votre environnement de calcul INVALID. Pour plus d'informations sur les limites d'instance et comment demander une augmentation, consultez Amazon EC2 Service Quotas.

Si les événements les plus récents du groupe Auto Scaling ont tous réussi, suivez la procédure de la section Vérifier le rôle IAM de l'instance de conteneur. Vous pourrez alors déterminer pourquoi votre instance n'a pas rejoint le cluster ECS.

Vérifier que vos instances peuvent être créés dans un environnement de calcul ponctuel

1.    Ouvrez la console Amazon EC2.

2.    Dans le volet de navigation, pour Instances, sélectionnez Demandes ponctuelles.

3.    Dans le filtre, pour Request type (Type de demande), sélectionnez fleet (flotte).

4.    Pour Statut, sélectionnez active (actif).

5.    Sélectionnez Description, puis recherchez la valeur de Capacité cible totale pour voir si la demande de l'instance Spot a été exécutée. Si aucune instance n'a été créée, cherchez dans l'affichage Historique un message qui pourrait expliquer pourquoi. Par exemple, les demandes qui n'ont pas atteint le prix d'offre renvoient un message d'erreur similaire à 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 et assurez-vous 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 INVALID.

Si les événements les plus récents du groupe Auto Scaling ont tous réussi, suivez la procédure de la section Vérifier le rôle IAM de l'instance de conteneur.

Vérifier le 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, puis votre environnement de calcul.

3.    Dans la section Détails de l'environnement de calcul, notez le nom du rôle d'instance.

4.    Ouvrez la console AWS Identity and Access Management (IAM).

5.    Dans la zone de recherche, recherchez le nom de votre rôle d'instance, puis sélectionnez-le dans les résultats.

6.    Sélectionnez l'affichage Autorisations, puis vérifiez que la stratégie AmazonEC2ContainerServiceforEC2Role est associée au rôle. Si la stratégie est associée, votre rôle d'instance est bien configuré et vous pouvez passer à l'étape 11.

7.    Choisissez Associer des stratégies.

8.    Dans la zone de recherche, saisissez AmazonEC2ContainerServiceforEC2Role.

9.    Pour la stratégie AmazonEC2ContainerServiceforEC2Role, cochez la case, puis sélectionnez Attacher la stratégie.

10.    Sélectionnez l'affichage Relations d'approbation, puis Modifier la relation d'approbation.

11.    Vérifiez que la relation d'approbation contient la stratégie 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 stratégie de l'exemple précédent, sélectionnez Annuler. Si la relation d'approbation ne correspond pas à la stratégie dans l'exemple précédent, copiez la stratégie dans la console Document de stratégie. Puis, sélectionnez Mettre à jour la stratégie de confiance.

Si votre instance ne rejoint toujours pas le cluster ECS, suivez la procédure de la sectionVérifier les paramètres de réseau et sécurité de l'environnement de calcul.

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

1.    Ouvrez la console AWS Batch.

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

3.    Dans la section Ressources de calcul, notez la valeur 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, sélectionnezSous-réseaux.

6.    Pour chaque sous-réseau dans l'environnement de calcul, sélectionnez Description, puis vérifiez la valeur de la propriété Attribution automatique d'une adresse IPv4 publique.

Si la valeur est Oui, les instances lancées sur le sous-réseau disposeront des éléments suivants : une adresse IPv4 publique, une table de routage avec une destination de 0.0.0.0/0, et une passerelle Internet définie sur Cible (par exemple, igw-1a2b3c4d).

Si la valeur est Non, les instances lancées sur le sous-réseau disposeront des éléments suivants : une adresse IPv4 privée, une table de routage avec une destination de 0.0.0.0/0, et une passerelle NAT définie sur Cible (par exemple, nat-12345678901234567). Pour en savoir plus, 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, sélectionnez l'affichageRègles sortantes, puis vérifiez qu'une règle comprenant les paramètres suivants existe :
Pour Type, sélectionnez TOUT le trafic.
Pour Protocole, sélectionnez TOUT.
Pour Plage de ports, sélectionnez TOUT.
Pour Destination, sélectionnez 0.0.0.0/0.

Important : si la règle n'existe pas, sélectionnez Modifier, puis créez la règle. Si vous souhaitez une règle plus restrictive pour le trafic sortant, sélectionnez HTTPS (443) pour Type et 0.0.0.0/0 for Destination.

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

10.    Sélectionnez la liste de contrôle d'accès (ACL) du VPC spécifié dans l'environnement de calcul.

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é pour votre VPC et 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 ?