Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions - 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.

Iterieren Sie eine Schleife mit einer Lambda-Funktion in Step Functions

In diesem Tutorial implementieren Sie ein Entwurfsmuster, das eine Zustandsmaschine und eine AWS Lambda Funktion, um eine Schleife eine bestimmte Anzahl von Malen zu iterieren.

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 eine Überschreitung der Dienstkontingente für zu vermeiden AWS Step Functions, AWS Lambda, oder ein anderes AWS Dienstleistungen.

Bevor Sie beginnen, sollten Sie das Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet 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

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 countindex, undstep. 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:

  1. Melden Sie sich bei der Lambda-Konsole an und wählen Sie dann Create function 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 unter Laufzeit die Option Node.js.

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

    4. Wählen Sie Funktion erstellen aus.

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

  5. Wählen Sie Bereitstellen.

Schritt 2: Testen Sie die Lambda-Funktion

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

  1. Wählen Sie Test aus.

  2. Geben Sie im Dialogfeld „Testereignis konfigurierenTestIterator in das Feld „Ereignisname“ ein.

  3. 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ücktrue, 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

  4. Wählen Sie Create (Erstellen) aus.

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

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

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

Bevor Sie die Lambda-Konsole verlassen...

Kopieren Sie die Lambda-FunktionARN. 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 countindex, und feststep.

  • 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 und wählen Sie dann Create a State Machine aus.

    Wichtig

    Ihr Zustandsmaschine muss sich in demselben Zustand befinden AWS Konto und Region als Ihre Lambda-Funktion.

  2. Wählen Sie die leere Vorlage aus.

  3. Fügen Sie im Codebereich den folgenden JSON Text ein, der den Zustandsmaschine definiert.

    Weitere Informationen zur Sprache von Amazon States finden Sie unter State Machine Structure.

    { "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:us-east-1: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 } } }
  4. Ersetzen Sie das Iterator Resource Feld durch das Feld ARN für Ihre Iterator Lambda-Funktion, das Sie zuvor erstellt haben.

  5. 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 eindeutig sein und AWS Region und darf 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 Beschriftungen, die ASCII Nichtzeichen enthalten. Da solche Zeichen nicht mit Amazon funktionieren, empfehlen wir CloudWatch, nur ASCII Zeichen zu verwenden, damit Sie die Messwerte verfolgen können CloudWatch.

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

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

Schritt 4: Starten einer neuen Ausführung

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

  1. Wählen Sie auf der IterateCountSeite Ausführung starten aus.

  2. (Optional) Geben Sie einen benutzerdefinierten Ausführungsnamen ein, um den generierten Standard zu überschreiben.

    ASCIINichtnamen und Protokollierung

    Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Beschriftungen, die ASCII Nichtzeichen enthalten. Da solche Zeichen nicht mit Amazon funktionieren, empfehlen wir CloudWatch, nur ASCII Zeichen zu verwenden, damit Sie die Messwerte verfolgen können CloudWatch.

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

    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.