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

AWS API Gateway集成响应正则不匹配Lambda错误,始终返回200

Golang Lambda错误无法触发API Gateway 401状态码的解决办法

问题核心

Golang Lambda抛出错误后返回{"errorMessage":"401","errorType":"errorString"},但API Gateway无论配置何种正则规则,始终返回200状态码,无法触发401。

排查与解决步骤

1. 确认API Gateway集成响应配置逻辑

API Gateway的错误状态码映射必须在集成响应而非方法响应中配置:

  • 进入对应API方法的「集成请求」→「集成响应」
  • 点击「添加集成响应」,选择要映射的HTTP状态码(401)
  • 在「Lambda错误正则」字段填入匹配规则,同时确保该规则对应的HTTP状态码设置为401,而非默认的200

2. 修正正则匹配规则

Lambda返回的错误响应是标准JSON字符串,直接匹配"errorMessage":"401"即可命中,无需冗余通配符。如果担心格式差异,也可以用.*"errorMessage":"401".*作为正则。

3. 换用更可靠的响应方式(推荐)

依赖API Gateway正则匹配容易出现格式兼容问题,建议直接在Golang Lambda中构造符合API Gateway规范的响应结构体,主动返回401状态码:

package main

import (
	"context"
	"encoding/json"
)

type APIGatewayResponse struct {
	StatusCode int               `json:"statusCode"`
	Headers    map[string]string `json:"headers"`
	Body       string            `json:"body"`
}

func Handler(ctx context.Context) (APIGatewayResponse, error) {
	// 触发401的业务逻辑
	errBody, _ := json.Marshal(map[string]string{"message": "Unauthorized"})
	return APIGatewayResponse{
		StatusCode: 401,
		Headers:    map[string]string{"Content-Type": "application/json"},
		Body:       string(errBody),
	}, nil
}

func main() {
	// Lambda runtime入口,此处省略具体注册代码
}

这种方式无需依赖API Gateway的正则匹配,直接由函数返回指定状态码,稳定性更高。

4. 排查Lambda响应格式问题

如果坚持用抛出错误的方式,需确保Lambda返回的错误内容确实是预期的JSON:

  • 测试Lambda函数,查看返回的原始响应内容,确认没有额外的转义字符(比如{\"errorMessage\":\"401\"}),若存在则正则需匹配转义后的格式(如.*\"401\".*)
  • 避免手动序列化错误,直接用errors.New("401")让Lambda runtime自动生成标准错误响应结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:15