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

API Gateway调用Sagemaker Endpoint遇400错误求助

问题解决:API Gateway POST调用Sagemaker Endpoint返回400错误

核心问题分析

你的POST API请求被Sagemaker模型拒绝,原因是API Gateway发送给Sagemaker的请求格式不符合模型预期。对比能正常工作的GET API,差异在于POST请求的集成映射模板额外包装了一层JSON结构(包含environment、content_type、body字段),而Sagemaker Runtime的InvokeEndpoint API要求请求体是模型可直接解析的原始输入数据,而非嵌套的对象。

解决方案步骤

1. 调整集成请求映射模板

修改application/json映射模板,直接输出模型需要的原始输入数据(即请求体中的body数组),去掉不必要的包装字段:

#set($body = $input.path('$.body'))
$body

如果模型需要特定的JSON结构(而非纯数组),则只保留模型所需的字段,不要混入environment、content_type这类额外信息。

2. 配置集成请求的Content-Type头

Sagemaker需要通过请求头识别输入数据类型,因此在API Gateway的集成请求设置中添加HTTP头映射:

  • 头名称:Content-Type
  • 映射值:$input.path('$.content_type')
    这样就能将请求中的content_type值传递给Sagemaker,确保模型能正确解析输入格式。

3. 验证请求格式匹配模型预期

用AWS CLI直接测试Sagemaker Endpoint,确认模型接受的输入格式:

aws sagemaker-runtime invoke-endpoint \
  --endpoint-name YOUR_ENDPOINT_NAME \
  --content-type "application/json" \
  --body "[1,2,3]" \
  output.txt

如果该命令能成功返回结果,说明API Gateway的映射模板需要和这个CLI请求的格式完全一致。

4. 移除不必要的参数传递

如果模型不需要environment参数,不要将其加入请求体,多余的字段会导致模型无法解析请求,触发CLIENT_ERROR_FROM_MODEL错误。

额外排查点

  • 检查模型的输入要求:确认模型是接受纯数组,还是需要如{"data": [1,2,3]}这样的结构,调整映射模板匹配该格式。
  • 查看Sagemaker Endpoint的CloudWatch日志:日志中会有更详细的错误信息,能明确指出请求格式的问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:06:16