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

Context-Objekt

Das Kontextobjekt ist eine interne JSON-Struktur, die während einer Ausführung verfügbar ist und Informationen über Ihren Zustandsautomaten und die Ausführung enthält. Auf diese Weise können Ihre Workflows auf Informationen zu ihrer spezifischen Ausführung zugreifen. Sie können über die folgenden Felder auf das Kontextobjekt zugreifen:

  • InputPath

  • OutputPath

  • ItemsPath (in Map-Zuständen)

  • Variable (in Choice-Status)

  • ResultSelector

  • Parameters

  • Operatoren von Variablen zu Variablenvergleich

Kontext-Objekt-Format

Das Kontext-Objekt enthält Informationen über den Zustandsautomaten, den Zustand, die Ausführung und die Aufgabe. Dieses JSON-Objekt enthält Knoten für jeden Typ von Daten und hat das folgende Format.

{ "Execution": { "Id": "String", "Input": {}, "Name": "String", "RoleArn": "String", "StartTime": "Format: ISO 8601", "RedriveCount": Number, "RedriveTime": "Format: ISO 8601" }, "State": { "EnteredTime": "Format: ISO 8601", "Name": "String", "RetryCount": Number }, "StateMachine": { "Id": "String", "Name": "String" }, "Task": { "Token": "String" } }

Während einer Ausführung erhält das Kontext-Objekt relevante Daten für das Parameters-Feld, von dem aus darauf zugegriffen wird. Der Wert für ein Task-Feld ist Null, wenn sich das Parameters-Feld außerhalb einer Aufgabe befindet.

Der Wert des RedriveCount Kontextobjekts ist 0, wenn Sie noch keine redriven Ausführung haben. Darüber hinaus ist das RedriveTime Kontextobjekt nur verfügbar, wenn Sie redriven eine Ausführung haben. Wenn Sie habenredriven a Map Run, ist das RedriveTime Kontextobjekt nur für untergeordnete Workflows vom Typ Standard verfügbar. Für eine redriven Map-Ausführung mit untergeordneten Workflows vom Typ Express RedriveTime ist nicht verfügbar.

Inhalte aus einer laufenden Ausführung enthalten Einzelheiten im folgenden Format.

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "stateMachineName" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }
Anmerkung

Kontextobjektdaten im Zusammenhang mit Map-Zuständen finden Sie unter Context-Objektdaten für Zuordnungszustände.

Zugriff auf das Kontext-Objekt

Um auf das Kontext-Objekt zuzugreifen, geben Sie zuerst den Parameternamen an, indem Sie am Ende .$ anhängen, wie bei der Auswahl einer Zustandseingabe mit einem Pfad. Fügen Sie dann zum Zugriff auf die Kontext-Objektdaten anstelle der Eingabe vor dem Pfad $$. ein. Dies weist AWS Step Functions an, den Pfad zu verwenden um einen Knoten in dem Kontext-Objekt auszuwählen.

Die folgenden Beispiele zeigen, wie Sie auf Kontextobjekte wie Ausführungs-ID, Name, Startzeit und redrive Anzahl zugreifen können.

Abrufen und Übergeben des Ausführungs-ARN an einen Downstream-Service

In diesem Beispiel für Aufgabenstatus wird ein Pfad verwendet, um den Amazon-Ressourcennamen (ARN) der Ausführung abzurufen und an eine Amazon Simple Queue Service (Amazon SQS)-Nachricht zu übergeben.

{ "Order Flight Ticket Queue": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/flight-purchase", "MessageBody": { "From": "YVR", "To": "SEA", "Execution.$": "$$.Execution.Id" } }, "Next": "NEXT_STATE" } }

Weitere Informationen zur Verwendung eines Aufgabentokens beim Aufruf eines integrierten Service finden Sie unter Warten auf einen Callback mit dem Aufgabentoken.

Zugriff auf die Startzeit und den Namen der Ausführung im Status „Bestanden“

{ "Comment": "Accessing context object in a state machine", "StartAt": "Get execution context data", "States": { "Get execution context data": { "Type": "Pass", "Parameters": { "startTime.$": "$$.Execution.StartTime", "execName.$": "$$.Execution.Name" }, "ResultPath": "$.executionContext", "End": true } } }

Zugriff auf die redrive Anzahl einer Ausführung

Das folgende Beispiel für eine Aufgabenstatusdefinition zeigt, wie Sie auf die redrive Anzahl einer Ausführung zugreifen können.

{ "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload": { "Number.$": "$$.Execution.RedriveCount" }, "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:functionName" }, "End": true }

Context-Objektdaten für Zuordnungszustände

Beim Verarbeiten eines Map-Zustands stehen zwei zusätzliche Elemente im Context-Objekt zur Verfügung: Index und Value. Für jede Map Statusiteration Index enthält die Indexnummer für das Array-Element, das derzeit verarbeitet wird, während das Array-Element Value enthält, das verarbeitet wird. Innerhalb eines -MapZustands enthält das Kontextobjekt die folgenden Daten:

"Map": { "Item": { "Index": Number, "Value": "String" } }

Diese sind nur in einem -MapZustand verfügbar und können im -ItemSelectorFeld angegeben werden.

Anmerkung

Sie müssen Parameter aus dem Context-Objekt im Block ItemSelector des Map-Hauptzustands definieren, nicht innerhalb der Zustände im Abschnitt ItemProcessor.

Bei einem Zustandsautomaten mit einem einfachen Map-Zustand können wir wie folgt Informationen aus dem Kontextobjekt einfügen.

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }

Wenn Sie den vorherigen Zustandsautomaten mit der folgenden Eingabe ausführen, werden Index und Value in die Ausgabe eingefügt.

[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]

Die Ausgabe für die Ausführung gibt die Werte von Index und Value Elementen für jede der drei Iterationen wie folgt zurück:

[ { "ContextIndex": 0, "ContextValue": { "who": "bob" } }, { "ContextIndex": 1, "ContextValue": { "who": "meg" } }, { "ContextIndex": 2, "ContextValue": { "who": "joe" } } ]