

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.

# Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions
<a name="tutorial-create-iterate-pattern-section"></a>

In diesem Tutorial implementieren Sie ein Entwurfsmuster, das einen Zustandsautomaten und eine AWS Lambda -Funktion verwendet, um eine bestimmte Anzahl von Schleifendurchgängen durchzuführen. 

Verwenden Sie dieses Entwurfsmuster stets, wenn Sie die Anzahl der Schleifen in einem Zustandsautomaten nachverfolgen müssen. Diese Implementierung kann dabei helfen, größere Aufgaben oder lange andauernde Ausführungen in kleinere Datenmengen aufzubrechen oder eine Ausführung nach einer bestimmten Anzahl von Ereignissen zu beenden. Sie können eine ähnliche Implementierung verwenden, um eine Ausführung mit langer Laufzeit regelmäßig zu beenden und neu zu starten, um zu verhindern, dass die Dienstkontingente für AWS Step Functions AWS Lambda, oder andere AWS Dienste überschritten werden.

Bevor Sie beginnen, sollten Sie das [Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet](tutorial-creating-lambda-state-machine.md) Tutorial durchgehen, um sicherzustellen, dass Sie mit der gemeinsamen Verwendung von Lambda und Step Functions vertraut sind.

## Schritt 1: Erstellen Sie eine Lambda-Funktion, um eine Zählung zu iterieren
<a name="create-iterate-pattern-step-1"></a>

Mithilfe einer Lambda-Funktion können Sie die Anzahl der Iterationen einer Schleife in Ihrer Zustandsmaschine verfolgen. Die folgende Lambda-Funktion empfängt Eingabewerte für `count``index`, und`step`. Sie gibt diese Werte mit einem aktualisierten `index` und einem Booleschen Wert namens `continue` zurück. Die Lambda-Funktion wird `continue` auf gesetzt, `true` wenn der kleiner als `index` `count` ist.

Ihr Zustandsautomat implementiert dann einen `Choice`-Zustand, der eine bestimmte Anwendungslogik ausführt, wenn `continue` gleich `true` ist, oder sich beendet, wenn es `false` ist.

### So erstellen Sie die Lambda-Funktion:
<a name="create-iterate-pattern-create-lambda-function"></a>

1. Melden Sie sich bei der [Lambda-Konsole](https://console.aws.amazon.com/lambda/home) an und wählen Sie dann **Create function** aus.

1. Wählen Sie auf der Seite **Create function** die Option **Author from scratch**.

1. Konfigurieren Sie im Abschnitt **Grundinformationen** Ihre Lambda-Funktion wie folgt:

   1. Geben Sie für **Function name** (Funktionsname) `Iterator` ein.

   1. Wählen Sie unter **Laufzeit** die Option **Node.js**.

   1. Wählen Sie **unter Standardausführungsrolle ändern** die Option **Neue Rolle mit grundlegenden Lambda-Berechtigungen erstellen** aus.

   1. Wählen Sie **Funktion erstellen**.

1. Kopieren Sie den folgenden Code für die Lambda-Funktion in die **Codequelle**.

   ```
   export const handler = function (event, context, callback) {
     let index = event.iterator.index
     let step = event.iterator.step
     let count = event.iterator.count
    
     index = index + step
    
     callback(null, {
       index,
       step,
       count,
       continue: index < count
     })
   }
   ```

   Dieser Code nimmt Eingabewerte für `count`, `index` und `step` entgegen. Er inkrementiert `index` um den Wert von `step` und gibt diese Werte sowie den Booleschen Wert `continue` zurück. Der Wert von `continue` ist `true`, wenn `index` kleiner als `count` ist.

1. Wählen Sie **Bereitstellen**.

## Schritt 2: Testen Sie die Lambda-Funktion
<a name="create-iterate-pattern-step-2"></a>

Führen Sie Ihre Lambda-Funktion mit numerischen Werten aus, um zu sehen, wie sie in Betrieb ist. Sie können Eingabewerte für Ihre Lambda-Funktion angeben, die eine Iteration nachahmen. 

### Um Ihre Lambda-Funktion zu testen
<a name="create-iterate-pattern-test-lambda-function"></a>

1. Wählen Sie **Test** aus.

1. Geben **Sie im Dialogfeld „Testereignis konfigurieren**“ `TestIterator` in das Feld „**Ereignisname**“ ein.

1. Ersetzen Sie die Beispieldaten durch Folgendes.

   ```
   {
     "Comment": "Test my Iterator function",
     "iterator": {
       "count": 10,
       "index": 5,
       "step": 1
     }
   }
   ```

   Diese Werte ahmen nach, was während einer Iteration aus Ihrem Zustandsautomaten kommt. Die Lambda-Funktion erhöht den Index und kehrt zurück`true`, `continue` wenn der Index kleiner als ist. `count` Für diesen Test wurde der Index bereits auf `5` inkrementiert. Der Test wird auf inkrementiert `6` und `index` auf gesetzt. `continue` `true`

1. Wählen Sie **Erstellen** aus.

1. Wählen Sie **Test**, um Ihre Lambda-Funktion zu testen.

   Die Ergebnisse des Tests werden auf der Registerkarte **Ausführungsergebnisse** angezeigt. 

1. Wählen Sie die Registerkarte **Ausführungsergebnisse**, um die Ausgabe zu sehen.

   ```
   {
     "index": 6,
     "step": 1,
     "count": 10,
     "continue": true
   }
   ```
**Anmerkung**  
Wenn Sie den Wert `index` auf festlegen `9` und erneut testen, werden `index` `false` die Werte auf `10` und `continue` erhöht.

## Schritt 3: Erstellen eines Zustandsautomaten
<a name="create-iterate-pattern-step-3"></a>

**Bevor Sie die Lambda-Konsole verlassen...**  
Kopieren Sie die Lambda-Funktion ARN. Fügen Sie es in eine Notiz ein. Sie benötigen ihn im nächsten Schritt.

Als Nächstes erstellen Sie eine Zustandsmaschine mit den folgenden Zuständen:
+ `ConfigureCount`— Legt Standardwerte für `count``index`, und fest`step`.
+ `Iterator`— Bezieht sich auf die Lambda-Funktion, die Sie zuvor erstellt haben und die in `ConfigureCount` konfigurierten Werte übergeben.
+ `IsCountReached`— Ein Auswahlstatus, der die Schleife fortsetzt oder in den `Done` Status übergeht, basierend auf dem von Ihrer `Iterator` Funktion zurückgegebenen Wert.
+ `ExampleWork`— Ein Stummel für Arbeit, die erledigt werden muss. In diesem Beispiel hat der Workflow einen `Pass` Status, aber in einer echten Lösung würden Sie wahrscheinlich einen `Task` verwenden.
+ `Done`— Endstatus Ihres Workflows.

Um die Zustandsmaschine in der Konsole zu erstellen:

1. Öffnen Sie die [Step Functions Functions-Konsole](https://console.aws.amazon.com/states/home) und wählen Sie dann **Create a State Machine** aus.
**Wichtig**  
Ihr State Machine muss sich in demselben AWS Konto und derselben Region wie Ihre Lambda-Funktion befinden.

1. Wählen Sie die **leere** Vorlage aus.

1. Fügen Sie im **Codebereich** den folgenden JSON-Code ein, der den Zustandsmaschine definiert.

   Weitere Informationen zur Sprache von Amazon States finden Sie unter [State Machine Structure](statemachine-structure.md).

   ```
   {
       "Comment": "Iterator State Machine Example",
       "StartAt": "ConfigureCount",
       "States": {
           
           "ConfigureCount": {
               "Type": "Pass",
               "Result": {
                   "count": 10,
                   "index": 0,
                   "step": 1
               },
               "ResultPath": "$.iterator",
               "Next": "Iterator"
           },
           "Iterator": {
               "Type": "Task",
               "Resource": "arn:aws:lambda:region:123456789012:function:Iterate",
               "ResultPath": "$.iterator",
               "Next": "IsCountReached"
           },
           "IsCountReached": {
               "Type": "Choice",
               "Choices": [
                   {
                       "Variable": "$.iterator.continue",
                       "BooleanEquals": true,
                       "Next": "ExampleWork"
                   }
               ],
               "Default": "Done"
           },
           "ExampleWork": {
               "Comment": "Your application logic, to run a specific number of times",
               "Type": "Pass",
               "Result": {
                 "success": true
               },
               "ResultPath": "$.result",
               "Next": "Iterator"
           },
           "Done": {
               "Type": "Pass",
               "End": true
             
           }
       }
   }
   ```

1. Ersetzen Sie das `Iterator Resource` Feld durch den ARN für Ihre `Iterator` Lambda-Funktion, den Sie zuvor erstellt haben.

1. Wählen Sie **Config** und geben Sie einen **Namen** für Ihre Zustandsmaschine ein, z. `IterateCount` B.
**Anmerkung**  
Die Namen von Zustandsmaschinen, Ausführungen und Aktivitätsaufgaben dürfen nicht länger als 80 Zeichen sein. Diese Namen müssen für Ihr Konto und Ihre AWS Region eindeutig sein und dürfen keine der folgenden Angaben enthalten:  
Leerraum
Platzhalterzeichen () `? *`
Klammerzeichen () `< > { } [ ]`
Sonderzeichen (`" # % \ ^ | ~ ` $ & , ; : /`)
Steuerzeichen (`\\u0000`- `\\u001f` oder `\\u007f` -`\\u009f`).
Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Labels, die Nicht-ASCII-Zeichen enthalten. Da solche Zeichen Amazon CloudWatch daran hindern, Daten zu protokollieren, empfehlen wir, nur ASCII-Zeichen zu verwenden, damit Sie die Step Functions Functions-Metriken verfolgen können.

1. **Akzeptieren Sie als **Typ** den Standardwert Standard.** Wählen Sie für **Berechtigungen** die Option **Neue Rolle erstellen** aus.

1. Wählen Sie **Erstellen** und dann **Bestätigen Sie** die Rollenerstellungen.

## Schritt 4: Starten einer neuen Ausführung
<a name="create-iterate-pattern-step-4"></a>

Nach dem Erstellen des Zustandsautomaten können Sie eine Ausführung starten.

1. Wählen Sie auf der **IterateCount**Seite **Ausführung starten** aus.

1. (Optional) Geben Sie einen benutzerdefinierten Ausführungsnamen ein, um den generierten Standard zu überschreiben.
**Nicht-ASCII-Namen und Protokollierung**  
Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Labels, die Nicht-ASCII-Zeichen enthalten. Da solche Zeichen Amazon CloudWatch daran hindern, Daten zu protokollieren, empfehlen wir, nur ASCII-Zeichen zu verwenden, damit Sie die Step Functions Functions-Metriken verfolgen können.

1. Wählen Sie **Start Execution** aus.

   Eine neue Ausführung Ihres Zustandsautomaten beginnt und zeigt Ihre laufende Ausführung.  
![\[Zustandsdiagramm mit blauem Iteratorstatus, der den Status „In Bearbeitung“ anzeigt.\]](http://docs.aws.amazon.com/de_de/step-functions/latest/dg/images/tutorial-create-iterate-running.png)

   Die Ausführung wird schrittweise inkrementiert, wobei die Anzahl mithilfe Ihrer Lambda-Funktion verfolgt wird. Bei jeder Iteration wird die Beispielarbeit ausgeführt, auf die im `ExampleWork`-Zustand in Ihrem Zustandsautomaten verwiesen wird. 

   Wenn der Zähler die im `ConfigureCount`-Zustand in Ihrem Zustandsautomaten festgelegte Anzahl erreicht hat, verlässt die Ausführung den Durchlauf und wird beendet.   
![\[Das State-Machine-Diagramm zeigt den Status „Iterator“ und „Fertig“ in Grün an, um anzuzeigen, dass beide erfolgreich waren.\]](http://docs.aws.amazon.com/de_de/step-functions/latest/dg/images/tutorial-create-iterate-done.png)