全部產品
Search
文件中心

CloudFlow:並行迴圈步驟

更新時間:Jul 06, 2024

本文介紹了並行迴圈步驟和其相關使用樣本。

介紹

並行迴圈(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)在每次執行迭代時,將當期元素(依次是abc)為值,以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"]
    }