本文介紹了並行迴圈步驟和其相關使用樣本。
介紹
並行迴圈(Foreach)步驟遍曆輸入中的某個數群組類型參數,對於數組中的每個元素並存執行其串列步驟。並行迴圈步驟類似於程式設計語言中的foreach,不同之處是這裡的迭代是並存執行的。
並行迴圈步驟的每次迭代執行都對應一個本地變數。執行並行迴圈步驟會對輸入參數裡的每個元素並發執行串列步驟。這些串列步驟會改變其迭代對應的本地變數。當所有分支執行結束後,可以通過輸出映射將迭代本地變數數群組轉換為並行步驟的輸出。
說明 並行迴圈步驟最大並發數限制為100。
並行步驟包含以下屬性:
- (必需)type:foreach表示該步驟是並行迴圈步驟。
- (必需)name:步驟名稱。
- (必需)iterationMapping:迭代映射。
- (必需)collection:定義輸入中的哪個參數作為迴圈的集合。
- (必需)item:定義當前元素以什麼名稱併入迭代輸入。
- (可選)index:定義當前位置以什麼名稱併入迭代輸入。
- (必需)steps:定義串列步驟。
- (可選)end:當前步驟結束後是否繼續執行其後定義的步驟。
- (可選)inputMappings:輸入映射。
- (可選)outputMappings:輸出映射。本步驟的
$local是數群組類型,其中的每個元素是一個JSON對象,記錄了每次迭代的結果。說明 如果未指定輸出映射,本步驟預設輸出為空白。
樣本
下面的樣本流程定義了一個並行迴圈步驟,這個並行步驟包含一個任務步驟。
version: v1
type: flow
steps:
- type: foreach
name: myforeach
iterationMapping:
collection: $.names
item: name
steps:
- type: task
name: toUpperCase
resourceArn: acs:fc:{region}:{account}:services/fnf_test/functions/toUpperCase
outputMappings:
- target: names
source: $local[*].name - 流程的輸入如下所示。由於
myforeach步驟沒有指定輸入映射,其輸入和流程輸入一樣。{ "names": ["a", "b", "c"] } toUpperCase沒有定義輸入映射,其輸入繼承父步驟輸入,系統根據迭代映射(iterationMapping)在每次執行迭代時,將當期元素(依次是a、b、c)為值,以name為key併入輸入。{ "name": "a", "names":["a","b","c"] } { "name": "b", "names":["a","b","c"] } { "name": "c", "names":["a","b","c"] }toUpperCase被執行了3次,輸出依次如下所示。{ "name": "A" } { "name": "B" } { "name": "C" }myforeach的本地變數是一個數群組類型,值如下所示。[ { "name": "A" }, { "name": "B" }, { "name": "C" } ]myforeach的輸出如下所示。由於流程沒有定義輸出和結果映射,這個輸出也是最後流程執行的輸出。{ "names": ["A", "B", "C"] }