內容物件 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

內容物件

上下文對象是一個內部 JSON 結構,可在執行期間使用,並包含有關狀態機器和執行的信息。這可讓您的工作流程存取關於其特定執行的資訊。您可以從下列欄位存取前後關聯物件:

  • InputPath

  • OutputPath

  • ItemsPath(在「地圖」狀態中)

  • Variable(在「選擇」狀態中)

  • ResultSelector

  • Parameters

  • 變量到變量比較運算符

內容物件格式

內容物件包含與狀態機器,狀態、執行和任務相關的資訊。這個 JSON 物件包含每種資料類型的節點,而且採用下列格式:

{ "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" } }

執行期間,內容物件所存取 Parameters 欄位將會填入內容物件及其相關資料。如果 Parameters 欄位的值不在任務狀態範圍中,Task 欄位就會為空值。

如果您尚redriven未執行,則RedriveCount上下文對象的值為 0。此外,上RedriveTime下文對象只有在您執行時才可redriven用。如果您有 redriven a Map RunRedriveTime前後關聯物件僅適用於類型為「標準」的子工作流程。對於具有 Express 類型的子工作流程的redriven地圖運行,RedriveTime不可用。

正在進行中執行的內容包含以下格式的規格。

{ "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" } }
注意

如需 Map 狀態相關的內容物件資料,請參閱Map 狀態的內容物件資料

存取內容物件

若要存取內容物件,請先將 .$ 附加到結尾來指定參數名稱,就像您利用路徑來選擇狀態輸入的方式。接下來,如要存取內容物件資料而不要存取輸入,請在路徑名稱之前加上 $$.。這告訴 AWS Step Functions 使用路徑來選擇上下文對象的節點。

下列範例顯示如何存取前後關聯物件,例如執行 ID、名稱、開始時間和redrive計數。

擷取執行 ARN 並將其傳遞至下游服務

此範例任務狀態使用路徑擷取執行 Amazon 資源名稱 (ARN),並將其傳遞至 Amazon Simple Queue Service (Amazon SQS) 訊息。

{ "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" } }

如需有關在呼叫整合服務時使用任務字符的詳細資訊,請參閱等候傳回任務字符的回呼

在「通過」狀態下存取執行開始時間和名稱

{ "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 } } }

訪問執行的redrive計數

下列 Task 狀態定義範例顯示如何存取執行redrive計數。

{ "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 }

Map 狀態的內容物件資料

處理 Map 狀態時,內容物件中有兩個額外的可用項目:IndexValue。針對每個Map狀態反覆運算,Index包含目前正在處理之陣列項目的索引編號,同時Value包含正在處理的陣列項目。在某個Map狀態中,前後關聯物件包含下列資料:

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

這些只能在某個Map狀態下使用,並且可以在ItemSelector欄位中指定。

注意

您必須在主要 Map 狀態的 ItemSelector 區塊中定義內容物件的參數,而不是在 ItemProcessor 區段包含的狀態內。

假設狀態機器具有簡單 Map 狀態,我們可以從內容物件注入資訊,如下所示。

{ "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 } } }

如果您使用下列輸入執行先前的狀態機器,IndexValue 會插入到輸出中。

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

執行的輸出會傳回三個反覆Value項目的值Index和項目,如下所示:

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