本文介绍了并行循环步骤和其相关使用示例。
介绍
并行循环(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"] }