

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
<a name="toe-looping-constructs"></a>

Dieser Abschnitt enthält Informationen, die Ihnen beim Erstellen von Schleifenkonstrukten in der helfen sollen. AWSTOE Schleifenkonstrukte definieren eine sich wiederholende Abfolge von Befehlen. Sie können die folgenden Typen von Schleifenkonstrukten verwenden in: AWSTOE
+ `for`Konstrukte — Iterieren Sie über eine begrenzte Folge von ganzen Zahlen.
+ `forEach`Konstrukte
  + `forEach`Schleife mit Eingabeliste — Iteriert über eine endliche Sammlung von Zeichenketten. 
  + `forEach`Schleife mit begrenzter Liste — Iteriert über eine endliche Sammlung von Zeichenketten, die durch ein Trennzeichen verbunden sind.

**Anmerkung**  
Schleifenkonstrukte unterstützen nur Zeichenkettendatentypen.

**Topics**
+ [Referenz-Iterationsvariablen](#toe-loop-iteration-variables)
+ [Arten von Looping-Konstrukten](#toe-loop-types)
+ [Felder für Schritte](#toe-loop-step-fields)
+ [Ausgaben für Schritt und Iteration](#toe-loop-step-output)

## Referenz-Iterationsvariablen
<a name="toe-loop-iteration-variables"></a>

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
<a name="toe-loop-iteration-variables-names"></a>

 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
<a name="toe-loop-iteration-variables-expressions"></a>

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 Schleifenkonstrukts auf, das im aktuell ausgeführten Schritt definiert wurde.

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.

## Arten von Looping-Konstrukten
<a name="toe-loop-types"></a>

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

**Topics**
+ [`for`Schleife](#toe-loop-types-for)
+ [`forEach`Schleife mit Eingabeliste](#toe-loop-types-foreach)
+ [`forEach`Schleife mit begrenzter Liste](#toe-loop-types-foreach-delimited)

### `for`Schleife
<a name="toe-loop-types-for"></a>

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` Werte`start`, und`end`, um sicherzustellen, dass die Kombination nicht zu einer Endlosschleife führt.

`for`Schleifenschema

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      for:
        start: int
        end: int
        updateBy: int
inputs:
  ...
```


**`for`Schleifeneingabe**  

| Feld | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
|  `name`  | Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |  Zeichenfolge  |  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 | – | 

`for`Beispiel 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
```

### `forEach`Schleife mit Eingabeliste
<a name="toe-loop-types-foreach"></a>

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

`forEach`Schleife mit Eingabelistenschema

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        - "string"
    inputs:
  ...
```


**`forEach`Schleife mit Eingabe in die Eingabeliste**  

| Feld | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
|  `name`  | Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |  Zeichenfolge  |  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  |  –  | 

`forEach`Schleife 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
```

`forEach`Schleife 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 }}"
```

`forEach`Schleife 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 }}"
```

### `forEach`Schleife mit begrenzter Liste
<a name="toe-loop-types-foreach-delimited"></a>

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. 

`forEach`Schleife mit einem durch Trennzeichen getrennten Listenschema

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        list: "string"
        delimiter: ".,;:\n\t -_"
    inputs:
  ...
```


**`forEach`Schleife mit begrenzter Listeneingabe**  

| Feld | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
|  `name`  | Der Schleife wurde ein eindeutiger Name gegeben. Er sollte im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |  Zeichenfolge  |  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 YAML-Compiler korrekt interpretiert werden können. | Zeichenfolge |  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: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-looping-constructs.html) Verkettungsausdrücke können nicht verwendet werden. | Zeichenfolge | 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.

`forEach`Schleife 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 }}"
```

`forEach`Schleife 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
<a name="toe-loop-step-fields"></a>

Loops sind Teil eines Schritts. Felder, die sich auf die Ausführung eines Schritts beziehen, werden nicht auf einzelne Iterationen angewendet. Schrittfelder gelten nur auf Schrittebene, und zwar wie folgt:
+ *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 *onFailure* auf gesetzt ist`Abort`, 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 auf`Failed`.
**Anmerkung**  
Nach dem fehlgeschlagenen Schritt werden keine weiteren Schritte ausgeführt.
  + Wenn *onFailure* auf gesetzt ist`Continue`, 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 auf`Failed`.
  + Wenn *onFailure* auf gesetzt ist`Ignore`, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen 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 auf`SuccessWithIgnoredFailure`.
**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 jeder Wiederholung werden der gesamte Schritt und alle Iterationen von Anfang an ausgeführt.
+ *Status* — Der Gesamtstatus der Ausführung eines Schritts. `status`stellt 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. Es werden keine individuellen Fehlermeldungen für jede Iteration bereitgestellt, um die Größe der Fehlermeldungen zu minimieren.

## Ausgaben für Schritt und Iteration
<a name="toe-loop-step-output"></a>

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 `ExecuteBash``ExecutePowerShell`, und Aktionsmodule, die `STDOUT` als Aktionsmodulausgabe zurückgegeben werden. `STDOUT`Nachrichten werden mit dem neuen Zeilenzeichen verknüpft, um die Gesamtausgabe des Step-In zu erzeugen`detailedOutput.json`.

AWSTOE konsolidiert nicht die Ausgaben erfolgloser Iterationen.