Verwenden von Map State im verteilten Modus zur Orchestrierung umfangreicher parallel Workloads - 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 von Map State im verteilten Modus zur Orchestrierung umfangreicher parallel Workloads

Mit Step Functions können Sie umfangreiche parallel Workloads orchestrieren, um Aufgaben wie die On-Demand-Verarbeitung halbstrukturierter Daten auszuführen. Mit diesen parallel Workloads können Sie große Datenquellen, die in Amazon S3 gespeichert sind, gleichzeitig verarbeiten. Sie könnten beispielsweise eine einzelne JSON- oder CSV-Datei verarbeiten, die große Datenmengen enthält. Oder Sie könnten eine große Menge von Amazon S3 S3-Objekten verarbeiten.

Um eine umfangreiche parallel Arbeitslast in Ihren Workflows einzurichten, fügen Sie einen Map Status im Modus Verteilt hinzu. Der Kartenstatus verarbeitet Elemente in einem Datensatz gleichzeitig. Ein Map Status, der auf Distributed gesetzt ist, wird als Distributed Map-Status bezeichnet. Im Modus Verteilt ermöglicht der Map Status eine Verarbeitung mit hoher Parallelität. Im verteilten Modus verarbeitet der Map Status die Elemente in der Datenmenge in Iterationen, die als untergeordnete Workflow-Ausführungen bezeichnet werden. Sie können die Anzahl der untergeordneten Workflow-Ausführungen angeben, die parallel ausgeführt werden können. Jede Ausführung eines untergeordneten Workflows hat einen eigenen Ausführungsverlauf, der von dem des übergeordneten Workflows getrennt ist. Wenn Sie nichts angeben, führt Step Functions 10.000 parallele Ausführungen untergeordneter Workflows parallel aus.

In der folgenden Abbildung wird erklärt, wie Sie umfangreiche parallel Workloads in Ihren Workflows einrichten können.

Diagramm zur Veranschaulichung des Konzepts der Orchestrierung großer parallel Workloads.

Wichtige Begriffe

Verteilter Modus

Ein Verarbeitungsmodus des Kartenstatus. In diesem Modus wird jede Iteration des Map Status als untergeordnete Workflow-Ausführung ausgeführt, wodurch eine hohe Parallelität ermöglicht wird. Jede untergeordnete Workflow-Ausführung hat ihren eigenen Ausführungsverlauf, der vom Ausführungsverlauf des übergeordneten Workflows getrennt ist. Dieser Modus unterstützt das Lesen von Eingaben aus großen Amazon S3 S3-Datenquellen.

Status der verteilten Karte

Ein Map-Status, der auf den Modus Verteilte Verarbeitung gesetzt ist.

Arbeitsablauf zuordnen

Eine Reihe von Schritten, die ein Map Bundesstaat ausführt.

Übergeordneter Arbeitsablauf

Ein Workflow, der einen oder mehrere Distributed Map-Status enthält.

Ausführung eines untergeordneten Workflows

Eine Iteration des Distributed-Map-Status. Die Ausführung eines untergeordneten Workflows hat einen eigenen Ausführungsverlauf, der vom Ausführungsverlauf des übergeordneten Workflows getrennt ist.

Ordnen Sie Run zu

Wenn Sie einen Map Status im verteilten Modus ausführen, erstellt Step Functions eine Map Run-Ressource. Ein Map Run bezieht sich auf eine Reihe von untergeordneten Workflow-Ausführungen, die im Status Distributed Map gestartet werden, sowie auf die Laufzeiteinstellungen, die diese Ausführungen steuern. Step Functions weist Ihrem Map Run einen Amazon-Ressourcennamen (ARN) zu. Sie können einen Map Run in der Step Functions-Konsole untersuchen. Sie können die DescribeMapRun API-Aktion auch aufrufen. Ein Map Run sendet auch Metriken an. CloudWatch

Weitere Informationen finden Sie unter Untersuchen der Kartenausführung.

Beispiel für die Definition eines verteilten Kartenzustands

Verwenden Sie den Map Status im Modus Verteilt, wenn Sie umfangreiche parallel Workloads orchestrieren müssen, die eine beliebige Kombination der folgenden Bedingungen erfüllen:

  • Die Größe Ihres Datensatzes übersteigt 256 KB.

  • Der Verlauf der Ausführungsereignisse des Workflows umfasst mehr als 25.000 Einträge.

  • Sie benötigen eine Parallelität von mehr als 40 parallel Iterationen.

Das folgende Beispiel für die Zustandsdefinition von Distributed Map spezifiziert den Datensatz als CSV-Datei, die in einem Amazon S3 S3-Bucket gespeichert ist. Es spezifiziert auch eine Lambda-Funktion, die die Daten in jeder Zeile der CSV-Datei verarbeitet. Da in diesem Beispiel eine CSV-Datei verwendet wird, wird auch die Position der CSV-Spaltenüberschriften angegeben. Die vollständige State-Machine-Definition dieses Beispiels finden Sie im Tutorial Kopieren umfangreicher CSV-Daten mit Distributed Map.

{ "Map": { "Type": "Map", "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "Database", "Key": "csv-dataset/ratings.csv" } }, "ItemProcessor": { "ProcessorConfig": { "Mode": "DISTRIBUTED", "ExecutionType": "EXPRESS" }, "StartAt": "LambdaTask", "States": { "LambdaTask": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:processCSVData" }, "End": true } } }, "Label": "Map", "End": true, "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "myOutputBucket", "Prefix": "csvProcessJobs" } } } }

Berechtigungen zum Ausführen von Distributed Map

Wenn Sie einen Distributed Map-Status in Ihre Workflows aufnehmen, benötigt Step Functions die entsprechenden Berechtigungen, damit die Zustandsmaschinenrolle die StartExecution API-Aktion für den Distributed-Map-Status aufrufen kann.

Das folgende Beispiel für eine IAM-Richtlinie gewährt Ihrer State-Machine-Rolle die geringsten Rechte, die für die Ausführung des Status Distributed Map erforderlich sind.

Anmerkung

Stellen Sie sicher, dass Sie den Status stateMachineName durch den Namen des Zustandsmaschinen ersetzen, in dem Sie den Status Distributed Map verwenden. z. B. arn:aws:states:us-east-2:123456789012:stateMachine:mystateMachine.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:region:accountID:stateMachine:stateMachineName" ] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": "arn:aws:states:region:accountID:execution:stateMachineName:*" } ] }

Darüber hinaus müssen Sie sicherstellen, dass Sie über die geringsten Rechte verfügen, die für den Zugriff auf die im Status Distributed Map verwendeten AWS Ressourcen erforderlich sind, z. B. Amazon S3 S3-Buckets. Weitere Informationen finden Sie unter IAM-Richtlinien für die Verwendung des Distributed Map-Status.

Felder für den Status von Distributed Map

Um den Status „Distributed Map“ in Ihren Workflows zu verwenden, geben Sie eines oder mehrere dieser Felder an. Sie geben diese Felder zusätzlich zu den allgemeinen Statusfeldern an.

Type (Erforderlich)

Legt den Zustandstyp fest, z. Map B.

ItemProcessor (Erforderlich)

Enthält die folgenden JSON-Objekte, die den Verarbeitungsmodus und die Definition des Map Status angeben.

  • ProcessorConfig— Ein JSON-Objekt, das die Konfiguration für den Map Status spezifiziert. Dieses Objekt enthält die folgenden Unterfelder:

    • Mode— Auf einstellen, DISTRIBUTED um den Map Status im verteilten Modus zu verwenden.

      Anmerkung

      Wenn Sie den Map Status in Express-Workflows verwenden, können Sie den Status derzeit nicht Mode auf setzenDISTRIBUTED. Wenn Sie den Map Status jedoch in Standard-Workflows verwenden, können Sie den Wert Mode auf setzenDISTRIBUTED.

    • ExecutionType— Gibt den Ausführungstyp für den Map-Workflow entweder als STANDARD oder EXPRESS an. Sie müssen dieses Feld angeben, wenn Sie es DISTRIBUTED für das Mode Unterfeld angegeben haben. Weitere Informationen zu Workflowtypen finden Sie unterStandard- und Express-Workflows.

  • StartAt— Gibt eine Zeichenfolge an, die den ersten Status in einem Workflow angibt. Bei dieser Zeichenfolge wird zwischen Groß- und Kleinschreibung unterschieden und sie muss mit dem Namen eines der Statusobjekte übereinstimmen. Dieser Status wird für jedes Element im Datensatz zuerst ausgeführt. Jede Ausführungseingabe, die Sie für den Map Status bereitstellen, wird zuerst an den StartAt Status übergeben.

  • States— Ein JSON-Objekt, das eine durch Kommas getrennte Gruppe von Zuständen enthält. In diesem Objekt definieren Sie die. Map workflow

ItemReader

Gibt einen Datensatz und seinen Speicherort an. Der Map Staat erhält seine Eingabedaten aus dem angegebenen Datensatz.

Im verteilten Modus können Sie entweder eine JSON-Nutzlast, die aus einem früheren Status übergeben wurde, oder eine umfangreiche Amazon S3 S3-Datenquelle als Datensatz verwenden. Weitere Informationen finden Sie unter ItemReader.

ItemsPath (Optional)

Gibt einen Referenzpfad an, der die JsonPathSyntax verwendet, um den JSON-Knoten auszuwählen, der ein Array von Elementen innerhalb der Statuseingabe enthält.

Im verteilten Modus geben Sie dieses Feld nur an, wenn Sie ein JSON-Array aus einem vorherigen Schritt als Statuseingabe verwenden. Weitere Informationen finden Sie unter ItemsPath.

ItemSelector (Optional)

Überschreibt die Werte einzelner Datensatzelemente, bevor sie an jede Map State-Iteration weitergegeben werden.

In diesem Feld geben Sie eine gültige JSON-Eingabe an, die eine Sammlung von Schlüssel-Wert-Paaren enthält. Bei diesen Paaren kann es sich entweder um statische Werte handeln, die Sie in Ihrer Zustandsmaschinen-Definition definieren, um Werte, die mithilfe eines Pfads aus der Zustandseingabe ausgewählt wurden, oder um Werte, auf die über das Kontextobjekt zugegriffen wird. Weitere Informationen finden Sie unter ItemSelector.

ItemBatcher (Optional)

Gibt an, dass die Datensatzelemente stapelweise verarbeitet werden sollen. Jede untergeordnete Workflow-Ausführung erhält dann einen Stapel dieser Elemente als Eingabe. Weitere Informationen finden Sie unter ItemBatcher.

MaxConcurrency (Optional)

Gibt die Anzahl der untergeordneten Workflow-Ausführungen an, die parallel ausgeführt werden können. Der Interpreter erlaubt nur bis zu der angegebenen Anzahl parallel untergeordneter Workflow-Ausführungen. Wenn Sie keinen Parallelitätswert angeben oder ihn auf Null setzen, begrenzt Step Functions die Parallelität nicht und führt 10.000 parallel untergeordnete Workflow-Ausführungen aus.

Anmerkung

Sie können zwar ein höheres Parallelitätslimit für parallel untergeordnete Workflow-Ausführungen angeben, wir empfehlen jedoch, die Kapazität eines AWS Downstream-Dienstes nicht zu überschreiten, z. B. AWS Lambda

MaxConcurrencyPath (Optional)

Wenn Sie mithilfe eines Referenzpfads dynamisch aus der Statuseingabe einen maximalen Parallelitätswert angeben möchten, verwenden Sie. MaxConcurrencyPath Nach der Auflösung muss der Referenzpfad ein Feld auswählen, dessen Wert eine nicht negative Ganzzahl ist.

Anmerkung

Ein Map Status kann nicht sowohl als auch MaxConcurrency enthalten. MaxConcurrencyPath

ToleratedFailurePercentage (Optional)

Definiert den Prozentsatz fehlgeschlagener Elemente, der in einem Map-Run toleriert werden soll. Der Map Run schlägt automatisch fehl, wenn er diesen Prozentsatz überschreitet. Step Functions berechnet den Prozentsatz der fehlgeschlagenen Elemente als Ergebnis der Gesamtzahl der fehlgeschlagenen Elemente oder der Zeitüberschreitung dividiert durch die Gesamtzahl der Elemente. Sie müssen einen Wert zwischen Null und 100 angeben. Weitere Informationen finden Sie unter Schwellenwert für tolerierte Fehler im Distributed-Map-Status.

ToleratedFailurePercentagePath (Optional)

Wenn Sie einen prozentualen Wert für tolerierte Fehler dynamisch aus der Statuseingabe mithilfe eines Referenzpfads angeben möchten, verwenden SieToleratedFailurePercentagePath. Wenn das Problem gelöst ist, muss der Referenzpfad ein Feld auswählen, dessen Wert zwischen Null und 100 liegt.

ToleratedFailureCount (Optional)

Definiert die Anzahl der fehlgeschlagenen Elemente, die in einem Map-Run toleriert werden sollen. Der Map Run schlägt automatisch fehl, wenn er diese Anzahl überschreitet. Weitere Informationen finden Sie unter Schwellenwert für tolerierte Fehler im Distributed-Map-Status.

ToleratedFailureCountPath (Optional)

Wenn Sie einen Wert für die Anzahl tolerierter Fehler dynamisch aus der Statuseingabe mithilfe eines Referenzpfads angeben möchten, verwenden SieToleratedFailureCountPath. Wenn das Problem gelöst ist, muss der Referenzpfad ein Feld auswählen, dessen Wert eine nicht negative Ganzzahl ist.

Label (Optional)

Eine Zeichenfolge, die einen Map Bundesstaat eindeutig identifiziert. Für jeden Map Run fügt Step Functions das Label zum Map Run-ARN hinzu. Im Folgenden finden Sie ein Beispiel für einen Map Run-ARN mit einem benutzerdefinierten Label namensdemoLabel:

arn:aws:states:us-east-1:123456789012:mapRun:demoWorkflow/demoLabel:3c39a231-69bb-3d89-8607-9e124eddbb0b

Wenn Sie kein Label angeben, generiert Step Functions automatisch ein eindeutiges Label.

Anmerkung

Beschriftungen dürfen nicht länger als 40 Zeichen sein, müssen innerhalb einer State-Machine-Definition eindeutig sein und dürfen keines der folgenden Zeichen enthalten:

  • Leerzeichen

  • Platzhalterzeichen () ? *

  • Klammerzeichen () < > { } [ ]

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

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

Mit Step Functions können Sie Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Labels 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.

ResultWriter (Optional)

Gibt den Amazon S3 S3-Speicherort an, an den Step Functions alle untergeordneten Workflow-Ausführungsergebnisse schreibt.

Step Functions konsolidiert alle Ausführungsdaten des untergeordneten Workflows, wie z. B. Ausführungseingabe und -ausgabe, ARN und Ausführungsstatus. Anschließend werden Ausführungen mit demselben Status in die entsprechenden Dateien am angegebenen Amazon S3 S3-Speicherort exportiert. Weitere Informationen finden Sie unter ResultWriter.

Wenn Sie die Map Statusergebnisse nicht exportieren, wird ein Array mit allen Ergebnissen der untergeordneten Workflow-Ausführung zurückgegeben. Beispielsweise:

[1, 2, 3, 4, 5]
ResultPath (Optional)

Gibt an, wo in der Eingabe die Ausgabe der Iterationen platziert werden soll. Die Eingabe wird dann gemäß den Angaben des OutputPathFelds gefiltert, falls vorhanden, bevor sie als Ausgabe für den Status übergeben wird. Weitere Informationen finden Sie unter Verarbeitung von Eingabe und Ausgabe.

ResultSelector (Optional)

Übergibt eine Sammlung von Schlüssel-Wert-Paaren, wobei die Werte statisch sind oder aus dem Ergebnis ausgewählt werden. Weitere Informationen finden Sie unter ResultSelector.

Tipp

Wenn der Status Parallel oder Map, den Sie in Ihren Zustandsmaschinen verwenden, ein Array von Arrays zurückgibt, können Sie diese mit dem Feld in ein flaches Array umwandeln. ResultSelector Weitere Informationen finden Sie unter Abflachen eines Arrays.

Retry (Optional)

Eine Reihe von Objekten, sogenannte Retriers, die eine Wiederholungsrichtlinie definieren. Eine Ausführung verwendet die Wiederholungsrichtlinie, wenn im Status Laufzeitfehler auftreten. Weitere Informationen finden Sie unter Beispiele für Zustandsmaschinen mit Retry und Catch.

Anmerkung

Wenn Sie Retrier für den Status Distributed Map definieren, gilt die Wiederholungsrichtlinie für alle untergeordneten Workflow-Ausführungen, die im Status gestartet wurden. Map Stellen Sie sich beispielsweise vor, Ihr Map Bundesstaat hat drei untergeordnete Workflow-Ausführungen gestartet, von denen eine fehlschlägt. Wenn der Fehler auftritt, verwendet die Ausführung das Retry Feld, sofern definiert, für den Map Status. Die Wiederholungsrichtlinie gilt für alle untergeordneten Workflow-Ausführungen und nicht nur für die fehlgeschlagene Ausführung. Wenn eine oder mehrere untergeordnete Workflow-Ausführungen fehlschlagen, schlägt der Map Run fehl.

Wenn Sie einen Map Status erneut versuchen, wird ein neuer Map Run erstellt.

Catch (Optional)

Ein Array von Objekten namens Catcher, die einen Fallback-Zustand definieren. Step Functions verwendet die in definierten Catcher, Catch wenn der Status auf Laufzeitfehler stößt. Wenn ein Fehler auftritt, verwendet die Ausführung zunächst alle in definierten Retrier. Retry Wenn die Wiederholungsrichtlinie nicht definiert oder erschöpft ist, verwendet die Ausführung ihre Catcher, sofern definiert. Weitere Informationen finden Sie unter Fallback-Zustände.

Nächste Schritte

Weitere Informationen zum Status von Distributed Map finden Sie in den folgenden Ressourcen: