View a markdown version of this page

Verwenden einer Lambda-Funktion, um eine neue Ausführung in Step Functions fortzusetzen - AWS Step Functions

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

Tipp

Der folgende Ansatz verwendet eine Lambda-Funktion, um eine neue Workflow-Ausführung zu starten. Wir empfehlen, einen Step Functions-Aufgabenstatus zu verwenden, um neue Workflow-Ausführungen zu starten. Im folgenden Tutorial erfahren Sie, wie das geht: Setzen Sie lang andauernde Workflows mit der Step Functions API fort (empfohlen).

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 an 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 der Verwendung einer externen Lambda-Funktion zur Änderung Ihres Workflows auf, das Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions im Tutorial demonstriert wurde. Sie verwenden dieselbe Lambda-Funktion (Iterator), um eine Schleife eine bestimmte Anzahl von Malen zu wiederholen. Darüber hinaus erstellen Sie eine weitere Lambda-Funktion, um eine neue Ausführung Ihres Workflows zu starten und die Anzahl jedes Mal zu verringern, wenn eine neue Ausführung gestartet wird. 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 Status, der die step Werte, und konfiguriert countindex, die die Iterator Lambda-Funktion verwendet, um mehrere Arbeitsschritte Schritt für Schritt durchzuführen.

Iterator

Ein Task Zustand, der auf die Lambda-Funktion verweist. Iterator

IsCountReached

Ein Choice Zustand, der einen booleschen Wert aus der Iterator Funktion verwendet, um zu entscheiden, ob die Zustandsmaschine die Beispielarbeit fortsetzen oder in den Status übergehen soll. ShouldRestart

ExampleWork

Ein Pass Zustand, der den Task Zustand darstellt, der in einer tatsächlichen Implementierung die Arbeit ausführen 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

Bevor Sie beginnen, gehen Sie das Erstellen einer Step Functions-Zustandsmaschine, die Lambda verwendet Tutorial durch, 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 wiederholen

Anmerkung

Wenn Sie das Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions 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 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ürcount, undindex. 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 ist. count

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 Iterate Lambda-Funktion

  1. Öffnen Sie die Lambda-Konsole und wählen Sie Create function (Funktion erstellen) aus.

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

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

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

    2. Wählen Sie für Runtime Node.js 16.x.

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

      Nachdem Lambda Ihre Funktion erstellt hat, notieren Sie sich den Amazon-Ressourcennamen (ARN), zum Beispiel:

      arn:aws:lambda:region:123456789012:function:Iterator
  4. Kopieren Sie den folgenden Code für die Lambda-Funktion in den Codequellbereich 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.

  5. Wählen Sie Deploy, um den Code bereitzustellen.

Testen Sie die Iterate Lambda-Funktion

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

  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.

  2. 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.

  3. Wählen Sie Erstellen aus.

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

    Die Testergebnisse werden 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 zum Neustarten, um eine neue Ausführung von Step Functions zu starten

  1. Öffnen Sie die Lambda-Konsole und wählen Sie Create function (Funktion erstellen) aus.

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

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

    1. Geben Sie für Function name (Funktionsname) Restart ein.

    2. Wählen Sie für Runtime Node.js 16.x.

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

    Nachdem Lambda Ihre Funktion erstellt hat, notieren Sie sich den Amazon-Ressourcennamen (ARN), zum Beispiel:

    arn:aws:lambda:region:123456789012:function:Iterator
  5. Kopieren Sie den folgenden Code für die Lambda-Funktion in den Codequellbereich 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); }); }
  6. Wählen Sie Deploy, um den Code bereitzustellen.

Schritt 3: Erstellen Sie eine Zustandsmaschine

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.

Beispiel ShouldRestart Wählen Sie den Bundesstaat

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.

Beispiel 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 der zu startenden Ausführungen zu verringern.

"Restart": { "Type": "Task", "Resource": "arn:aws:lambda:region:123456789012:function:Restart", "Next": "Done" },
So erstellen Sie den -Zustandsautomaten
  1. Öffnen Sie die Step Functions-Konsole, wählen Sie im Menü die Option State Machines und anschließend 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 2 erstellt haben.

  2. Wählen Sie Aus leerem Feld erstellen aus.

  3. Benennen Sie Ihren Zustandsmaschinen und wählen Sie dann Weiter, um Ihren Zustandsmaschine in Workflow Studio zu bearbeiten.

  4. Für dieses Tutorial schreiben Sie die Sprache der Amazonas-Staaten (ASL) -Definition Ihres Zustandsautomaten in denCode-Editor. Wählen Sie dazu Code.

  5. 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 der 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 } } }
  6. Geben Sie einen Namen für Ihre Zustandsmaschine an. Wählen Sie dazu das Bearbeitungssymbol neben dem Standard-State-Machine-Namen 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.

  7. (Optional) Geben Sie unter Zustandsmaschinenkonfiguration weitere Workflow-Einstellungen an, z. B. den Zustandsautomatentyp und die zugehörige 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 State Machine erstellt haben und diese verwenden möchten, wählen Sie unter Berechtigungen die Option Vorhandene Rolle auswählen aus , und wählen Sie dann eine Rolle aus der Liste aus. Oder wählen Sie Geben Sie einen Rollen-ARN ein und geben Sie dann einen ARN für diese IAM-Rolle ein.

  8. Wählen Sie im Dialogfeld „Rollenerstellung bestätigen“ die Option „Bestätigen“, 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 erneut erstellen. Ebenso kann Step Functions die 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).

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

Schritt 4: Aktualisieren Sie die IAM-Richtlinie

Um sicherzustellen, dass Ihre Lambda-Funktion berechtigt ist, eine neue Step 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 im IAM-Benutzerhandbuch unter Einbetten von Inline-Richtlinien.

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 den State Machine aus

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.

  2. 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.

      Non-ASCII Namen und Protokollierung

      Step Functions akzeptiert Namen für Zustandsautomaten, Ausführungen, Aktivitäten und Bezeichnungen, die Nicht-ASCII-Zeichen enthalten. Da solche Zeichen verhindern, dass Amazon Daten protokolliert, empfehlen wir, nur ASCII-Zeichen zu verwenden, damit Sie die Metriken CloudWatch von Step Functions verfolgen können.

    2. 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 } }
    3. Aktualisieren Sie das Feld StateMachineArn mit dem ARN für den Zustandsautomaten ContinueAsNew.

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

    5. Die Step 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 überprüfen, während die Ausführung voranschreitet oder nachdem sie abgeschlossen ist.

      Um die Ausführungsergebnisse zu überprüfen, wählen Sie in der Diagrammansicht einzelne Bundesstaaten aus. Wählen Sie dann die einzelnen Registerkarten im Einzelheiten zu den Schritten Bereich aus, um die Details der einzelnen Bundesstaaten 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.

      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.

      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, um die Liste der Ausführungen anzuzeigen. Sie sollten sowohl die kürzlich abgeschlossene Ausführung als auch eine laufende Ausführung sehen, die von der Restart Lambda-Funktion gestartet wurde.

      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.

      Anschaulicher Screenshot, der zeigt, dass alle Ausführungen abgeschlossen sind.