You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Step Functions中将Lambda返回的数组转换为后续流程可消费的MapInput格式

在AWS Step Functions中将Lambda返回的ID数组转换为目标MapInput格式

嘿,刚好我之前在Step Functions里处理过几乎一模一样的场景,不用额外写Lambda或者复杂逻辑,直接用Step Functions的内置功能就能搞定。下面给你两种方案,看你是要直接遍历处理,还是先把转换后的数组存起来供后续用:

方案1:直接在Map状态里完成转换(推荐,最简洁)

如果你接下来就要用这个数组做Map遍历,那直接在Map状态里配置就行,一步到位:

首先,告诉Map状态要遍历的数据源是Lambda返回的ids数组,然后给每个数组元素套上你需要的结构,同时引用已有的$.id和$.time参数。

完整的Map状态配置代码

{
  "Type": "Map",
  "ItemsPath": "$.result.ids", // 指定要遍历的数组路径
  "Parameters": {
    "tenant_id": "$$.Map.Item.Value", // 取当前遍历的ID值
    "run_id.$": "$.id", // 引用上下文里的run_id
    "run_timestamp.$": "$.time" // 引用上下文里的时间戳
  },
  "Iterator": {
    // 这里放你后续要执行的任务,比如调用其他Lambda或者状态
    "StartAt": "ProcessTenant",
    "States": {
      "ProcessTenant": {
        "Type": "Task",
        "Resource": "arn:aws:lambda:你的区域:你的账号:function:你的处理函数",
        "End": true
      }
    }
  },
  "End": true
}

关键说明:

  • ItemsPath: 指向Lambda返回的$.result.ids,让Map知道要遍历这个数组
  • $$.Map.Item.Value: 这是Step Functions Map状态的内置变量,代表当前正在处理的数组元素(比如第一个就是"1",第二个是"17")
  • run_id.$和run_timestamp.$: 用$前缀引用Step Functions上下文中已经存在的全局参数,确保每个Map项都能拿到相同的id和time

方案2:先把转换后的数组存到上下文(如果后续需要复用)

如果你不需要立刻遍历,而是想先把转换好的MapInput数组保存起来供后面的步骤用,可以用Pass状态结合内置的States.ArrayEach函数来实现:

Pass状态配置代码

{
  "Type": "Pass",
  "InputPath": "$.result.ids",
  "ResultSelector": {
    "MapInput.$": "States.ArrayEach($, function(x) { return { \"tenant_id\": x, \"run_id.$\": \"$.id\", \"run_timestamp.$\": \"$.time\" } })"
  },
  "ResultPath": "$.MapInput", // 把转换后的数组存到上下文的这个路径
  "End": true
}

关键说明:

  • States.ArrayEach: Step Functions的内置函数,遍历输入的数组,对每个元素执行后面的匿名函数,生成你需要的对象结构
  • ResultPath: 指定把转换后的结果存到上下文的$.MapInput位置,后面的步骤就可以直接用$.MapInput来引用这个数组了

两种方案都能完美生成你想要的MapInput格式,看你的实际流程需求选就行~


内容的提问来源于stack exchange,提问作者Jason Wade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:17:41