Tutorial: Verwenden des Array-Auftragsindex zur Steuerung der Auftragsbeschränkung - 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: Verwenden des Array-Auftragsindex zur Steuerung der Auftragsbeschränkung

In diesem Tutorial wird beschrieben, wie Sie die AWS_BATCH_JOB_ARRAY_INDEX Umgebungsvariable verwenden, um die untergeordneten Aufträge zu unterscheiden. Jeder untergeordnete Auftrag wird dieser Variablen zugewiesen. Das Beispiel verwendet die Indexnummer des untergeordneten Auftrags, um eine bestimmte Zeile in einer Datei zu lesen. Anschließend ersetzt es den Parameter, der dieser Zeilennummer zugeordnet ist, durch einen Befehl im Container des Auftrags. Das Ergebnis ist, dass Sie mehrere AWS Batch Aufträge haben können, die dasselbe Docker-Image und dieselben Befehlsargumente ausführen. Die Ergebnisse unterscheiden sich jedoch, da der Array-Auftragsindex 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 Einstiegspunktskript für einen Docker-Container, das den Index in einen Wert konvertiert, der für eine Zeilennummer in der Farbdatei verwendet werden kann. Der Index beginnt bei Null, aber Zeilenzahlen beginnen bei Eins. Erstellen Sie eine Docker-Datei, die die Farb- und Indexdateien in das Container-Image kopiert und ENTRYPOINT für das Image auf das Einstiegspunktskript festlegt. Die Dockerfile- und -Ressourcen werden in ein Docker-Image erstellt, das an Amazon ECR übertragen wird. Anschließend registrieren Sie eine Auftragsdefinition, die Ihr neues Container-Image verwendet, senden einen AWS Batch Array-Auftrag mit dieser Auftragsdefinition und zeigen die Ergebnisse an.

Voraussetzungen

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

Schritt 1: Erstellen eines Container-Images

Sie können die AWS_BATCH_JOB_ARRAY_INDEX in einer Auftragsdefinition im -Befehlsparameter verwenden. Wir empfehlen jedoch, ein Container-Image zu erstellen, das stattdessen die Variable in einem Einstiegspunktskript 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 Namen colors.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 Namen print-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. Die COLOR Variable ist auf die Farbe in 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 Namen Dockerfile 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 legt die AWS_BATCH_JOB_ARRAY_INDEX Variable lokal auf 0 fest und erhöht sie dann, um zu simulieren, was ein Array-Auftrag mit sieben untergeordneten Elementen 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: Übertragen Ihres Images an 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, aber Sie können eine andere Registrierung verwenden, z. B. DockerHub.

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

    $ aws ecr create-repository --repository-name print-color
  2. Markieren Sie Ihr print-color Image mit Ihrem Amazon-ECR-Repository-URI, der aus dem vorherigen Schritt zurückgegeben wurde.

    $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
  3. Melden Sie sich bei Ihrer Amazon-ECR-Registrierung 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. Übertragen Sie Ihr Image an Amazon ECR.

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

Schritt 3: Erstellen und Registrieren einer Auftragsdefinition

Nachdem sich Ihr Docker-Image in einer Image-Registrierung befindet, können Sie es in einer - AWS Batch Auftragsdefinition angeben. Anschließend können Sie es später verwenden, um einen Array-Auftrag auszuführen. In diesem Beispiel wird nur verwendet AWS CLI. Sie können jedoch auch die verwenden AWS Management Console. Weitere Informationen finden Sie unter Erstellen einer Auftragsdefinition mit einem Knoten .

So erstellen Sie eine Auftragsdefinition:
  1. Erstellen Sie eine Datei mit dem Namen print-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 Auftragsdefinition bei AWS Batch.

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

Schritt 4: Senden eines AWS Batch Array-Auftrags

Nachdem Sie Ihre Auftragsdefinition registriert haben, können Sie einen AWS Batch Array-Auftrag senden, der Ihr neues Container-Image verwendet.

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

    Anmerkung

    In diesem Beispiel wird die im Voraussetzungen Abschnitt erwähnte Auftragswarteschlange verwendet.

    { "jobName": "print-color", "jobQueue": "existing-job-queue", "arrayProperties": { "size": 7 }, "jobDefinition": "print-color" }
  2. Senden Sie den Auftrag an Ihre 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 Auftrag den SUCCEEDED Status erreicht hat, können Sie die CloudWatch Protokolle aus dem Container des Auftrags anzeigen.

So zeigen Sie die Protokolle Ihres Auftrags in - CloudWatch Protokollen an
  1. Öffnen Sie die - AWS 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.

    
      Containerprotokolle für Array-Aufträge
  7. Zeigen Sie die Protokolle der anderen untergeordneten Protokolle an. Jeder Auftrag gibt eine andere Farbe des Regenbogens zurück.