Iteriere eine Schleife mit Lambda - 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.

Iteriere eine Schleife mit Lambda

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

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

  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-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 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 State Machine muss sich in demselben AWS Konto und derselben Region wie Ihre Lambda-Funktion befinden.

  2. Wählen Sie die leere Vorlage aus.

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

    { "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 den ARN für Ihre Iterator Lambda-Funktion, den 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 und Ihre AWS Region eindeutig sein und dürfen keine der folgenden Angaben enthalten:

    • Leerraum

    • Platzhalterzeichen () ? *

    • Klammerzeichen () < > { } [ ]

    • Sonderzeichen (" # % \ ^ | ~ ` $ & , ; : /)

    • Steuerzeichen (\\u0000- \\u001f oder \\u007f -\\u009f).

    Wenn Ihre Zustandsmaschine vom Typ Express ist, können Sie denselben Namen für mehrere Ausführungen der Zustandsmaschine angeben. Step Functions generiert für jede Ausführung von Express State Machine einen eindeutigen Ausführungs-ARN, auch wenn mehrere Ausführungen denselben Namen haben.

    Mit Step Functions können Sie Namen für Zustandsmaschinen, Ausführungen und Aktivitäten sowie Beschriftungen erstellen, die Nicht-ASCII-Zeichen enthalten. Diese Nicht-ASCII-Namen funktionieren nicht mit Amazon. CloudWatch Um sicherzustellen, dass Sie CloudWatch Messwerte verfolgen können, wählen Sie einen Namen, der nur ASCII-Zeichen verwendet.

  6. Akzeptieren Sie als 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) Um Ihre Ausführung zu identifizieren, können Sie im Feld Name einen Namen dafür angeben. Standardmäßig generiert Step Functions automatisch einen eindeutigen Ausführungsnamen.

    Anmerkung

    Mit Step Functions können Sie Namen für Zustandsmaschinen, Ausführungen und Aktivitäten sowie Beschriftungen erstellen, die Nicht-ASCII-Zeichen enthalten. Diese Nicht-ASCII-Namen funktionieren nicht mit Amazon. CloudWatch Um sicherzustellen, dass Sie CloudWatch Messwerte verfolgen können, wählen Sie einen Namen, der nur ASCII-Zeichen verwendet.

  3. Wählen Sie Start Execution aus.

    Eine neue Ausführung Ihres Zustandsautomaten beginnt und zeigt Ihre laufende Ausführung.

    Ansicht des State-Machine-Diagramms, in dem der Iterator-Status blau angezeigt wird, um den Status „In Bearbeitung“ anzuzeigen.

    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.

    Diagrammansicht der Zustandsmaschine, in der der Status „Iterator“ und der Status „Fertig“ grün angezeigt werden, um anzuzeigen, dass beide erfolgreich waren.