

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 einer Lambda-Funktion, um eine neue Ausführung in Step Functions fortzusetzen
<a name="tutorial-use-lambda-cont-exec"></a>

**Tipp**  
Der folgende Ansatz verwendet eine Lambda-Funktion, um eine neue Workflow-Ausführung zu starten. Wir **empfehlen**, den Status Step Functions Task zu verwenden, um neue Workflow-Ausführungen zu starten. Wie das geht, erfahren Sie im folgenden Tutorial: **[Setzen Sie lang andauernde Workflows mit der Step Functions API fort (empfohlen)](tutorial-continue-new.md)**.

Sie können eine Zustandsmaschine erstellen, die eine Lambda-Funktion verwendet, um eine neue Ausführung zu starten, bevor die aktuelle Ausführung beendet wird. Mit diesem Ansatz zur Fortsetzung der laufenden Arbeit in einer neuen Ausführung können Sie große Jobs in kleinere Workflows aufteilen oder einen Workflow auf unbestimmte Zeit ausführen.

Dieses Tutorial baut auf dem Konzept auf, eine externe Lambda-Funktion zur Änderung Ihres Workflows zu verwenden, das im [Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions](tutorial-create-iterate-pattern-section.md) Tutorial demonstriert wurde. Sie verwenden dieselbe Lambda-Funktion (`Iterator`), um eine Schleife für eine bestimmte Anzahl von Malen zu iterieren. Darüber hinaus erstellen Sie eine weitere Lambda-Funktion, um eine neue Ausführung Ihres Workflows zu starten und bei jedem Start einer neuen Ausführung eine Anzahl zu verringern. Indem die Anzahl der Ausführungen in der Eingabe festgelegt wird, beendet dieser Zustandsautomat eine Ausführung mit der angegebenen Häufigkeit und startet sie neu.

Der Zustandsautomat, den Sie erstellen, implementiert die folgenden Zustände.


| Status | Zweck | 
| --- | --- | 
| `ConfigureCount` |  Ein `Pass` Zustand, der die `step` Werte, und konfiguriert `count``index`, die die `Iterator` Lambda-Funktion verwendet, um schrittweise Arbeitsiterationen zu durchlaufen.  | 
|  `Iterator`  |  Ein `Task` Zustand, der auf die `Iterator` Lambda-Funktion verweist.  | 
| `IsCountReached` | Ein Choice Zustand, der anhand eines booleschen Werts aus der Iterator Funktion entscheidet, ob die Zustandsmaschine die Beispielarbeit fortsetzen oder in den Status wechseln soll. ShouldRestart | 
| `ExampleWork` | Ein Pass Zustand, der den Task Status darstellt, der in einer tatsächlichen Implementierung Arbeit verrichten würde. | 
| `ShouldRestart` | Ein Choice Zustand, der anhand des executionCount Werts entscheidet, ob eine Ausführung beendet und eine andere gestartet oder einfach beendet werden soll.  | 
| `Restart` | Ein Task Zustand, der eine Lambda-Funktion verwendet, um eine neue Ausführung Ihrer Zustandsmaschine zu starten. Wie die Iterator-Funktion dekrementiert auch diese Funktion einen Zähler. Der Restart Status übergibt den dekrementierten Wert der Anzahl an die Eingabe der neuen Ausführung.  | 

## Voraussetzungen
<a name="tutorial-continue-new-prereq"></a>

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="tutorial-continue-new-step-1"></a>

**Anmerkung**  
Wenn Sie das [Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions](tutorial-create-iterate-pattern-section.md) Tutorial abgeschlossen haben, können Sie diesen Schritt überspringen und diese Lambda-Funktion verwenden.

Dieser Abschnitt und das [Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions](tutorial-create-iterate-pattern-section.md) Tutorial zeigen, wie Sie eine Lambda-Funktion verwenden können, um eine Anzahl zu verfolgen, z. B. die Anzahl der Iterationen einer Schleife in Ihrer Zustandsmaschine. 

 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 `true` für `continue` angegeben ist, oder mit `ShouldRestart` fortfährt, wenn `false` für `continue` angegeben ist.

### Erstellen Sie die Funktion Iterate Lambda
<a name="tutorial-continue-new-create-lambda-function"></a>

1. Öffnen Sie die [Lambda-Konsole](https://console.aws.amazon.com/lambda/home) und wählen Sie **Create function (Funktion erstellen)** 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 16.x** aus.

   1. Behalten Sie alle Standardauswahlen auf der Seite bei und wählen Sie dann Funktion **erstellen**.

      Wenn Ihre Lambda-Funktion erstellt wurde, notieren Sie sich ihren Amazon-Ressourcennamen (ARN) in der oberen rechten Ecke der Seite, zum Beispiel:

      ```
      arn:aws:lambda:region:123456789012:function:Iterator
      ```

1. Kopieren Sie den folgenden Code für die Lambda-Funktion in den Abschnitt **Codequelle** der ***Iterator***Seite in der Lambda-Konsole.

   ```
   exports.handler = function iterator (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 **Deploy**, um den Code bereitzustellen.

### Testen Sie die Funktion Iterate Lambda
<a name="tutorial-continue-new-step-1-test"></a>

Um zu sehen, wie Ihre `Iterate`-Funktion arbeitet, führen Sie sie mit numerischen Werten aus. Sie können Eingabewerte für Ihre Lambda-Funktion angeben, die eine Iteration nachahmen, um zu sehen, welche Ausgabe Sie mit bestimmten Eingabewerten erhalten. 

#### Um Ihre Lambda-Funktion zu testen
<a name="tutorial-continue-new-test-lambda-function"></a>

1. Wählen Sie im Dialogfeld **Configure test event** die Option **Create new test event** und geben Sie dann `TestIterator` für **Event name** 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 gibt als zurück`continue`. `true` Wenn der Index nicht geringer ist als `count`, wird `continue` als `false` zurückgegeben. Für diesen Test wurde der Index bereits auf `5` inkrementiert. Die Ergebnisse sollten `index` auf `6` inkrementieren und `continue` auf `true` setzen.

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

1. Vergewissern Sie sich, dass auf der ***Iterator*** Seite in Ihrer Lambda-Konsole aufgeführt **TestIterator**ist, und wählen Sie dann **Test** aus.

   Die Ergebnisse des Tests werden oben auf der Seite angezeigt. Wählen Sie **Details** und sehen Sie sich das Ergebnis an.

   ```
   {
     "index": 6,
     "step": 1,
     "count": 10,
     "continue": true
   }
   ```
**Anmerkung**  
Wenn Sie `index` für diesen Test auf `9` setzen, wird `index` auf `10` inkrementiert und `continue` ist `false`. 

## Schritt 2: Erstellen Sie eine Lambda-Funktion neu starten, um eine neue Step Functions Functions-Ausführung zu starten
<a name="tutorial-continue-new-step-3"></a>

1. Öffnen Sie die [Lambda-Konsole](https://console.aws.amazon.com/lambda/home) und wählen Sie **Create function (Funktion erstellen)** 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) `Restart` ein.

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

1. Behalten Sie alle Standardauswahlen auf der Seite bei und wählen Sie dann Funktion **erstellen**.

   Wenn Ihre Lambda-Funktion erstellt wurde, notieren Sie sich ihren Amazon-Ressourcennamen (ARN) in der oberen rechten Ecke der Seite, zum Beispiel:

   ```
   arn:aws:lambda:region:123456789012:function:Iterator
   ```

1. Kopieren Sie den folgenden Code für die Lambda-Funktion in den Abschnitt **Codequelle** der ***Restart***Seite in der Lambda-Konsole.

   Der folgende Code dekrementiert einen Zähler für die Ausführungsanzahl und startet eine neue Ausführung Ihres Zustandsautomaten, einschließlich des dekrementierten Wertes.

   ```
   var aws = require('aws-sdk');
   var sfn = new aws.StepFunctions();
   
   exports.restart = function(event, context, callback) {
   
     let StateMachineArn = event.restart.StateMachineArn;
     event.restart.executionCount -= 1;
     event = JSON.stringify(event);
   
     let params = {
         input: event,
         stateMachineArn: StateMachineArn
     };
   
     sfn.startExecution(params, function(err, data) {
         if (err) callback(err);
         else callback(null,event);
     });
   
   }
   ```

1. Wählen Sie **Deploy**, um den Code bereitzustellen.

## Schritt 3: Erstellen Sie eine Zustandsmaschine
<a name="tutorial-continue-new-step-4"></a>

Nachdem Sie Ihre beiden Lambda-Funktionen erstellt haben, erstellen Sie eine Zustandsmaschine. In diesem Zustandsautomaten benennen die Zustände `ShouldRestart` und `Restart` die Art und Weise, wie Sie Ihre Arbeit auf mehrere Ausführungen aufteilen.

**Example ShouldRestart Status „Wahl“**  
Der folgende Auszug zeigt den `ShouldRestart` `Choice` Bundesstaat. Dieser Status bestimmt, ob Sie die Ausführung neu starten sollten oder nicht.  

```
"ShouldRestart": {
"Type": "Choice",
"Choices": [
  {
    "Variable": "$.restart.executionCount",
    "NumericGreaterThan": 1,
    "Next": "Restart"
  }
],
```

Der `$.restart.executionCount`-Wert ist in der Eingabe der ersten Ausführung enthalten. Er wird bei jedem Aufruf der `Restart`-Funktion um eins dekrementiert und dann für jede nachfolgende Ausführung in die Eingabe platziert.

**Example Task-Zustand Restart**  
Der folgende Auszug zeigt den `Restart` `Task` Status. Dieser Status verwendet die Lambda-Funktion, die Sie zuvor erstellt haben, um die Ausführung neu zu starten und die Anzahl zu verringern, um die verbleibende Anzahl der zu startenden Ausführungen zu verfolgen.  

```
"Restart": {
  "Type": "Task",
  "Resource": "arn:aws:lambda:region:123456789012:function:Restart",
  "Next": "Done"
},
```

**So erstellen Sie den -Zustandsautomaten**

1. Öffnen Sie die [Step Functions Functions-Konsole](https://console.aws.amazon.com/states/home), wählen Sie im Menü **State Machines** und dann **Create State Machine** aus.
**Wichtig**  
Stellen Sie sicher, dass sich Ihr State Machine unter demselben AWS Konto und derselben Region befindet wie die Lambda-Funktionen, die Sie zuvor in [Schritt 1 und Schritt](#tutorial-continue-new-step-1) [2](#tutorial-continue-new-step-3) erstellt haben.

1. Wählen Sie „**Aus leerem Feld erstellen**“.

1. Geben Sie Ihrem Zustandsmaschine einen Namen und wählen Sie dann **Weiter**, um Ihren Zustandsmaschine in Workflow Studio zu bearbeiten.

1. Für dieses Tutorial schreiben Sie die [Sprache der Amazonas-Staaten](concepts-amazon-states-language.md) (ASL) -Definition Ihres State Machine in den[Code-Editor](workflow-studio.md#wfs-interface-code-editor). Wählen Sie dazu **Code.**

1. Entfernen Sie den vorhandenen Boilerplate-Code und fügen Sie den folgenden Code ein. Denken Sie daran, die ARNs in diesem Code durch die ARNs von Ihnen erstellten Lambda-Funktionen zu ersetzen.

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

1. Geben Sie einen Namen für Ihre Zustandsmaschine an. Wählen Sie dazu das Bearbeitungssymbol neben dem Standardnamen der Zustandsmaschine von **MyStateMachine**. Geben Sie dann **unter State Machine Configuration** einen Namen in das Feld **State Machine Name** ein.

   Geben Sie für dieses Tutorial den Namen **ContinueAsNew** ein.

1. (Optional) Geben Sie unter **State-Machine-Konfiguration** weitere Workflow-Einstellungen an, z. B. den Zustandsmaschinentyp und seine Ausführungsrolle.

   Behalten Sie für dieses Tutorial alle Standardauswahlen in den **State-Machine-Einstellungen** bei.

   Wenn Sie [zuvor eine IAM-Rolle mit den richtigen Berechtigungen für Ihren Zustandsmaschine erstellt](procedure-create-iam-role.md) haben und diese verwenden möchten, wählen Sie unter **Berechtigungen** die Option **Vorhandene Rolle auswählen** und dann eine Rolle aus der Liste aus. Oder wählen Sie **Einen Rollen-ARN eingeben** aus und geben Sie dann einen ARN für diese IAM-Rolle ein.

1. Wählen **Sie im Dialogfeld „Rollenerstellung bestätigen**“ die Option **Bestätigen** aus, um fortzufahren.

   Sie können auch **Rolleneinstellungen anzeigen** wählen, um zur **State-Machine-Konfiguration** zurückzukehren.
**Anmerkung**  
Wenn Sie die von Step Functions erstellte IAM-Rolle löschen, kann Step Functions sie später nicht mehr neu erstellen. Ebenso kann Step Functions ihre ursprünglichen Einstellungen später nicht wiederherstellen, wenn Sie die Rolle ändern (z. B. indem Sie Step Functions aus den Principals in der IAM-Richtlinie entfernen). 

1. Speichern Sie den Amazon-Ressourcennamen (ARN) dieser Zustandsmaschine in einer Textdatei. Sie müssen den ARN angeben und gleichzeitig der Lambda-Funktion die Erlaubnis erteilen, eine neue Step Functions Functions-Ausführung zu starten.

## Schritt 4: Aktualisieren Sie die IAM-Richtlinie
<a name="tutorial-continue-new-step-2"></a>

Um sicherzustellen, dass Ihre Lambda-Funktion berechtigt ist, eine neue Step Functions Functions-Ausführung zu starten, fügen Sie der IAM-Rolle, die Sie für Ihre `Restart` Lambda-Funktion verwenden, eine Inline-Richtlinie hinzu. *Weitere Informationen finden Sie unter [Einbetten von Inline-Richtlinien im IAM-Benutzerhandbuch](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console).*

**Anmerkung**  
Sie können die `Resource`-Zeile im vorherigen Beispiel aktualisieren, damit sie auf den ARN Ihres `ContinueAsNew`-Zustandsautomaten verweist. Dies beschränkt die Richtlinie, so dass sie nur eine Ausführung dieses spezifischen Zustandsautomaten starten kann.

****  

```
{
 "Version":"2012-10-17",		 	 	 
 "Statement": [
     {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
             "states:StartExecution"
         ],
         "Resource": "arn:aws:states:us-east-2:123456789012:stateMachine:ContinueAsNew"
     }
 ]
}
```

## Schritt 5: Führen Sie die Zustandsmaschine aus
<a name="tutorial-continue-new-step-5"></a>

Zum Starten einer Ausführung stellen Sie eine Eingabe bereit, die den ARN des Zustandsautomaten enthält und einen `executionCount`, der angibt, wie oft eine neue Ausführung gestartet werden soll.

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

   Das Dialogfeld **Ausführung starten** wird angezeigt.

1. Gehen **Sie im Dialogfeld Ausführung starten** wie folgt vor:

   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 Beschriftungen, 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. Geben Sie im **Eingabefeld** die folgende JSON-Eingabe ein, um Ihren Workflow auszuführen.

      ```
      {
        "restart": {
          "StateMachineArn": "arn:aws:states:region:account-id:stateMachine:ContinueAsNew",
          "executionCount": 4
        }
      }
      ```

   1. Aktualisieren Sie das Feld `StateMachineArn` mit dem ARN für den Zustandsautomaten `ContinueAsNew`.

   1. Wählen Sie **Start execution (Ausführung starten)** aus.

   1. Die Step Functions Functions-Konsole leitet Sie zu einer Seite weiter, die mit Ihrer Ausführungs-ID betitelt ist. Diese Seite wird als Seite mit den *Ausführungsdetails* bezeichnet. Auf dieser Seite können Sie die Ausführungsergebnisse im Verlauf oder nach Abschluss der Ausführung überprüfen.

      Um die Ausführungsergebnisse zu überprüfen, wählen Sie in der **Diagrammansicht** einzelne Status und dann die einzelnen Registerkarten im [Einzelheiten zu den Schritten](concepts-view-execution-details.md#exec-details-intf-step-details) Bereich aus, um die Details der einzelnen Status, einschließlich Eingabe, Ausgabe und Definition, anzuzeigen. Einzelheiten zu den Ausführungsinformationen, die Sie auf der Seite mit den *Ausführungsdetails* einsehen können, finden Sie unter[Überblick über die Ausführungsdetails](concepts-view-execution-details.md#exec-details-interface-overview).

      In der **Diagrammansicht** wird die erste der vier Ausführungen angezeigt. Bevor sie abgeschlossen ist, durchläuft sie den `Restart`-Zustand und startet eine neue Ausführung.  
![\[Das Ausführungsdiagramm zeigt die erste von vier Ausführungen.\]](http://docs.aws.amazon.com/de_de/step-functions/latest/dg/images/execution-test1.png)

      Wenn diese Ausführung abgeschlossen ist, können Sie sich die nächste Ausführung ansehen, die gerade ausgeführt wird. Wählen Sie den **ContinueAsNew**Link oben aus, um die Liste der Ausführungen zu sehen. Sie sollten sowohl die kürzlich abgeschlossene Ausführung als auch eine laufende Ausführung sehen, die die `Restart` Lambda-Funktion gestartet hat.

      Wenn alle Ausführungen abgeschlossen sind, sollten Sie vier erfolgreiche Ausführungen in der Liste sehen. Die erste gestartete Ausführung zeigt den von Ihnen gewählten Namen. Nachfolgende Ausführungen haben einen generierten Namen.  
![\[Illustrativer Screenshot, der zeigt, dass alle Ausführungen abgeschlossen wurden.\]](http://docs.aws.amazon.com/de_de/step-functions/latest/dg/images/execution-test1-complete.png)