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

部署至AWS的Serverless Lambda API如何用curl传JSON测试及403报错排查

问题背景
  • 开发的简易API核心逻辑:从传入的JSON文件中读取键值,到数据库校验对应值是否存在
  • 本地测试通过的调用方式:执行serverless invoke local --function getVin --path input/input_212.json
  • 部署到AWS后测试异常:两种curl调用均返回CloudFront生成的403错误,报错提示请求为错误请求、无法连接到对应应用服务器
  • 业务使用的输入JSON结构示例:{"key1": 1,"key2": "abcdefg"}

已尝试的失败调用方式

  • 方式1:curl --request GET 'https://xxxx.execute-api.us-east-1.amazonaws.com/dev/vin' --header 'content-type: text/plain' --data-raw @input.json
  • 方式2:curl -H "Content-Type: application/json" -X GET -d '{"CustomerId": 213,"VIN": "WDBJF65J1YB039213"}' https://xxxxx.execute-api.us-east-1.amazonaws.com/dev/vin

403问题排查与正确测试方案

  • 首先明确报错来源:该403为边缘节点(API Gateway前置层、CloudFront/WAF)拦截,不是Lambda函数本身的业务返回,常见触发点如下:
    • 路由与请求方法不匹配:本地serverless invoke local调用不需要匹配HTTP方法,但部署后API Gateway会严格校验请求方法与路径是否和绑定配置一致。如果函数绑定的是POST方法,发送GET请求会直接被拦截;带请求体的GET请求不符合HTTP通用规范,大部分边缘节点会直接拦截这类请求,不建议给GET接口传body参数
    • 访问控制配置拦截:如果API部署时开启了API密钥校验、IP白名单资源策略,未携带合法密钥、IP不在允许列表的请求会被直接返回403
    • 自定义域名配置不匹配:如果使用了CloudFront自定义域名,源站映射错误、WAF规则拦截、缓存策略不兼容也会触发该类403
  • 正确的curl测试写法(适配多数场景:函数绑定POST方法、路径为/dev/vin):
    curl -X POST https://xxxx.execute-api.us-east-1.amazonaws.com/dev/vin \
    -H "Content-Type: application/json" \
    -d @./input/input_212.json
    
    直接用@引用和本地测试完全一致的JSON文件即可,不需要手动拼接JSON字符串到命令行参数
  • 快速定位问题的验证方法:
    直接调用API Gateway分配的原始默认域名测试,如果默认域名请求正常、自定义域名报403,问题出在CloudFront/WAF配置层;如果默认域名也返回403,问题出在API Gateway的访问控制、路由配置层

注:调用时如果API开启了API密钥校验,需要在请求头里加上x-api-key: 你的API密钥才能通过校验


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 18:54:06