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

在SST中如何将AWS Step Functions StartExecutionCommand的输入参数传递给第一个LambdaInvoke状态的event?

在SST中如何将AWS Step Functions StartExecutionCommand的输入参数传递给第一个LambdaInvoke状态的event?

我之前也碰到过一模一样的问题,在SST里配置Step Functions的LambdaInvoke状态时,很容易在参数映射的语法上踩坑,尤其是和原生Step Functions的定义逻辑有小差异,容易搞混。

首先得明确:SST的sst.aws.StepFunctions.lambdaInvoke方法里,payload参数是用来传递静态数据的,如果要动态引用Step Functions的执行输入(也就是你调用StartExecutionCommand时传入的输入对象),必须用parameters字段来配置,并且要遵循Step Functions的参数路径语法。

正确的配置方式

如果你想把完整的执行输入传递给Lambda的event参数,应该这么写:

sst.aws.StepFunctions.lambdaInvoke("FirstLambdaStep", {
  function: "your-lambda-function-id", // 对应你定义的Lambda函数ID
  parameters: {
    "Payload.$": "$"
  }
})

为什么这样写?

  • parameters字段会直接映射到Step Functions状态定义里的Parameters属性,而"Payload.$": "$"是Step Functions的标准语法:$代表当前状态的输入(也就是执行时传入的StartExecution输入),. $后缀表示这是一个动态路径引用,而不是字面量字符串。
  • 这样配置后,Step Functions会把执行输入完整地作为Lambda的调用Payload传递,你的Lambda handler里的event参数就能拿到所有输入数据了。

传递特定字段的例子

如果只需要把输入里的某个字段(比如Foo)传递给Lambda,可以这样写:

parameters: {
  "Payload.$": "$.Foo"
}

如果要传递结构化的多个字段,也可以组合路径:

parameters: {
  "Payload.$": {
    fooValue: "$.Foo",
    barValue: "$.Bar"
  }
}

你之前的问题出在哪?

你之前尝试的payload: { "$": "$" }或者payload: { "Payload.$": "$" },都是用了payload参数,SST会把这些内容当作静态数据直接传递给Lambda,所以你看到的日志里event是字面量的{"$": "$"},而不是动态引用的输入数据。

验证方法

配置完成后运行npx sst dev部署,在AWS控制台触发Step Functions执行,传入测试输入比如{"Foo": "test-data", "Bar": 123},然后查看Lambda的CloudWatch日志,就能看到event参数里包含你传入的输入数据了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:53:10