本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 ResultPath 「Step Functions」工作流程中指定狀態
狀態的輸出可以是其輸入的複本、所產生的結果 (例如,從 Task
狀態之 Lambda 函數的輸出),或輸入和結果的結合。使用 ResultPath
以控制哪些組合會傳遞至狀態輸出。
以下狀態類型可以產生結果,並可包含 ResultPath:
使用 ResultPath
合併任務結果與任務輸入,或選取其中一個。您提供給 ResultPath
的路徑會控制哪些資訊會傳遞到輸出。
注意
ResultPath
僅限於使用參考路徑,這會限制範圍,以便它只能識別中的單個節點JSON。請參考路徑參閱 Amazon 各州語言。
這些範例是以建立使用 Lambda 的 Step Functions 狀態機教學課程中描述的狀態機器和 Lambda 函數為基礎。完成該教學,並透過在 ResultPath
欄位中嘗試不同路徑來測試不同輸出。
使用 ResultPath 來:
用 ResultPath 於將輸入取代為結果
如果您不指定 ResultPath
,預設行為會視為您已指定 "ResultPath": "$"
。由於這會告訴狀態以結果取代整個輸入,所以會以來自任務結果的結果完全取代狀態輸入。
下圖顯示 ResultPath
如何以任務結果完全取代輸入。
使用中所述的狀態機和 Lambda 函數建立使用 Lambda 的 Step Functions 狀態機,並將服務整合類型變更為 AWS SDKLambda 函數的整合。若要這樣做,請在Task
狀態Resource
欄位中指定 Lambda 函數 Amazon 資源名稱 (ARN),如下列範例所示。使用 AWS SDK整合可確保Task
狀態結果僅包含不含任何中繼資料的 Lambda 函數輸出。
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:us-east-2:123456789012:function:HelloFunction",
"End": true
}
}
}
然後,傳遞以下輸入:
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
Lambda 函數會提供下列結果。
"Hello, AWS Step Functions!"
提示
您可以在 Step Functions 控制台
如果ResultPath
未在狀態中指定,或者如果"ResultPath":
"$"
已設定,則狀態的輸入會由 Lambda 函數的結果取代,且狀態的輸出如下所示。
"Hello, AWS Step Functions!"
注意
ResultPath
是在傳遞至輸出之前,用於在輸入中包含來自結果的內容。但是,如果未指定 ResultPath
,預設會是取代整個輸入。
捨棄結果並保留原始輸入
如果您將 ResultPath
設定為 null
,其會將原始輸入傳遞給輸出。使用 "ResultPath": null
時,狀態的輸入承載會直接複製到輸出,而不考慮結果。
下圖顯示 Null ResultPath
會如何將輸入直接複製到輸出。
用 ResultPath 於將結果包含在輸入中
下圖顯示 ResultPath
如何在輸入中包含結果。
使用建立使用 Lambda 的 Step Functions 狀態機教程中描述的狀態機和 Lambda 函數,我們可以傳遞以下輸入。
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
Lambda 函數的結果如下。
"Hello, AWS Step Functions!"
為了保留輸入,插入 Lambda 函數的結果,然後將組合傳遞JSON到下一個狀態,我們可以設置ResultPath
為以下內容。
"ResultPath": "$.taskresult"
這包括 Lambda 函數與原始輸入的結果。
{ "comment": "This is a test of input and output of a Task state.", "details": "Default behavior example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!" }
Lambda 函數的輸出會附加至原始輸入,做為的值taskresult
。輸入 (包括新插入值) 會傳遞到下一個狀態。
您也可以在子節點的輸入中插入結果。將 ResultPath
設定為下列。
"ResultPath": "$.strings.lambdaresult"
使用以下輸入開始執行。
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions" }
Lambda 函數的結果會插入為輸入中strings
節點的子系。
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!" }, "who": "AWS Step Functions" }
state 輸出現在包括原JSON始輸入,其結果為子節點。
用 ResultPath 於使用結果更新輸入中的節點
下圖顯示了如ResultPath
何使用任務結果中的值更新輸入中現有JSON節點的值。
使用建立使用 Lambda 的 Step Functions 狀態機教程中描述的狀態機和 Lambda 函數的示例,我們可以傳遞以下輸入。
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
Lambda 函數的結果如下。
Hello, AWS Step Functions!
我們可以覆寫現有節點JSON,而不是保留輸入並將結果作為新節點插入。
例如,就像省略或設定 "ResultPath": "$"
會覆寫整個節點一樣,您可以指定要使用結果覆寫的個別節點。
"ResultPath": "$.comment"
由於comment
節點已存在於狀態輸入中,因此設ResultPath
定"$.comment"
會以 Lambda 函數的結果取代輸入中的該節點。如果沒有使用 OutputPath
進一步篩選,則將以下會傳遞至輸出。
{ "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions", }
"Hello, AWS
Step Functions!"
在狀態輸出中"This is a test of the input and output
of a Task state."
,comment
節點的值會由 Lambda 函數的結果取代。
用於 ResultPath 將錯誤和輸入都包含在 Catch
使用 Step Functions 狀態機處理錯誤條件 教學示範如何使用狀態機器截獲錯誤。在某些情況下,您可能想要保留原始輸入的錯誤。在 Catch
中使用 ResultPath
以包含錯誤與原始輸入,而不是將其取代。
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]
如果之前的 Catch
陳述式截獲錯誤,它會在狀態輸入內的 error
節點包含結果。例如,透過以下輸入:
{"foo": "bar"}
在截獲錯誤時的狀態輸出如下。
{ "foo": "bar", "error": { "Error": "
Error here
" } }
如需錯誤處理的詳細資訊,請參閱以下內容: