本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
內容物件
前後關聯物件是可在執行期間使用的內部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 Run,RedriveTime
前後關聯物件僅適用於類型為「標準」的子工作流程。對於具有 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 簡單佇列服務 (AmazonSQS) 訊息。
{
"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 狀態時,內容物件中有兩個額外的可用項目:Index
和 Value
。針對每個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 } } }
如果您使用下列輸入執行先前的狀態機器,Index
和 Value
會插入到輸出中。
[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]
執行的輸出會傳回三個反覆Value
項目的值Index
和項目,如下所示:
[
{
"ContextIndex": 0,
"ContextValue": {
"who": "bob"
}
},
{
"ContextIndex": 1,
"ContextValue": {
"who": "meg"
}
},
{
"ContextIndex": 2,
"ContextValue": {
"who": "joe"
}
}
]