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

AWS Step Functions:如何将Lambda输出指定为顶层属性?

问题描述

我有一个返回JSON对象数组的Lambda函数,希望将其结果以指定属性名传入AWS Step Functions。

  • 执行Lambda的任务输入:
{"foo": "abc", "bar": "def"}
  • 期望输出:保留原有字段,并新增lambdaOutput字段存储Lambda返回的数组
{"foo": "abc", "bar": "def", "lambdaOutput": [...]}

我尝试使用以下ResultSelector和ResultPath配置:

"ResultSelector": {"lambdaOutput.$": "$.Payload"}, "ResultPath": "$.lambdaOutput"

但生成了嵌套结构,想知道问题出在哪里?

问题原因与解决方法

问题原因

同时使用ResultSelector和ResultPath是导致嵌套的核心原因:

  1. ResultSelector会先将Lambda的返回结果($.Payload)包装成{"lambdaOutput": [...]}的结构
  2. 随后ResultPath: "$.lambdaOutput"会把这个包装后的对象赋值给原输入的lambdaOutput字段
    最终得到的结构会是{"foo":"abc", "bar":"def", "lambdaOutput": {"lambdaOutput": [...]}},也就是你看到的嵌套。

解决方法

方法一:仅使用ResultPath(推荐)

不需要ResultSelector,直接通过ResultPath指定Lambda结果的存储位置即可:

"ResultPath": "$.lambdaOutput"

该配置会直接把Lambda返回的$.Payload(即目标JSON数组)赋值给原输入的lambdaOutput字段,同时完整保留原输入的所有字段,最终输出完全符合你的期望。

方法二:结合ResultSelector使用(适用于需额外结果转换场景)

如果确实需要用ResultSelector做额外的结果处理,需将ResultPath设为"$",并在ResultSelector中手动声明所有要保留的原字段:

"ResultSelector": {
  "foo.$": "$.foo",
  "bar.$": "$.bar",
  "lambdaOutput.$": "$.Payload"
},
"ResultPath": "$"

这种方式需要逐一列出原输入的所有字段,不如第一种方法简洁,仅在有特殊转换需求时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:23:11