Tutoriel : Utilisation de l'index de tâches matriciel pour contrôler la différenciation des tâches - AWS Batch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel : Utilisation de l'index de tâches matriciel pour contrôler la différenciation des tâches

Ce didacticiel explique comment utiliser la variable d'AWS_BATCH_JOB_ARRAY_INDEXenvironnement pour différencier les emplois pour enfants. Chaque tâche enfant est affectée à cette variable. L'exemple utilise le numéro d'index de la tâche enfant pour lire une ligne spécifique dans un fichier. Ensuite, il remplace le paramètre associé à ce numéro de ligne par une commande dans le conteneur de la tâche. Le résultat est que vous pouvez avoir plusieurs AWS Batch tâches qui exécutent la même image Docker et les mêmes arguments de commande. Cependant, les résultats sont différents car l'index des tâches du tableau est utilisé comme modificateur.

Dans ce didacticiel, vous créez un fichier texte qui contient toutes les couleurs de l'arc-en-ciel, chacune sur sa propre ligne. Vous créez ensuite un script de point d'entrée pour un conteneur Docker qui convertit l'index en une valeur pouvant être utilisée comme numéro de ligne dans le fichier couleur. L'indice commence à zéro, mais les numéros de ligne commencent à un. Créez un Dockerfile qui copie les fichiers de couleur et d'index sur l'image du conteneur et définit ENTRYPOINT l'image dans le script du point d'entrée. Le Dockerfile et les ressources sont créés à partir d'une image Docker transmise à Amazon. ECR Vous enregistrez ensuite une définition de tâche qui utilise votre nouvelle image de conteneur, vous soumettez une tâche AWS Batch matricielle avec cette définition de tâche et vous visualisez les résultats.

Prérequis

Ce didacticiel nécessite la configuration suivante :

Étape 1 : Création d'une image de conteneur

Vous pouvez utiliser le AWS_BATCH_JOB_ARRAY_INDEX dans une définition de tâche dans le paramètre de commande. Toutefois, nous vous recommandons de créer une image de conteneur qui utilise plutôt la variable dans un script de point d'entrée. Cette section décrit comment créer une image de conteneur de ce type.

Pour créer votre image de conteneur Docker
  1. Créez un répertoire à utiliser en tant qu'espace de travail de votre image Docker et accédez à celui-ci.

  2. Créez un fichier nommé colors.txt dans le répertoire de votre espace de travail et collez-y le texte suivant.

    red orange yellow green blue indigo violet
  3. Créez un fichier nommé print-color.sh dans le répertoire de votre espace de travail et collez-y le texte suivant.

    Note

    La variable LINE est définie sur le code AWS_BATCH_JOB_ARRAY_INDEX + 1 car l'index de tableau commence à 0 mais les numéros de ligne commencent à 1. La COLOR variable est définie sur la couleur associée à son numéro de ligne. colors.txt

    #!/bin/sh LINE=$((AWS_BATCH_JOB_ARRAY_INDEX + 1)) COLOR=$(sed -n ${LINE}p /tmp/colors.txt) echo My favorite color of the rainbow is $COLOR.
  4. Créez un fichier nommé Dockerfile dans le répertoire de votre espace de travail et collez-y le contenu suivant. Ce Dockerfile copie les fichiers précédents vers votre conteneur et définit le script de point d'entrée à exécuter au lancement du conteneur.

    FROM busybox COPY print-color.sh /tmp/print-color.sh COPY colors.txt /tmp/colors.txt RUN chmod +x /tmp/print-color.sh ENTRYPOINT /tmp/print-color.sh
  5. Générez votre image Docker.

    $ docker build -t print-color .
  6. Testez votre conteneur avec le script suivant. Ce script définit la AWS_BATCH_JOB_ARRAY_INDEX variable sur 0 localement, puis l'incrémente pour simuler ce que fait une tâche matricielle avec sept enfants.

    $ AWS_BATCH_JOB_ARRAY_INDEX=0 while [ $AWS_BATCH_JOB_ARRAY_INDEX -le 6 ] do docker run -e AWS_BATCH_JOB_ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX print-color AWS_BATCH_JOB_ARRAY_INDEX=$((AWS_BATCH_JOB_ARRAY_INDEX + 1)) done

    En voici la sortie.

    My favorite color of the rainbow is red.
    My favorite color of the rainbow is orange.
    My favorite color of the rainbow is yellow.
    My favorite color of the rainbow is green.
    My favorite color of the rainbow is blue.
    My favorite color of the rainbow is indigo.
    My favorite color of the rainbow is violet.

Étape 2 : envoyez votre image sur Amazon ECR

Maintenant que vous avez créé et testé votre conteneur Docker, transférez-le vers un référentiel d'images. Cet exemple utilise AmazonECR, mais vous pouvez utiliser un autre registre, tel que DockerHub.

  1. Créez un référentiel d'ECRimages Amazon pour stocker l'image de votre conteneur. Cet exemple utilise uniquement le AWS CLI, mais vous pouvez également utiliser le AWS Management Console. Pour plus d'informations, consultez la section Création d'un référentiel dans le guide de l'utilisateur d'Amazon Elastic Container Registry.

    $ aws ecr create-repository --repository-name print-color
  2. Marquez votre print-color image avec votre ECR référentiel URI Amazon renvoyé à l'étape précédente.

    $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
  3. Connectez-vous à votre ECR registre Amazon. Pour plus d'informations, veuillez consulter Authentification de registre dans le Guide de l'utilisateur Amazon Elastic Container Registry.

    $ aws ecr get-login-password \ --region region | docker login \ --username AWS \ --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  4. Transférez votre image sur AmazonECR.

    $ docker push aws_account_id.dkr.ecr.region.amazonaws.com/print-color

Étape 3 : créer et enregistrer une définition de tâche

Maintenant que votre image Docker se trouve dans un registre d'images, vous pouvez la spécifier dans une définition de AWS Batch tâche. Vous pourrez ensuite l'utiliser ultérieurement pour exécuter une tâche matricielle. Cet exemple utilise uniquement le AWS CLI. Cependant, vous pouvez également utiliser le AWS Management Console. Pour de plus amples informations, veuillez consulter Création d'une définition de tâche à nœud unique .

Pour créer une définition de tâche
  1. Créez un fichier nommé print-color-job-def.json dans le répertoire de votre espace de travail et collez-y le texte suivant. Remplacez le référentiel d'images URI par celui de votre propre imageURI.

    { "jobDefinitionName": "print-color", "type": "container", "containerProperties": { "image": "aws_account_id.dkr.ecr.region.amazonaws.com/print-color", "resourceRequirements": [ { "type": "MEMORY", "value": "250" }, { "type": "VCPU", "value": "1" } ] } }
  2. Enregistrez la définition de tâche auprès de AWS Batch.

    $ aws batch register-job-definition --cli-input-json file://print-color-job-def.json

Étape 4 : Soumettre une tâche AWS Batch de matrice

Après avoir enregistré votre définition de tâche, vous pouvez soumettre une tâche AWS Batch matricielle utilisant votre nouvelle image de conteneur.

Pour soumettre une tâche AWS Batch matricielle
  1. Créez un fichier nommé print-color-job.json dans le répertoire de votre espace de travail et collez-y le texte suivant.

    Note

    Cet exemple utilise la file d'attente des tâches mentionnée dans la Prérequis section.

    { "jobName": "print-color", "jobQueue": "existing-job-queue", "arrayProperties": { "size": 7 }, "jobDefinition": "print-color" }
  2. Soumettez le travail à votre AWS Batch file d'attente. Notez l'ID de tâche renvoyé dans la sortie.

    $ aws batch submit-job --cli-input-json file://print-color-job.json
  3. Décrivez l'état de la tâche et attendez que la tâche passe à SUCCEEDED.

Étape 5 : Afficher les journaux des tâches de votre matrice

Une fois que votre tâche a atteint le SUCCEEDED statut, vous pouvez consulter les CloudWatch journaux depuis le conteneur de la tâche.

Pour consulter les journaux de votre travail dans CloudWatch Logs
  1. Ouvrez la AWS Batch console à l'adresse https://console.aws.amazon.com/batch/.

  2. Dans le panneau de navigation de gauche, choisissez Tâches.

  3. Pour Files d'attente, sélectionnez une file d'attente.

  4. Dans la section État, choisissez succès.

  5. Pour afficher toutes les tâches enfants de votre tâche de tableau, sélectionnez l'ID de tâche qui a été renvoyé à la section précédente.

  6. Pour afficher les journaux du conteneur de la tâche, sélectionnez l'une des tâches enfants et choisissez Afficher les journaux.

    Journaux des conteneurs de tâches Array
  7. Affichez les journaux des autres tâches enfants. Chaque tâche renvoie une couleur différente de l'arc-en-ciel.