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

AWS Step Functions报错:无法应用ReferencePath $.output问题排查

AWS Step Functions Map迭代报错解决方案

问题原因

你的报错Unable to apply ReferencePath $.output to input "task_abc"本质是数据类型不匹配:

  • 第一个Lambda返回的taskArray.Payload是字符串数组(比如["task_abc", ...]),Map迭代时每个元素是纯字符串"task_abc",而非JSON对象。
  • 你给第二个Lambda的LambdaInvoke设置了resultPath: '$.output',Step Functions会尝试把Lambda的结果(因Lambda返回None,默认返回输入也就是字符串"task_abc")赋值给输入数据的output属性。但字符串没有属性,JSONPath无法在字符串上执行属性赋值操作,因此报错。

解决方案

根据你的需求,有三种可行方案:

方案1:不保留第二个Lambda的输出

如果不需要保存第二个Lambda的执行结果,直接移除resultPath配置(默认会替换整个输入),或者显式设置resultPath: null(丢弃结果,保留原输入):

this.stepTwoState = new LambdaInvoke(this, 'stepTwoState', {
  lambdaFunction: this.infra.stepTwoLambda,
  // 移除resultPath,或设为null
});

方案2:将任务包装为JSON对象

修改第一个Lambda的输出,把任务字符串包装成JSON对象,比如:

// 原输出:["task_abc", "task_def"]
// 修改后输出:[{"taskId": "task_abc"}, {"taskId": "task_def"}]

这样Map迭代时每个输入是对象,resultPath: '$.output'就能正常给对象添加属性。

方案3:在Map迭代前包装字符串输入

如果无法修改第一个Lambda的输出,可在LambdaInvoke的Parameters里把字符串包装成对象,让输入变成可操作的JSON结构:

this.stepTwoState = new LambdaInvoke(this, 'stepTwoState', {
  lambdaFunction: this.infra.stepTwoLambda,
  parameters: {
    "task.$": "$" // 把原字符串输入包装成{"task": "task_abc"}
  },
  resultPath: '$.output'
});

此时输入是对象,就能正常给$.output赋值。

关于你的疑惑

为什么无法给"$.output"赋值字符串?因为JSONPath的属性操作($.xxx)仅适用于JSON对象或数组。当输入是纯字符串时,它没有可扩展的属性,Step Functions无法完成赋值操作,因此抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:12:35