本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Step Functions 中的內容物件存取執行資料
管理狀態和轉換資料
內容物件是在執行期間可用的內部 JSON 結構,其中包含狀態機器和執行的相關資訊。內容提供工作流程特定執行的相關資訊。您的工作流程可以使用 參考 JSONata 表達式中的內容物件$states.context。
存取內容物件
在 JSONata 中存取內容物件
若要以 JSONata 狀態存取內容物件,請在 JSONata 表達式$states.context中使用 。
{
"ExecutionID" : "{% $states.context.Execution.Id %}"
}
在 JSONPath 中存取內容物件
若要存取 JSONPath 中的內容物件,請先附加.$至金鑰的結尾,以指出值為路徑。然後,在值前面加上 ,$$.以選取內容物件中的節點。
{
"ExecutionID.$": "$$.Execution.Id"
}
JSONPath 狀態可以參考下列 JSONPath 欄位的內容 ($$.):
-
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"
}
}
在執行期間,內容物件會填入相關資料。
有時候,新的欄位會新增至內容。如果您直接處理 JSON 內容,建議您製作可正常處理新未知欄位的程式碼。例如,如果使用 Jackson 程式庫取消封送 JSON,建議您在 false中FAIL_ON_UNKNOWN_PROPERTIES將 設定為 ObjectMapper ,以防止 UnrecognizedPropertyException。
RedriveTime 內容物件只有在您有redriven執行時才能使用。如果您有 redriven a Map Run,RedriveTime內容物件僅適用於 Standard 類型的子工作流程。對於具有 Express 類型的子工作流程的 redriven Map Run, RedriveTime 無法使用。
執行中執行的內容包含以下格式的特定項目:
{
"Execution": {
"Id": "arn:aws:states:region:123456789012:execution:stateMachineName:executionName",
"Input": {
"key": "value"
},
"Name": "executionName",
"RoleArn": "arn:aws:iam::123456789012:role...",
"StartTime": "2025-08-27T10:04:42Z"
},
"State": {
"EnteredTime": "2025-08-27T10:04:42.001Z",
"Name": "Test",
"RetryCount": 3
},
"StateMachine": {
"Id": "arn:aws:states:region:123456789012:stateMachine:stateMachineName",
"Name": "stateMachineName"
},
"Task": {
"Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W"
}
}
具有小數秒的時間戳記格式
Step Functions 遵循 ISO8601 規格,指出輸出可以是零、三、六或九位數。當時間戳記具有零分秒時,Step Functions 會移除結尾的零,而不是填補輸出。
如果您建立使用 Step Functions 時間戳記的程式碼,您的程式碼必須能夠處理小數秒的變數數目。
Map 狀態的內容物件資料
管理狀態和轉換資料
處理Map狀態時,內容也會包含 Index、 Value和 Source。
對於每個Map狀態反覆運算, Index 包含目前正在處理的陣列項目索引號碼、Value包含正在處理的陣列項目,並將Source是 CSV、JSON、 JSONL或 的 InputTypePARQUET。
在 Map 狀態中,內容物件包含下列資料:
"Map": {
"Item": {
"Index" : Number,
"Key" : "String", // Only valid for JSON objects
"Value" : "String",
"Source": "String"
}
}
這些只能在 Map 狀態中使用,並且可以在 ItemSelector (地圖) 欄位中指定。
注意
您必須從主要Map狀態ItemSelector區塊中的內容物件定義參數,而不是在ItemProcessor區段中包含的狀態內。
如果狀態機器使用 JSONPath Map 狀態,您可以從內容物件插入資訊,如下所示。
{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value", "ContextSource.$": "$$.Map.Item.Source" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }
對於 JSONata,您可以從 $states.context變數存取額外的映射狀態內容資訊:
{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex": "{% $states.context.Map.Item.Index %}", "ContextValue": "{% $states.context.Map.Item.Value %}", "ContextSource": "{% $states.context.Map.Item.Source %}" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }
如果您使用下列輸入執行先前的狀態機器,Index 和 Value 會插入到輸出中。
[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]
執行的輸出會傳回三個反覆運算中的每個 Index和 Value項目的值,如下所示:
[
{
"ContextIndex": 0,
"ContextValue": {
"who": "bob"
},
"ContextSource" : "STATE_DATA"
},
{
"ContextIndex": 1,
"ContextValue": {
"who": "meg"
},
"ContextSource" : "STATE_DATA"
},
{
"ContextIndex": 2,
"ContextValue": {
"who": "joe"
},
"ContextSource" : "STATE_DATA"
}
]
請注意, $states.context.Map.Item.Source 將是下列其中一項:
-
對於狀態輸入,值將為 :
STATE_DATA -
對於
Amazon S3 LIST_OBJECTS_V2使用 的Transformation=NONE,值會顯示儲存貯體的 S3 URI。例如:S3://bucket-name。 -
對於所有其他輸入類型,值將是 Amazon S3 URI。例如:
S3://bucket-name/object-key。