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

AWS Lambda调用外部API返回正确信息却报执行失败问题排查

排查AWS Lambda调用外部API后执行失败的问题

嘿,从你描述的情况来看,API确实返回了预期的提示'Not latest version of file, update not performed',但Lambda却报错执行失败——看错误信息里的响应是被双重转义的字符串,这基本可以确定是Lambda函数处理API响应的逻辑出了问题,和API本身无关。下面是具体的排查方向和解决办法:

1. 检查响应处理代码是否重复序列化

最常见的坑就是:你把API返回的响应(已经是可直接使用的内容)又做了一次JSON序列化,导致字符串被转义。举个Python的例子,比如你不小心写了这样的代码:

import requests
import json

def lambda_handler(event, context):
    api_url = "https://serverName/api/SyncPersonnelViaAwsApi/SapEaiCall"
    # 假设已完成XML转JSON的payload
    payload = {"your": "converted_data"}
    response = requests.post(api_url, json=payload)
    
    # 错误操作:把响应文本再序列化一次
    return json.dumps({"response": response.text})

原本response.text是正常的提示字符串,经过json.dumps处理后,就变成了带转义的"{'response' : 'Not latest version of file, update not performed'}",而Lambda要求返回的是JSON对象,不是转义后的字符串,所以直接判定执行失败。

正确的做法是直接返回字典(或合法的JSON对象):

def lambda_handler(event, context):
    # 请求逻辑不变
    response = requests.post(api_url, json=payload)
    
    # 正确方式1:直接返回字典
    return {"response": response.text}
    
    # 如果API返回的是JSON格式响应,先解析再返回
    # return {"response": response.json()}

2. 确认Lambda的返回格式要求

AWS Lambda对返回值有明确要求:必须是可序列化为JSON的对象(比如Python的dict、Node.js的object)。如果返回的是纯字符串,Lambda会正常处理,但要是你把字符串包装成了转义后的JSON字符串,就会触发格式错误,导致执行失败。

3. 核对API响应的内容类型

虽然API返回了正确提示,但要确认它的Content-Type:

  • 如果是text/plain(纯文本),直接把文本内容放到返回字典里就行,不用额外处理;
  • 如果是application/json,记得用对应语言的方法解析(比如Python的response.json(),Node.js的await response.json()),再返回解析后的对象。

4. 查看CloudWatch的详细错误栈

去CloudWatch日志里找更完整的错误信息,比如有没有抛出JSONSerializationError这类异常,这能帮你精准定位是哪一步的序列化出了问题。比如在Python中,如果返回的对象无法被JSON序列化,Lambda会直接抛出异常,导致执行失败。

总的来说,核心问题就是响应内容被重复序列化,返回了不符合Lambda要求的格式,调整代码里的响应处理逻辑,确保返回的是合法的JSON对象而不是转义后的字符串,应该就能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:49