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 count
index
, 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:
-
Melden Sie sich bei der Lambda-Konsole
an und wählen Sie dann Create function aus. -
Wählen Sie auf der Seite Create function die Option Author from scratch.
-
Konfigurieren Sie im Abschnitt Grundinformationen Ihre Lambda-Funktion wie folgt:
-
Geben Sie für Function name (Funktionsname)
Iterator
ein. -
Wählen Sie unter Laufzeit die Option Node.js.
-
Wählen Sie unter Standardausführungsrolle ändern die Option Neue Rolle mit grundlegenden Lambda-Berechtigungen erstellen aus.
-
Wählen Sie Funktion erstellen aus.
-
-
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
undstep
entgegen. Er inkrementiertindex
um den Wert vonstep
und gibt diese Werte sowie den Booleschen Wertcontinue
zurück. Der Wert voncontinue
isttrue
, wennindex
kleiner alscount
ist. -
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
-
Wählen Sie Test aus.
-
Geben Sie im Dialogfeld „Testereignis konfigurieren“
TestIterator
in das Feld „Ereignisname“ ein. -
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 auf5
inkrementiert. Der Test wird auf inkrementiert6
undindex
auf gesetzt.continue
true
-
Wählen Sie Create (Erstellen) aus.
-
Wählen Sie Test, um Ihre Lambda-Funktion zu testen.
Die Ergebnisse des Tests werden auf der Registerkarte Ausführungsergebnisse angezeigt.
-
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 festlegen9
und erneut testen, werdenindex
false
die Werte auf10
undcontinue
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ürcount
index
, und feststep
. -
Iterator
— Bezieht sich auf die Lambda-Funktion, die Sie zuvor erstellt haben und die inConfigureCount
konfigurierten Werte übergeben. -
IsCountReached
— Ein Auswahlstatus, der die Schleife fortsetzt oder in denDone
Status übergeht, basierend auf dem von IhrerIterator
Funktion zurückgegebenen Wert. -
ExampleWork
— Ein Stummel für Arbeit, die erledigt werden muss. In diesem Beispiel hat der Workflow einenPass
Status, aber in einer echten Lösung würden Sie wahrscheinlich einenTask
verwenden. -
Done
— Endstatus Ihres Workflows.
Um die Zustandsmaschine in der Konsole zu erstellen:
-
Ö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.
-
Wählen Sie die leere Vorlage aus.
-
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 } } } -
Ersetzen Sie das
Iterator Resource
Feld durch das Feld ARN für IhreIterator
Lambda-Funktion, das Sie zuvor erstellt haben. -
Wählen Sie Config und geben Sie einen Namen für Ihre Zustandsmaschine ein, z.
B.IterateCount
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.
-
-
Akzeptieren Sie für Typ den Standardwert Standard. Wählen Sie für Berechtigungen die Option Neue Rolle erstellen aus.
-
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.
-
Wählen Sie auf der IterateCountSeite Ausführung starten aus.
-
(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.
-
Wählen Sie Start Execution aus.
Eine neue Ausführung Ihres Zustandsautomaten beginnt und zeigt Ihre laufende Ausführung.
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.