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

如何在AWS Step Functions ASL中配置Lambda结果路径并保留原有数据

问题描述

向AWS Lambda传入的输入JSON:

{
    "level1": {
        "level2_a": {
            "data1": "data1",
            "data2": "data2"
        },
        "level2_b": 42
    }
}

Lambda执行后输出的Payload:

{
    "Payload": {
        "data1": "data1_changed",
        "data2": "data2_changed"
    }
}

需求:将level1.level2_a替换为Lambda输出的Payload内容,同时保留level1.level2_b,最终得到如下JSON:

{
    "level1": {
        "level2_a": {
            "data1": "data1_changed",
            "data2": "data2_changed"
        },
        "level2_b": 42
    }
}

尝试以下两种配置均未达到预期:

  1. 配置一:
"ResultSelector": {
    "$": "$.Payload"
},
"ResultPath": "$.level1.level2_a"
  1. 配置二:
"ResultSelector": "$.Payload",
"ResultPath": "$.level1.level2_a"

此前使用以下配置会丢失level2_b:

"ResultSelector": {
    "level2_a.$": "$.Payload"
},
"ResultPath": "$.level1"
正确ASL配置方案

使用如下配置即可实现需求:

"LambdaTask": {
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "FunctionName": "你的Lambda函数ARN",
    "Payload.$": "$"
  },
  "ResultSelector": "$.Payload",
  "ResultPath": "$.level1.level2_a",
  "Next": "后续任务名称"
}

配置说明

  • Parameters:将当前状态机的完整输入传递给Lambda函数,确保Lambda能获取到所需的原始数据。
  • ResultSelector: 提取Lambda输出中的Payload部分,也就是更新后的data1和data2数据。
  • ResultPath: 指定将提取的结果替换到原状态树的$.level1.level2_a节点,仅覆盖该节点,不会影响level1下的其他属性(如level2_b)。

如果你的Step Functions版本不支持直接用字符串路径作为ResultSelector,可以改用对象形式的ResultSelector:

"ResultSelector": {
  "data1.$": "$.Payload.data1",
  "data2.$": "$.Payload.data2"
},
"ResultPath": "$.level1.level2_a"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:30:20