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

如何在Step Functions中实现Lambda函数间的数据传递

如何在Step Functions中传递Lambda输出作为下一个Lambda的输入

嘿,很高兴你在探索用Step Functions构建调度引擎!这确实是个很靠谱的方案,关于你问的把第一个Lambda的输出传给第二个Lambda的问题,其实Step Functions本身就内置了这种数据流处理的能力,我给你拆解下具体怎么做:

核心思路

Step Functions的状态机会自动维护工作流的上下文数据,每个Task(比如Lambda调用)的输出会被写入上下文,你只需要通过路径表达式就能把这些数据传递给下一个任务。

具体步骤

1. 确保第一个Lambda返回结构化输出

首先,第一个Lambda要返回清晰的JSON格式数据,这样Step Functions能轻松解析并引用其中的字段,示例代码如下:

def lambda_handler(event, context):
    # 这里写你的业务处理逻辑
    return {
        "processed_data": "some-processed-value",
        "metadata": {
            "timestamp": 1699999999,
            "status": "success"
        }
    }

2. 在状态机中配置输入传递

在Step Functions的状态机定义里,你可以通过InputPath、Parameters或者ResultPath来灵活控制数据的传递:

方式一:传递完整的Lambda输出

如果想把第一个Lambda的所有输出直接传给第二个Lambda,只需要在第二个Lambda的Task状态里设置InputPath:

{
  "Comment": "调度引擎工作流",
  "StartAt": "FirstLambdaTask",
  "States": {
    "FirstLambdaTask": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:你的区域:账号ID:function:第一个Lambda函数名",
      "Next": "SecondLambdaTask"
    },
    "SecondLambdaTask": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:你的区域:账号ID:function:第二个Lambda函数名",
      "InputPath": "$.Payload",
      "End": true
    }
  }
}

这里$.Payload是因为Step Functions会把Lambda的返回值自动包装在Payload字段里,用这个路径就能拿到完整的输出内容。

方式二:传递特定字段

如果你只需要第一个Lambda输出里的某个字段(比如processed_data),可以修改InputPath为对应的路径:

"InputPath": "$.Payload.processed_data"

这样第二个Lambda收到的输入就只是"some-processed-value"这个单一值。

方式三:自定义输入结构

要是你想重新组合输入数据(比如加上额外的固定标识字段),可以用Parameters来构建新的输入结构:

"Parameters": {
  "input_from_first": "$.Payload.processed_data",
  "workflow_name": "DailySchedulingEngine",
  "metadata": "$.Payload.metadata"
}

此时第二个Lambda收到的输入会是:

{
  "input_from_first": "some-processed-value",
  "workflow_name": "DailySchedulingEngine",
  "metadata": {
    "timestamp": 1699999999,
    "status": "success"
  }
}

3. 测试验证

你可以在Step Functions控制台手动触发状态机,然后进入每个Task的详情页,查看输入和输出字段,确认数据是否正确传递。如果有问题,还能通过CloudWatch日志排查Lambda的执行情况。

小提示

  • 如果你的Lambda是异步调用的,记得在Task状态里配置InvocationType: Event,但这种情况下Step Functions不会等待Lambda完成,也就拿不到输出,所以如果需要传递数据,建议用默认的同步调用方式。
  • 路径表达式遵循JSONPath语法,你可以用它做更复杂的字段筛选和组合。

内容的提问来源于stack exchange,提问作者Ajit Goel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:19:04