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

使用CDK定义Step Functions工作流时如何传递执行ID给Lambda?

解决CDK中Step Functions传递Execution ID给Lambda的问题

你之前用inputPath的方式不对,因为inputPath用于筛选当前工作流的输入数据,而Step Functions的上下文变量(比如$$.Execution.id)不属于输入数据范畴,不能通过inputPath直接提取。正确的做法是通过参数映射或者构造自定义Payload来传递上下文变量,以下是两种可行的实现方式:

方式1:构造仅包含Execution ID的Payload

直接生成包含Execution ID的输入传递给Lambda,代码如下:

new tasks.LambdaInvoke(this, "InvokeLambdaTask", {
  lambdaFunction: myLambda,
  payload: sfn.TaskInput.fromObject({
    executionId: sfn.JsonPath.stringAt("$$.Execution.id")
  })
});

这种方式下,Lambda收到的事件会是{ "executionId": "当前工作流的Execution ID" }。

方式2:保留原有输入并追加Execution ID

如果需要保留工作流原有的输入数据,同时额外传入Execution ID,可以结合parameters属性实现:

new tasks.LambdaInvoke(this, "InvokeLambdaTask", {
  lambdaFunction: myLambda,
  // 保留原有输入作为基础
  payload: sfn.TaskInput.fromJsonPathAt("$"),
  // 追加Execution ID参数
  parameters: {
    "executionId.$": "$$.Execution.id"
  },
  // 确保原有Payload和自定义参数合并传递
  payloadResponseOnly: false
});

此时Lambda收到的事件会包含原有输入字段,同时新增executionId字段。

为什么之前的写法报错?

  • 第一种写法用inputPath: "$$.Execution.id":inputPath的作用是从工作流输入($)中提取数据,而$$代表上下文,Step Functions会尝试从输入中找Execution.id,自然找不到所以报错。
  • 第二种写法用inputPath: "$.Execution.id":工作流输入本身没有Execution字段,所以提示缺失该属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:40:37