Verwenden Sie Looping-Konstrukte in AWSTOE - EC2Image Builder

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.

Verwenden Sie Looping-Konstrukte in AWSTOE

Dieser Abschnitt enthält Informationen, die Ihnen beim Erstellen von Schleifenkonstrukten in der helfen sollen. AWSTOE Schleifenkonstrukte definieren eine sich wiederholende Folge von Anweisungen. Sie können die folgenden Typen von Schleifenkonstrukten verwenden in: AWSTOE

  • forKonstrukte — Iteriert über eine begrenzte Folge von ganzen Zahlen.

  • forEachKonstrukte

    • forEachSchleife mit Eingabeliste — Iteriert über eine endliche Sammlung von Zeichenketten.

    • forEachSchleife mit begrenzter Liste — Iteriert über eine endliche Sammlung von Zeichenketten, die durch ein Trennzeichen verbunden sind.

Anmerkung

Schleifenkonstrukte unterstützen nur Zeichenkettendatentypen.

Referenz-Iterationsvariablen

Um auf den Index und den Wert der aktuellen Iterationsvariablen zu verweisen, {{ loop.* }} muss der Referenzausdruck im Eingabekörper eines Schritts verwendet werden, der ein Schleifenkonstrukt enthält. Dieser Ausdruck kann nicht verwendet werden, um auf die Iterationsvariablen des Schleifenkonstrukts eines anderen Schritts zu verweisen.

Der Referenzausdruck besteht aus den folgenden Elementen:

  • {{ loop.index }}— Die Ordinalposition der aktuellen Iteration, die indexiert ist. 0

  • {{ loop.value }}— Der Wert, der der aktuellen Iterationsvariablen zugeordnet ist.

Namen von Schleifen

Alle Schleifenkonstrukte haben ein optionales Namensfeld zur Identifizierung. Wenn ein Schleifenname angegeben wird, kann er verwendet werden, um auf Iterationsvariablen im Eingabekörper des Schritts zu verweisen. Um auf die Iterationsindizes und Werte einer benannten Schleife zu verweisen, verwenden Sie {{ <loop_name>.* }} with {{ loop.* }} im Eingabebereich des Schritts. Dieser Ausdruck kann nicht verwendet werden, um auf das benannte Schleifenkonstrukt eines anderen Schritts zu verweisen.

Der Referenzausdruck besteht aus den folgenden Elementen:

  • {{ <loop_name>.index }}— Die Ordinalposition der aktuellen Iteration der benannten Schleife, die indexiert ist. 0

  • {{ <loop_name>.value }}— Der Wert, der der aktuellen Iterationsvariablen der benannten Schleife zugeordnet ist.

Referenzausdrücke auflösen

Der AWSTOE löst Referenzausdrücke wie folgt auf:

  • {{ <loop_name>.* }}— AWSTOE löst diesen Ausdruck mit der folgenden Logik auf:

    • Wenn die Schleife des aktuell laufenden Schritts mit dem <loop_name> Wert übereinstimmt, wird der Referenzausdruck in das Schleifenkonstrukt des aktuell laufenden Schritts aufgelöst.

    • <loop_name>wird in das benannte Schleifenkonstrukt aufgelöst, wenn es im aktuell laufenden Schritt vorkommt.

  • {{ loop.* }}— AWSTOE löst den Ausdruck unter Verwendung des im aktuell ausgeführten Schritt definierten Schleifenkonstrukts auf.

Wenn Referenzausdrücke innerhalb eines Schritts verwendet werden, der keine Schleife enthält, werden die Ausdrücke AWSTOE nicht aufgelöst und sie erscheinen im Schritt ohne Ersatz.

Anmerkung

Referenzausdrücke müssen in doppelte Anführungszeichen eingeschlossen werden, damit sie vom YAML Compiler korrekt interpretiert werden können.

Arten von Looping-Konstrukten

Dieser Abschnitt enthält Informationen und Beispiele zu Schleifenkonstrukttypen, die in der verwendet werden können. AWSTOE

forSchleife

Die for Schleife iteriert über einen Bereich von ganzen Zahlen, die innerhalb einer Grenze angegeben sind, die durch den Anfang und das Ende der Variablen umrissen wird. Die iterierenden Werte befinden sich in der Menge [start, end] und enthalten Grenzwerte.

AWSTOE überprüft die updateBy Wertestart, undend, um sicherzustellen, dass die Kombination nicht zu einer Endlosschleife führt.

forSchleifenschema

- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
forSchleifeneingabe
Feld Beschreibung Typ Erforderlich Standard

name

Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein.

String

Nein

""

start

Startwert der Iteration. Akzeptiert keine Verkettung von Ausdrücken.

Ganzzahl

Ja

end

Endwert der Iteration. Akzeptiert keine Verkettung von Ausdrücken. Ganzzahl Ja

updateBy

Unterschied, um den ein iterierender Wert durch Addition aktualisiert wird. Es muss ein negativer oder positiver Wert ungleich Null sein. Akzeptiert keine Verkettung von Ausdrücken. Ganzzahl Ja

forBeispiel für eine Schleifeneingabe

- name: "CalculateFileUploadLatencies" action: "ExecutePowerShell" loop: for: start: 100000 end: 1000000 updateBy: 100000 inputs: commands: - | $f = new-object System.IO.FileStream c:\temp\test{{ loop.index }}.txt, Create, ReadWrite $f.SetLength({{ loop.value }}MB) $f.Close() - c:\users\administrator\downloads\latencyTest.exe --file c:\temp\test{{ loop.index }}.txt - AWS s3 cp c:\users\administrator\downloads\latencyMetrics.json s3://bucket/latencyMetrics.json - | Remove-Item -Path c:\temp\test{{ loop.index }}.txt Remove-Item -Path c:\users\administrator\downloads\latencyMetrics.json

forEachSchleife mit Eingabeliste

Die forEach Schleife iteriert anhand einer expliziten Werteliste, bei der es sich um Zeichenketten und verkettete Ausdrücke handeln kann.

forEachSchleife mit Eingabelistenschema

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
forEachSchleife mit Eingabe in die Eingabeliste
Feld Beschreibung Typ Erforderlich Standard

name

Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein.

String

Nein

""

Liste der Zeichenketten der forEach Schleife

Liste der Zeichenketten für die Iteration. Akzeptiert verkettete Ausdrücke als Zeichenketten in der Liste. Verkettete Ausdrücke müssen in doppelte Anführungszeichen eingeschlossen werden, damit der YAML Compiler sie korrekt interpretieren kann.

Liste von Zeichenfolgen

Ja

forEachSchleife mit Eingabeliste, Beispiel 1

- name: "ExecuteCustomScripts" action: "ExecuteBash" loop: name: BatchExecLoop forEach: - /tmp/script1.sh - /tmp/script2.sh - /tmp/script3.sh inputs: commands: - echo "Count {{ BatchExecLoop.index }}" - sh "{{ loop.value }}" - | retVal=$? if [ $retVal -ne 0 ]; then echo "Failed" else echo "Passed" fi

forEachSchleife mit Eingabeliste, Beispiel 2

- name: "RunMSIWithDifferentArgs" action: "ExecuteBinary" loop: name: MultiArgLoop forEach: - "ARG1=C:\Users ARG2=1" - "ARG1=C:\Users" - "ARG1=C:\Users ARG3=C:\Users\Administrator\Documents\f1.txt" inputs: commands: path: "c:\users\administrator\downloads\runner.exe" args: - "{{ MultiArgLoop.value }}"

forEachSchleife mit Eingabeliste, Beispiel 3

- name: "DownloadAllBinaries" action: "S3Download" loop: name: MultiArgLoop forEach: - "bin1.exe" - "bin10.exe" - "bin5.exe" inputs: - source: "s3://bucket/{{ loop.value }}" destination: "c:\temp\{{ loop.value }}"

forEachSchleife mit begrenzter Liste

Die Schleife iteriert über eine Zeichenfolge, die Werte enthält, die durch ein Trennzeichen getrennt sind. Um über die Bestandteile der Zeichenfolge zu iterieren, AWSTOE verwendet sie das Trennzeichen, um die Zeichenfolge in ein Array aufzuteilen, das für die Iteration geeignet ist.

forEachSchleife mit einem durch Trennzeichen getrennten Listenschema

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
forEachSchleife mit begrenzter Listeneingabe
Feld Beschreibung Typ Erforderlich Standard

name

Der Schleife wurde ein eindeutiger Name gegeben. Er sollte im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein.

String

Nein

""

list

Eine Zeichenfolge, die aus einzelnen Zeichenketten besteht, die durch ein gemeinsames Trennzeichen miteinander verbunden sind. Akzeptiert auch verkettete Ausdrücke. Stellen Sie bei verketteten Ausdrücken sicher, dass diese in doppelte Anführungszeichen eingeschlossen sind, damit sie vom Compiler korrekt interpretiert werden können. YAML String

Ja

delimiter

Zeichen, das verwendet wird, um Zeichenketten innerhalb eines Blocks voneinander zu trennen. Die Standardeinstellung ist das Kommazeichen. Aus der angegebenen Liste ist nur ein Trennzeichen zulässig:
  • Punkt: "."

  • Komma: ","

  • Semikolon: ";"

  • Doppelpunkt: ":"

  • Neue Zeile: "\n"

  • Registerkarte: "\t"

  • Leertaste: " "

  • Bindestrich: "-"

  • Unterstrich: "_"

Verkettungsausdrücke können nicht verwendet werden.

String Nein Komma: ","
Anmerkung

Der Wert von list wird als unveränderliche Zeichenfolge behandelt. Wenn die Quelle von während der Laufzeit geändert list wird, wird dies während der Ausführung nicht berücksichtigt.

forEachSchleife mit begrenzter Liste, Beispiel 1

In diesem Beispiel wird das folgende Verkettungsausdrucksmuster verwendet, um auf die Ausgabe eines anderen Schritts zu verweisen:. <phase_name>.<step_name>.[inputs | outputs].<var_name>

- name: "RunMSIs" action: "ExecuteBinary" loop: forEach: list: "{{ build.GetAllMSIPathsForInstallation.outputs.stdout }}" delimiter: "\n" inputs: commands: path: "{{ loop.value }}"

forEachSchleife mit begrenzter Liste, Beispiel 2

- name: "UploadMetricFiles" action: "S3Upload" loop: forEach: list: "/tmp/m1.txt,/tmp/m2.txt,/tmp/m3.txt,..." inputs: commands: - source: "{{ loop.value }}" destination: "s3://bucket/key/{{ loop.value }}"

Felder für Schritte

Loops sind Teil eines Schritts. Felder, die sich auf die Ausführung eines Schritts beziehen, werden nicht auf einzelne Iterationen angewendet. Schrittfelder gelten wie folgt nur auf Schrittebene:

  • timeoutSeconds— Alle Iterationen der Schleife müssen innerhalb des in diesem Feld angegebenen Zeitraums ausgeführt werden. Wenn bei der Schleifenausführung eine AWSTOE Zeitüberschreitung eintritt, wird die Wiederholungsrichtlinie des Schritts ausgeführt und der Timeout-Parameter für jeden neuen Versuch zurückgesetzt. Wenn der Schleifenlauf nach Erreichen der maximalen Anzahl von Wiederholungen den Timeout-Wert überschreitet, gibt die Fehlermeldung des Schritts an, dass für den Schleifenlauf eine Zeitüberschreitung aufgetreten ist.

  • onFailure— Die Fehlerbehandlung wird wie folgt auf den Schritt angewendet:

    • Wenn auf gesetzt onFailureistAbort, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als fehlgeschlagen und beendet die Ausführung des Prozesses.

      AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument aufFailed.

      Anmerkung

      Nach dem fehlgeschlagenen Schritt werden keine weiteren Schritte ausgeführt.

    • Wenn auf gesetzt onFailureistContinue, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als fehlgeschlagen und fährt mit der Ausführung des nächsten Schritts fort.

      AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument aufFailed.

    • Wenn auf gesetzt onFailureistIgnore, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert nach der maximalen Anzahl von Wiederholungsversuchen den aktuellen Schritt als IgnoredFailure und fährt mit der Ausführung des nächsten Schritts fort.

      AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument aufSuccessWithIgnoredFailure.

      Anmerkung

      Dies wird immer noch als erfolgreiche Ausführung angesehen, enthält jedoch Informationen, die Sie darüber informieren, dass ein oder mehrere Schritte fehlgeschlagen sind und ignoriert wurden.

  • maxAttempts — Bei jedem erneuten Versuch werden der gesamte Schritt und alle Iterationen von Anfang an ausgeführt.

  • Status — Der Gesamtstatus der Ausführung eines Schritts. statusstellt nicht den Status einzelner Iterationen dar. Der Status eines Schritts mit Schleifen wird wie folgt bestimmt:

    • Wenn eine einzelne Iteration nicht ausgeführt werden kann, weist der Status eines Schritts auf einen Fehler hin.

    • Wenn alle Iterationen erfolgreich sind, deutet der Status eines Schritts auf Erfolg hin.

  • startTime — Die Gesamtstartzeit der Ausführung eines Schritts. Stellt nicht die Startzeit einzelner Iterationen dar.

  • endTime — Die Gesamtendzeit der Ausführung eines Schritts. Stellt nicht die Endzeit einzelner Iterationen dar.

  • failureMessage — Schließt die Iterationsindizes ein, die bei Fehlern ohne Timeout fehlgeschlagen sind. Bei Timeoutfehlern gibt die Meldung an, dass der Schleifenlauf fehlgeschlagen ist. Einzelne Fehlermeldungen für jede Iteration werden nicht bereitgestellt, um die Größe der Fehlermeldungen zu minimieren.

Ausgaben für Schritt und Iteration

Jede Iteration enthält eine Ausgabe. Am Ende eines Schleifenlaufs AWSTOE konsolidiert es alle erfolgreichen Iterationsausgaben in. detailedOutput.json Die konsolidierten Ausgaben sind eine Zusammenstellung von Werten, die zu den entsprechenden Ausgabeschlüsseln gehören, wie sie im Ausgabeschema des Aktionsmoduls definiert sind. Das folgende Beispiel zeigt, wie die Ausgaben konsolidiert werden:

Ausgabe von ExecuteBash für Iteration 1

{ "stdout":"Hello" }

Ausgabe von ExecuteBash für Iteration 2

{ "stdout":"World" }

Ausgabe von ExecuteBash für Schritt

{ "stdout":"Hello\nWorld" }

Zum Beispiel ExecuteBinary sind ExecuteBashExecutePowerShell, und Aktionsmodule, die STDOUT als Aktionsmodulausgabe zurückgegeben werden. STDOUTNachrichten werden mit dem neuen Zeilenzeichen verknüpft, um die Gesamtausgabe des Step-In zu erzeugendetailedOutput.json.

AWSTOE konsolidiert nicht die Ausgaben erfolgloser Iterationen.