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

如何在Amazon Step Functions中从Lambda函数获取并传递变量?

问题1:Choice步骤不支持ResultPath,如何存储product ID?

Choice类型确实没有ResultPath属性,要保留之前生成的product ID,有两种实用方案:

方案1:在第一个Lambda任务中直接保留上下文

给LambdaFunction_AddToCart这个Task步骤添加ResultPath,把Lambda的输出(包含productID)合并到原始输入中,而非直接替换整个上下文。这样后续步骤既能拿到statusCode做判断,也能全程保留productID。

示例修改:

"LambdaFunction_AddToCart": {
  "Type": "Task",
  "Resource": "arn:aws:lambda:xxx",
  "Parameters": {
    "product_name": "Television",
    "product_price": 1500
  },
  "ResultPath": "$.cartData", // 将Lambda输出存入cartData字段,保留原始上下文
  "Next": "CheckStatusFrom_AddToCart"
}

之后Choice步骤检查状态时,变量路径改为$.cartData.statusCode,productID可通过$.cartData.productID获取。

方案2:用Pass步骤中转并保留变量

如果一定要用Pass步骤,注意不能直接在Result里写JSONPath(会被当成字符串存储),需要用Parameters字段映射需要保留的变量,再通过ResultPath合并到上下文:

"GetProductID_From_AddToCart": {
  "Type": "Pass",
  "Parameters": {
    "product_id.$": "$.productID", // 引用原上下文的productID
    "statusCode.$": "$.statusCode" // 保留状态码用于后续判断
  },
  "ResultPath": "$", // 替换上下文为映射后的内容(或指定路径合并)
  "Next": "CheckStatusFrom_AddToCart"
}

问题2:LambdaFunction_ThankYou步骤找不到$.productID的报错修复

报错核心原因:LambdaFunction_MakePayment执行后,默认用Lambda的输出({"statusCode": 200, "body": "..."})替换了整个上下文,导致之前的productID被覆盖丢失。

解决办法是给这个Task步骤添加ResultPath,将Lambda的输出合并到现有上下文,而非直接替换:

1. 修改LambdaFunction_MakePayment步骤

"LambdaFunction_MakePayment": {
  "Type": "Task",
  "Resource": "arn:aws:yyy",
  "Parameters": {
    "product_price": 1500,
    "paid_price": 1500,
    "product_id.$": "$.productID"
  },
  "ResultPath": "$.paymentData", // 将支付Lambda的输出存入paymentData字段
  "Next": "CheckStatusFrom_Payment"
}

2. 同步修改CheckStatusFrom_Payment的判断路径

因为状态码现在存在$.paymentData.statusCode里,所以Choice步骤的变量要更新:

"CheckStatusFrom_Payment": {
  "Type": "Choice",
  "Choices": [
    {"Variable": "$.paymentData.statusCode", "NumericEquals": 200, "Next": "LambdaFunction_ThankYou"},
    {"Variable": "$.paymentData.statusCode", "NumericEquals": 400, "Next": "Fail_Payment"}
  ]
}

这样到LambdaFunction_ThankYou步骤时,$.productID依然存在于上下文根节点,就能正常获取了。


完整修改后的Step Functions定义
{
  "StartAt": "LambdaFunction_AddToCart",
  "States": {
    "LambdaFunction_AddToCart": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:xxx",
      "Parameters": {
        "product_name": "Television",
        "product_price": 1500
      },
      "ResultPath": "$.cartData",
      "Next": "CheckStatusFrom_AddToCart"
    },
    "CheckStatusFrom_AddToCart": {
      "Type": "Choice",
      "Choices": [
        {"Variable": "$.cartData.statusCode", "NumericEquals": 200, "Next": "LambdaFunction_MakePayment"},
        {"Variable": "$.cartData.statusCode", "NumericEquals": 400, "Next": "Fail_Payment"}
      ]
    },
    "LambdaFunction_MakePayment": {
      "Type": "Task",
      "Resource": "arn:aws:yyy",
      "Parameters": {
        "product_price": 1500,
        "paid_price": 1500,
        "product_id.$": "$.cartData.productID"
      },
      "ResultPath": "$.paymentData",
      "Next": "CheckStatusFrom_Payment"
    },
    "CheckStatusFrom_Payment": {
      "Type": "Choice",
      "Choices": [
        {"Variable": "$.paymentData.statusCode", "NumericEquals": 200, "Next": "LambdaFunction_ThankYou"},
        {"Variable": "$.paymentData.statusCode", "NumericEquals": 400, "Next": "Fail_Payment"}
      ]
    },
    "LambdaFunction_ThankYou": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:zzz",
      "Parameters": {
        "product_name": "Television",
        "product_id.$": "$.cartData.productID"
      },
      "Next": "Success_Payment"
    },
    "Success_Payment": {
      "Type": "Pass",
      "End": true
    },
    "Fail_Payment": {
      "Type": "Fail"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:04:54