AWS Step Functions - 在没有迭代发生时利用空的地图状态输出
AWS Step Functions - Utilize empty Map state output when no iterations occur
我有一个包含 3 个步骤的工作流程:
- 任务 - 上传 N 个文件
- 生成 N 个作业定义的数组,用作第 2 步地图状态的输入
- 地图 - 处理每个作业
- 由于地图状态,这被执行了N次
- 任务 - 做一些其他事情
我希望的是,如果在第2步中出现任何迭代,则只执行第3步。这样设计的方式,第1步通常不会产生任何输出,因此第2步基本上被跳过。
我注意到在我概述的场景中,第 2 步的输出只是 []
,通常它包含大量关于迭代的信息。是否可以执行这种工作流程?
步骤1后的选择状态检查Map中是否至少有一条记录,我们无法检查数组的长度,因此在map的第一个元素上使用isPresent
$.inputForMap[0]
步骤定义
{
"StartAt":"Dummy Step 1 Output",
"States":{
"Dummy Step 1 Output":{
"Type":"Pass",
"Result":[
"iter 1",
"iter2"
],
"ResultPath":"$.inputForMap",
"Next":"does map has atleast one record?"
},
"does map has atleast one record?":{
"Type":"Choice",
"Choices":[
{
"Variable":"$.inputForMap[0]",
"IsPresent":true,
"Next":"loop on map"
}
],
"Default":"End of Step Function"
},
"End of Step Function":{
"Type":"Pass",
"End":true
},
"Step three":{
"Type":"Pass",
"Next":"End of Step Function"
},
"loop on map":{
"Type":"Map",
"Next":"Step three",
"Iterator":{
"StartAt":"Step 2 - Looping on map",
"States":{
"Step 2 - Looping on map":{
"Type":"Pass",
"End":true
}
}
},
"ItemsPath":"$.inputForMap",
"MaxConcurrency":1
}
}
}
当Map不为空时
当地图为空时
我有一个包含 3 个步骤的工作流程:
- 任务 - 上传 N 个文件
- 生成 N 个作业定义的数组,用作第 2 步地图状态的输入
- 地图 - 处理每个作业
- 由于地图状态,这被执行了N次
- 任务 - 做一些其他事情
我希望的是,如果在第2步中出现任何迭代,则只执行第3步。这样设计的方式,第1步通常不会产生任何输出,因此第2步基本上被跳过。
我注意到在我概述的场景中,第 2 步的输出只是 []
,通常它包含大量关于迭代的信息。是否可以执行这种工作流程?
步骤1后的选择状态检查Map中是否至少有一条记录,我们无法检查数组的长度,因此在map的第一个元素上使用isPresent
$.inputForMap[0]
步骤定义
{
"StartAt":"Dummy Step 1 Output",
"States":{
"Dummy Step 1 Output":{
"Type":"Pass",
"Result":[
"iter 1",
"iter2"
],
"ResultPath":"$.inputForMap",
"Next":"does map has atleast one record?"
},
"does map has atleast one record?":{
"Type":"Choice",
"Choices":[
{
"Variable":"$.inputForMap[0]",
"IsPresent":true,
"Next":"loop on map"
}
],
"Default":"End of Step Function"
},
"End of Step Function":{
"Type":"Pass",
"End":true
},
"Step three":{
"Type":"Pass",
"Next":"End of Step Function"
},
"loop on map":{
"Type":"Map",
"Next":"Step three",
"Iterator":{
"StartAt":"Step 2 - Looping on map",
"States":{
"Step 2 - Looping on map":{
"Type":"Pass",
"End":true
}
}
},
"ItemsPath":"$.inputForMap",
"MaxConcurrency":1
}
}
}
当Map不为空时
当地图为空时