在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
相关产品推荐
相关产品推荐

