Tutorial: Den Array-Jobindex zur Steuerung der Jobdifferenzierung verwenden - AWS Batch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Den Array-Jobindex zur Steuerung der Jobdifferenzierung verwenden

In diesem Tutorial wird beschrieben, wie dieAWS_BATCH_JOB_ARRAY_INDEX Umgebungsvariable verwendet wird, um die untergeordneten Jobs zu unterscheiden. Jeder Kinderjob ist dieser Variablen zugewiesen. Das Beispiel verwendet die Indexnummer des untergeordneten Jobs, um eine bestimmte Zeile in einer Datei zu lesen. Dann ersetzt es den mit dieser Zeilennummer verknüpften Parameter durch einen Befehl im Container des Jobs. Das Ergebnis ist, dass Sie mehrereAWS Batch Jobs haben können, die dieselben Docker-Image- und Befehlsargumente ausführen. Die Ergebnisse sind jedoch unterschiedlich, da der Array-Jobindex als Modifikator verwendet wird.

In diesem Tutorial erstellen Sie eine Textdatei, die – jeweils in einer eigenen Zeile stehend – alle Farben des Regenbogens umfasst. Anschließend erstellen Sie ein Einstiegsskript für einen Docker-Container, das den Index in einen Wert umwandelt, der für eine Zeilennummer in der Farbdatei verwendet werden kann. Der Index beginnt bei Null, aber Zeilennummern beginnen bei eins. Erstellen Sie ein Dockerfile, das die Farb- und Indexdateien in das Container-Image kopiert undENTRYPOINT für das Bild das Entrypoint-Skript festlegt. Das Dockerfile und die Ressourcen werden in einem Docker-Image erstellt, das an Amazon ECR übertragen wird. Anschließend registrieren Sie eine Auftragsdefinition, die das neue Container-Image verwendet, einen AWS Batch-Array-Auftrag mit dieser Auftragsdefinition übermitteln und die Ergebnisse anzeigen.

Voraussetzungen

Für dieses Tutorial müssen die folgenden Voraussetzungen erfüllt sein:

  • Eine AWS Batch-Datenverarbeitungsumgebung. Weitere Informationen finden Sie unter Eine Rechenumgebung erstellen.

  • Eine AWS Batch-Auftragswarteschlange und zugehörige Datenverarbeitungsumgebung. Weitere Informationen finden Sie unter Auftragswarteschlange.

  • Die auf dem lokalen System installierte AWS CLI. Weitere Informationen finden Sie unter Installieren der AWS Command Line Interface im AWS Command Line Interface-Leitfaden.

  • Das auf dem lokalen System installierte Docker. Weitere Informationen finden Sie unter Über Docker CE in der Docker-Dokumentation.

Schritt 1: Container-Image erstellen

Sie können denAWS_BATCH_JOB_ARRAY_INDEX in einer Jobdefinition im Befehlsparameter verwenden. Wir empfehlen jedoch, dass Sie ein Container-Image erstellen, das die Variable stattdessen in einem Entrypointskript verwendet. In diesem Abschnitt wird beschrieben, wie Sie ein solches Container-Image erstellen.

So erstellen Sie ein Docker-Container-Image:
  1. Erstellen Sie ein neues Verzeichnis zur Verwendung als Docker-Image-Workspace und wechseln Sie dort hin.

  2. Erstellen Sie eine Datei mit dem Namencolors.txt in Ihrem Workspace-Verzeichnis und fügen Sie Folgendes ein.

    red orange yellow green blue indigo violet
  3. Erstellen Sie eine Datei mit dem Namenprint-color.sh in Ihrem Workspace-Verzeichnis und fügen Sie Folgendes ein.

    Anmerkung

    Für die LINE-Variable ist AWS_BATCH_JOB_ARRAY_INDEX + 1 festgelegt, da der Array-Index bei 0 beginnt, die Zeilennummern aber bei 1. DieCOLOR Variable ist auf die Farbe gesetztcolors.txt, die ihrer Zeilennummer zugeordnet ist.

    #!/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. Erstellen Sie eine Datei mit dem NamenDockerfile in Ihrem Workspace-Verzeichnis und fügen Sie den folgenden Inhalt ein: Diese Docker-Datei kopiert die vorherigen Dateien auf Ihren Container und legt fest, dass das entrypoint-Skript ausgeführt wird, wenn der Container gestartet wird.

    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. Erstellen Sie das Docker-Image.

    docker build -t print-color .
  6. Testen Sie den Container mit dem folgenden Skript. Dieses Skript setzt dieAWS_BATCH_JOB_ARRAY_INDEX Variable lokal auf 0 und erhöht sie dann, um zu simulieren, was ein Array-Job mit sieben untergeordneten Objekten tut.

    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

    Im Folgenden wird die Ausgabe dargestellt.

    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.

Schritt 2: Senden Sie Ihr Image zu Amazon ECR

Nachdem Sie Ihren Docker-Container erstellt und getestet haben, verschieben Sie ihn in ein Image-Repository. In diesem Beispiel wird Amazon ECR verwendet, Sie können jedoch eine andere Registrierung verwenden, z. DockerHub B.

  1. Erstellen Sie ein Amazon ECR-Image-Repository, um Ihr Container-Image zu speichern. In diesem Beispiel wird nur der verwendetAWS CLI, Sie können aber auch den verwendenAWS Management Console. Weitere Informationen finden Sie unter Erstellen eines Repositorys im Benutzerhandbuch von Amazon Elastic Container Registry.

    aws ecr create-repository --repository-name print-color
  2. Kennzeichnen Sie Ihrprint-color Bild mit Ihrer Amazon ECR-Repository-URI, die im vorherigen Schritt zurückgegeben wurde.

    docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
  3. Melden Sie sich in Ihre Amazon-ECR-Registry an. Weitere Informationen finden Sie unter Registry-Authentifizierung im Benutzerhandbuch zu 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. Verschieben Sie Ihr Image zu Amazon ECR.

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

Schritt 3: Erstellen und Registrieren einer Auftragsdefinition

Jetzt, da sich Ihr Docker-Image in einer Image-Registrierung befindet, können Sie es in einerAWS Batch Jobdefinition angeben. Dann können Sie es später verwenden, um einen Array-Auftrag auszuführen. In diesem Beispiel wird nur der verwendetAWS CLI. Sie können auch die verwendenAWS Management Console. Weitere Informationen finden Sie unter Erstellen einer Definition für Auftragsdefinition mit einzelnen Knoten .

So erstellen Sie eine Auftragsdefinition:
  1. Erstellen Sie eine Datei mit dem Namenprint-color-job-def.json in Ihrem Workspace-Verzeichnis und fügen Sie Folgendes ein. Ersetzen Sie den Image-Repository-URI durch den URI des Bildes.

    { "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. Registrieren Sie die Jobdefinition beiAWS Batch.

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

Schritt 4: EinenAWS Batch Array-Job einreichen

Nachdem Sie Ihre Jobdefinition registriert haben, können Sie einenAWS Batch Array-Job einreichen, der Ihr neues Container-Image verwendet.

So übermitteln Sie einen AWS Batch-Array-Auftrag:
  1. Erstellen Sie eine Datei mit dem Namenprint-color-job.json in Ihrem Workspace-Verzeichnis und fügen Sie Folgendes ein.

    Anmerkung

    In diesem Beispiel wird der Standardname der Auftragswarteschlange vorausgesetzt, der vom Assistenten für dieAWS Batch erste Ausführung erstellt wurde. Wenn sich der Auftragswarteschlangenname unterscheidet, ersetzen Sie den first-run-job-queue-Namen durch den Namen der Auftragswarteschlange.

    { "jobName": "print-color", "jobQueue": "first-run-job-queue", "arrayProperties": { "size": 7 }, "jobDefinition": "print-color" }
  2. Senden Sie den Auftrag an die AWS Batch-Auftragswarteschlange. Notieren Sie sich die Auftrags-ID, die in der Ausgabe zurückgegeben wird.

    aws batch submit-job --cli-input-json file://print-color-job.json
  3. Beschreiben Sie den Status des Auftrags und warten Sie, bis der Auftrag den Status SUCCEEDED erhält.

Schritt 5: Anzeigen Ihrer Array-Auftragsprotokolle

Nachdem Ihr Job denSUCCEEDED Status erreicht hat, können Sie die CloudWatch Protokolle im Container des Jobs einsehen.

Um die Logs Ihres Jobs in CloudWatch Logs einzusehen
  1. Öffnen Sie dieAWS Batch Konsole unter https://console.aws.amazon.com/batch/.

  2. Wählen Sie im linken Navigationsbereich Aufträge aus.

  3. Wählen Sie für Auftragswarteschlange eine Warteschlange aus.

  4. Wählen Sie im Bereich Status die Option erfolgreich aus.

  5. Zum Anzeigen aller untergeordneten Aufträge für den Array-Auftrag wählen Sie die Auftrags-ID aus, die im vorherigen Abschnitt zurückgegeben wurde.

  6. Zum Anzeigen der Protokolle aus dem Container des Auftrags wählen Sie einen der untergeordneten Aufträge und dann die Option Protokolle anzeigen aus.

  7. Zeigen Sie die Protokolle der anderen untergeordneten Protokolle an. Jeder Auftrag gibt eine andere Farbe des Regenbogens zurück.