選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

平行工作流程狀態

焦點模式
平行工作流程狀態 - AWS Step Functions

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

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

管理狀態和轉換資料

Step Functions 最近新增了變數和 JSONata 來管理狀態和轉換資料。

了解如何使用變數傳遞資料,以及使用 JSONata 轉換資料

Parallel 狀態 ("Type": "Parallel") 可用來在您的狀態機器中新增個別的執行分支。

除了常見狀態欄位以外,Parallel 狀態還引進下列額外欄位。

Branches (必要)

指定要以平行方式執行狀態機器的物件陣列。每個這類狀態機器物件必須具有名為 StartAtStates 的欄位,其意義完全如同狀態機器最上層中的欄位。

Parameters (選用,僅限 JSONPath)

用來將資訊傳遞至Branches陣列中定義的狀態機器。

Arguments (選用,僅限 JSONata)

用來將資訊傳遞給已連線資源的 API 動作。值可以包含 JSONata 表達式。如需詳細資訊,請參閱在 Step Functions 中使用 JSONata 轉換資料

Output (選用,僅限 JSONata)

用來指定和轉換 狀態的輸出。指定時,該值會覆寫狀態輸出預設值。

輸出欄位接受任何 JSON 值 (物件、陣列、字串、數字、布林值、 null)。如果被 {% %} 個字元包圍,則任何字串值,包括物件或陣列內的字串值,都將評估為 JSONata。

輸出也直接接受 JSONata 表達式,例如:「輸出」:「{% jsonata 表達式 %}」

如需詳細資訊,請參閱在 Step Functions 中使用 JSONata 轉換資料

Assign (選用)

用來存放變數。Assign 欄位接受 JSON 物件,其中包含定義變數名稱及其指派值的鍵/值對。任何字串值,包括物件或陣列內的值,在被{% %}字元包圍時,都會評估為 JSONata

如需詳細資訊,請參閱使用變數在狀態之間傳遞資料

ResultPath (選用,僅限 JSONPath)

指定要將分支的輸出放置於何處 (在輸入中)。輸入會先依據 OutputPath 欄位 (如果有的話) 所指定篩選,而後做為狀態的輸出。如需詳細資訊,請參閱輸入和輸出處理

ResultSelector (選用,僅限 JSONPath)

傳遞金鑰值對的集合,其中值是靜態的或從結果中選取。如需詳細資訊,請參閱ResultSelector

Retry (選用)

稱為 Retrier 的物件陣列,這類物件可定義狀態發生執行時間錯誤時的重試政策。如需詳細資訊,請參閱使用重試和 Catch 的狀態機器範例

Catch (選用)

稱為 Catcher 的物件陣列,這類物件可定義在狀態發生執行時間錯誤以及其重試政策已耗盡或未定義時執行的備用狀態。如需詳細資訊,請參閱備用狀態

Parallel 狀態會導致 AWS Step Functions 執行每個分支,從該分支StartAt欄位中名為 的狀態開始,並盡可能同時執行,等到所有分支終止 (到達終端機狀態) 後再處理Parallel狀態Next的欄位。

Parallel 狀態範例

{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } } }

在這個範例中,LookupAddressLookupPhone 分支會以平行方式執行。以下是 Step Functions 主控台中的視覺化工作流程外觀。

平行工作流程範例的視覺化圖表。

每個分支必須可獨立自主運作。一個 Parallel 狀態分支中的狀態不得有以該分支外部欄位為目標的 Next 欄位,而且分支外部的任何其他狀態也不能轉移到該分支。

Parallel 狀態輸入和輸出處理

Parallel 狀態會為每個分支提供一份自有的輸入資料 (可由 InputPath 欄位隨時修改)。它會產生陣列形式的輸出,其中包含分支輸出的每個分支都有一個元素。所有元素不需要都是相同的類型。按照一般方式使用 ResultPath 欄位,即可將輸出陣列插入輸入資料中 (以及整個當作 Parallel 狀態的輸出傳送) (請參閱輸入和輸出處理)。

{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Subtract", "End": true } } } ] } } }

如果 FunWithMath 狀態取得陣列 [3, 2] 做為輸入,則 AddSubtract 狀態都會收到該陣列做為輸入。AddSubtract任務的輸出會是陣列元素 3 和 2 之間的總和和和差異,也就是 51,而 Parallel 狀態的輸出會是陣列。

[ 5, 1 ]
提示

如果您在狀態機器中使用的平行或映射狀態傳回陣列陣列,您可以使用 ResultSelector 欄位將其轉換為平面陣列。如需詳細資訊,請參閱平面化陣列陣列

錯誤處理

如有任何分支因為未處理的錯誤或經由轉移到 Fail 狀態而失敗,則整個 Parallel 狀態會被視為失敗,而且其所有分支都會停止。如果錯誤不是由Parallel狀態本身處理,Step Functions 會以錯誤停止執行。

注意

當平行狀態失敗時,調用 Lambda 函數會繼續執行,而且處理任務權杖的活動工作者不會停止。

  • 若要停止長時間執行的活動,請使用活動訊號來偵測 Step Functions 是否已停止其分支,並停止正在處理任務的工作者。如果狀態失敗,則呼叫 SendTaskHeartbeatSendTaskSuccessSendTaskFailure 會拋出錯誤。請參閱活動訊號錯誤

  • 無法停止執行 Lambda 函數。如果您已實作後援,請使用 Wait 狀態,以便在 Lambda 函數完成後進行清除工作。

下一個主題:

Map

上一個主題:

Choice
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。