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

无法在AWS Step Functions中捕获Lambda函数完整响应的问题

AWS Step Functions无法捕获Java Lambda完整响应体的问题

问题说明

使用AWS Step Functions状态机调用Java Lambda函数时,仅能捕获到状态码(如200),无法获取Lambda返回的完整JSON响应体。单独通过Postman测试Lambda时,可正常返回预期的JSON数据。

Lambda Java代码

public ResponseEntity<Object> fetchCertificateStatus() {
    String jsonData = "{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}";

    // 解析JSON为Java对象
    Gson gson = new Gson();
    Person person = gson.fromJson(jsonData, Person.class);

    return ResponseEntity.ok(person);
}

Step Functions状态机配置

{
  "Comment": "A description of my state machine",
  "StartAt": "Lambda Invoke",
  "States": {
    "Lambda Invoke": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-southeast-2:72806977b",
      "ResultPath": "$.LambdaResponse",
      "End": true
    }
  }
}

当前输出与预期结果

  • 当前Step Functions输出:
{
  "LambdaResult": 200
}
  • 预期输出:
{
    "name": "John",
    "age": 30,
    "city": "New York"
}

已排查步骤

  • 验证状态机中Lambda函数的ARN配置正确
  • 确认Lambda单独调用可返回符合预期的JSON响应体
  • 检查Lambda与Step Functions的CloudWatch日志,未发现错误信息
  • 尝试修改ResultPath为$.LambdaResult、$.LambdaResponseBody等,均未得到预期结果

解决方案

方案1:修改Lambda返回值类型

将Lambda的返回类型从ResponseEntity<Object>改为直接返回Person对象,Step Functions会直接捕获到序列化后的完整JSON数据:

public Person fetchCertificateStatus() {
    String jsonData = "{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}";
    Gson gson = new Gson();
    return gson.fromJson(jsonData, Person.class);
}

方案2:在Step Functions中提取响应体

若无法修改Lambda代码,可通过ResultSelector从Lambda返回的ResponseEntity结构中提取body内容。修改状态机配置如下:

{
  "Comment": "A description of my state machine",
  "StartAt": "Lambda Invoke",
  "States": {
    "Lambda Invoke": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-southeast-2:72806977b",
      "ResultSelector": {
        "LambdaResponse": "$.body"
      },
      "ResultPath": "$.LambdaResponse",
      "End": true
    }
  }
}

方案3:检查Lambda Handler配置

若使用Spring Cloud Function部署Lambda,需确保handler配置正确,避免ResponseEntity被额外包装。例如,handler应直接指向具体的函数方法,而非默认的包装类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:33