如何在AWS Step Functions中映射数组并保留父ID?
使用AWS Step Functions Map状态实现数组遍历并保留顶层字段
要实现遍历bubble数组,同时在每个迭代输出中保留id字段,核心是利用Map状态的参数映射能力,结合JSONPath将顶层的id传递到每个子任务输入,并替换bubble为当前遍历的数组元素。
状态机核心配置
直接用以下JSON定义你的状态机,重点关注Map状态的ItemsPath和Parameters配置:
{ "Comment": "遍历bubble数组并保留id字段", "StartAt": "ProcessBubbles", "States": { "ProcessBubbles": { "Type": "Map", "ItemsPath": "$.bubble", // 指定要遍历的数组路径 "Parameters": { "id.$": "$.id", // 从顶层输入中获取id字段 "bubble.$": "$$.Map.Item.Value" // 获取当前遍历的bubble数组元素 }, "Iterator": { "StartAt": "ProcessSingleBubble", "States": { "ProcessSingleBubble": { "Type": "Pass", // 可替换为实际业务任务(如Lambda、自定义Task等) "End": true } } }, "End": true } } }
关键JSONPath说明
ItemsPath": "$.bubble":告诉Map状态要遍历输入中的bubble数组。"id.$": "$.id":将顶层输入的id字段直接复制到每个迭代的输入中。"bubble.$": "$$.Map.Item.Value":$$代表Step Functions的上下文对象,$$.Map.Item.Value指向当前正在遍历的数组元素,把它赋值给bubble字段,替换原来的数组。
效果验证
传入目标输入JSON后,Map状态会自动生成两个迭代输入,分别是:
{ "id": "123456", "bubble": { "type": "flex", "altText": "001" } }
和
{ "id": "123456", "bubble": { "type": "flex", "altText": "002" } }
完全符合预期需求。
注意事项
- 如果子任务需要调整输出格式,可以在
ProcessSingleBubble状态中配置ResultPath或OutputPath。 - 若使用STANDARD模式的Map状态,可通过
MaxConcurrency控制并发数(默认1000)。
内容的提问来源于stack exchange,提问作者user29989948
相关产品推荐
相关产品推荐

