選取您的 Cookie 偏好設定

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

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

在 Step Functions 工作流程的內嵌模式中使用映射狀態

焦點模式
在 Step Functions 工作流程的內嵌模式中使用映射狀態 - AWS Step Functions

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

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

管理狀態和轉換資料

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

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

根據預設, Map 狀態會以內嵌模式執行。在內嵌模式中,映射狀態僅接受JSON陣列做為輸入。它會從工作流程中的上一個步驟接收此陣列。在此模式中,狀態的每個反覆運算都會在包含 Map 狀態的工作流程內容中Map執行。Step Functions 會將這些反覆運算的執行歷史記錄新增至父工作流程的執行歷史記錄。

在此模式中, Map 狀態最多支援 40 個並行反覆運算。

設定為內嵌Map的狀態稱為內嵌映射狀態。如果工作流程的執行歷史記錄不超過 25,000 個項目,或者如果您不需要超過 40 個並行反覆運算,請在內嵌模式中使用 Map 狀態。

如需使用內嵌映射狀態的簡介,請參閱教學課程 使用內嵌映射重複動作

本主題中的關鍵概念

內嵌模式

狀態的有限並行模式Map。在此模式中,狀態的每個反覆運算都會在包含 Map 狀態的工作流程內容中Map執行。Step Functions 會將這些反覆運算的執行歷史記錄新增至父工作流程的執行歷史記錄。 Map 狀態預設會在內嵌模式中執行。

此模式僅接受JSON陣列做為輸入,並支援最多 40 個並行反覆運算。

內嵌映射狀態

Map 狀態設定為內嵌模式。

地圖工作流程

狀態針對每次反覆Map執行的一組步驟。

映射狀態反覆運算

Map 狀態內定義的工作流程重複。

內嵌映射狀態欄位

若要在工作流程中使用內嵌映射狀態,請指定一個或多個這些欄位。除了常見狀態欄位之外,您還可以指定這些欄位

Type (必要)

設定狀態類型,例如 Map

ItemProcessor
(必要)

包含下列指定Map狀態處理模式和定義的JSON物件。

定義包含一組步驟,可重複處理每個陣列項目。

  • ProcessorConfig – 選擇性JSON物件,指定 Map 狀態的處理模式。此物件包含 Mode子欄位。此欄位預設為 INLINE,這會在內嵌模式中使用 Map 狀態。

    在此模式中,任何反覆運算的失敗都會導致Map狀態失敗。當Map狀態失敗時,所有反覆運算都會停止。

  • StartAt – 指定字串,指出工作流程中的第一個狀態。此字串區分大小寫,且必須符合其中一個狀態物件的名稱。此狀態會先針對資料集中的每個項目執行。您提供給 Map 狀態的任何執行輸入會先傳遞至 StartAt 狀態。

  • States – 包含逗號分隔之一組狀態的JSON物件。在此物件中,您可以定義 Map workflow

    注意
    • ItemProcessor 欄位內的狀態只能互相轉換。ItemProcessor 欄位外的任何狀態都無法轉換為其中的狀態。

    • ItemProcessor 欄位會取代現在已棄用Iterator的欄位。雖然您可以繼續包含使用 Iterator 欄位Map的狀態,但強烈建議您使用 取代此欄位ItemProcessor

      Step Functions Local 目前不支援 ItemProcessor 欄位。建議您將 Iterator 欄位與 Step Functions Local 搭配使用。

Items (選用,JSONata僅限 )

必須評估為JSON陣列的陣列或JSONata表達式。

ItemsPath (選用,JSONPath僅限 )

使用 JsonPath 語法指定參考路徑。此路徑會選取節點JSON,其中包含狀態輸入內的項目陣列。如需詳細資訊,請參閱ItemsPath (JSONPath僅限地圖)

ItemSelector
(選用)

覆寫輸入陣列項目的值,然後再傳遞至每個Map狀態反覆運算。

在此欄位中,您可以指定有效的 JSON ,其中包含一組鍵/值對。這些配對可以包含下列任何項目:

  • 您在狀態機器定義中定義的靜態值。

  • 使用路徑從狀態輸入中選取的值。

  • 內容物件存取的值。

如需詳細資訊,請參閱ItemSelector (地圖)

ItemSelector 欄位會取代現在已棄用Parameters的欄位。雖然您可以繼續包含使用 Parameters 欄位Map的狀態,但強烈建議您使用 取代此欄位ItemSelector

MaxConcurrency (選用)

指定整數值,提供可平行執行之Map狀態反覆運算的上限。例如,MaxConcurrency值 10 會將Map狀態限制為一次執行 10 個並行反覆運算。

在 JSONata 狀態中,您可以指定評估為整數的JSONata表達式。

注意

並行反覆運算可能會受到限制。發生這種情況時,某些反覆運算會在先前的反覆運算完成之前開始。當您的輸入陣列有超過 40 個項目時,發生這種情況的可能性會增加。

若要實現更高的並行,請考慮 分散式模式

預設值為 0,不限制並行。Step Functions 會盡可能同時叫用反覆運算。

MaxConcurrency 的值會為每個陣列元素1叫用ItemProcessor一次 。陣列中的項目會依其在輸入中的顯示順序進行處理。Step Functions 在完成先前的反覆運算之前,不會啟動新的反覆運算。

MaxConcurrencyPath (選用,JSONPath僅限 )

如果您想要使用參考路徑從狀態輸入動態提供最大並行值,請使用 MaxConcurrencyPath。解析後,參考路徑必須選取值為非負整數的欄位。

注意

Map 狀態不能同時包含 MaxConcurrencyMaxConcurrencyPath

ResultPath (選用,JSONPath僅限 )

指定在輸入中存放Map狀態反覆運算輸出的位置。然後,映射狀態會篩選OutputPath欄位指定的輸入,如果指定的話。然後,它會使用篩選的輸入做為狀態的輸出。如需詳細資訊,請參閱輸入和輸出處理

ResultSelector (選用,JSONPath僅限 )

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

提示

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

Retry (選用)

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

注意

如果您為內嵌映射狀態定義重試器,則重試政策會套用至所有Map狀態反覆運算,而非僅失敗的反覆運算。例如,您的Map狀態包含兩個成功的反覆運算和一個失敗的反覆運算。如果您已定義 Map 狀態Retry的欄位,則重試政策會套用至所有三個Map狀態反覆運算,而不只是失敗的反覆運算。

Catch (選用)

稱為 Catcher 的物件陣列,可定義後援狀態。如果狀態遇到執行時間錯誤,而且沒有重試政策,或他們的重試政策已用盡,則會執行擷取器。如需詳細資訊,請參閱備用狀態

Output (選用,JSONata僅限 )

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

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

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

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

Assign (選用)

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

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

已棄用的欄位

注意

雖然您可以繼續包含使用下列欄位Map的狀態,但強烈建議您IteratorItemProcessorParameters 取代 ItemSelector

Iterator

指定JSON物件,定義一組處理陣列中每個元素的步驟。

Parameters

指定索引鍵值對的集合,其中的值可以包含下列任何項目:

  • 您在狀態機器定義中定義的靜態值。

  • 使用路徑從輸入中選取的值。

內嵌映射狀態範例 (JSONPath)

請考慮下列在內嵌模式下執行之Map狀態的輸入資料。

{ "ship-date": "2016-03-14T01:59:00Z", "detail": { "delivery-partner": "UQS", "shipped": [ { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, { "prod": "S39", "dest-code": 9511, "quantity": 40 }, { "prod": "R31", "dest-code": 9833, "quantity": 12 }, { "prod": "R40", "dest-code": 9860, "quantity": 887 }, { "prod": "R40", "dest-code": 9511, "quantity": 1220 } ] } }

根據先前的輸入,下列範例中Map的狀態會針對 shipped 欄位中陣列的每個項目叫用名為 ship-val 一次的 AWS Lambda 函數。

"Validate All": { "Type": "Map", "InputPath": "$.detail", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:ship-val:$LATEST" }, "End": true } } }, "End": true, "ResultPath": "$.detail.shipped", "ItemsPath": "$.shipped" }

狀態的每個反覆運算都會Map傳送陣列中的項目,該項目會隨 ItemsPath 欄位一起選取,做為 ship-val Lambda 函數的輸入。下列值是 Map 狀態傳送至 Lambda 函數呼叫的輸入範例:

{ "prod": "R31", "dest-code": 9511, "quantity": 1344 }

完成後,Map狀態的輸出為JSON陣列,其中每個項目都是反覆運算的輸出。在此情況下,此陣列包含 ship-val Lambda 函數的輸出。

使用 的內嵌映射狀態範例 ItemSelector

假設上一個範例中的 ship-val Lambda 函數也需要有關寄件快遞的資訊。此資訊是每次反覆運算陣列中項目的補充。您可以包含來自輸入的資訊,以及Map狀態目前反覆運算的特定資訊。請注意下列範例中ItemSelector的欄位:

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "ResultPath": "$.detail.shipped", "ItemSelector": { "parcel.$": "$$.Map.Item.Value", "courier.$": "$.delivery-partner" }, "ItemProcessor": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "End": true }

ItemSelector 區塊會以JSON節點取代反覆運算的輸入。此節點同時包含內容物件的目前項目資料,以及Map狀態輸入delivery-partner欄位的快遞資訊。以下是單一反覆運算的輸入範例。Map 狀態會將此輸入傳遞給 ship-val Lambda 函數的呼叫。

{ "parcel": { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, "courier": "UQS" }

在先前的內嵌映射狀態範例中, ResultPath 欄位會以與輸入相同的格式產生輸出。不過,它會使用陣列覆寫 detail.shipped 欄位,其中每個元素是每個反覆 ship-val Lambda 調用的輸出。

如需使用內嵌映射狀態及其欄位的詳細資訊,請參閱以下內容。

內嵌Map狀態輸入和輸出處理

對於指定Map狀態, 會InputPath選取狀態輸入的子集。

Map 狀態的輸入必須包含JSON陣列。Map 狀態會針對陣列中的每個項目執行 ItemProcessor區段一次。如果您指定 ItemsPath 欄位,Map狀態會選取輸入中要反覆運算的陣列位置。如果未指定,則 ItemsPath 的值為 $,而 ItemProcessor 區段預期陣列是唯一的輸入。如果您指定 ItemsPath 欄位,其值必須是參考路徑Map 狀態會在套用 之後,將此路徑套用至有效輸入InputPath。必須ItemsPath識別值為JSON陣列的欄位。

根據預設,每個反覆運算的輸入是 ItemsPath值所識別陣列欄位的單一元素。您可以使用 ItemSelector (地圖) 欄位覆寫此值。

完成後,Map狀態的輸出為JSON陣列,其中每個項目都是反覆運算的輸出。

如需內嵌映射狀態輸入和輸出的詳細資訊,請參閱以下內容:

下一個主題:

分散式模式

上一個主題:

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