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

AWS REST API Gateway非代理集成无法返回5xx错误码求助

解决AWS REST API Gateway非代理集成Lambda返回5xx状态码的问题

核心问题分析

非代理集成模式下,API Gateway对Lambda的响应区分两种情况:

  • Lambda正常返回对象:无论内容是否包含errorMessage,都会被判定为成功响应,走默认的200集成响应映射。
  • Lambda抛出未捕获异常:才会被识别为集成错误,触发错误类型的集成响应规则。

你之前尝试返回带errorMessage的对象属于成功响应,所以始终返回200,只有抛出异常才能触发错误映射。

具体解决步骤

1. Lambda代码调整

需要触发5xx时,直接抛出包含目标状态码的异常,示例(以Python/Node.js为例):

# Python示例
def lambda_handler(event, context):
    # 触发511错误
    raise Exception("511: Network Authentication Required")
// Node.js示例
exports.handler = async (event) => {
    // 触发512错误
    throw new Error("512: Custom Server Error");
};

2. API Gateway集成响应配置

  • 进入对应方法的集成响应设置,删除之前错误配置的500普通映射,添加错误类型的集成响应:
    • 点击Add Integration Response,在Lambda Error Regex中输入匹配异常信息的正则,比如要匹配所有5xx开头的错误,用^5\d{2}:.*
    • 在Method Response Status下拉框中选择你要返回的状态码(需提前在方法响应中添加该5xx码,比如511、500等)
    • 配置映射模板(可选),动态设置状态码并返回错误内容:
      #set($errorParts = $input.path('$.errorMessage').split(':'))
      #set($context.responseOverride.status = $errorParts[0])
      {
        "error_code": "$errorParts[0]",
        "error_message": "$errorParts[1].trim()"
      }
      

3. 关键注意事项

  • 必须通过抛出异常触发错误响应,返回对象无法触发非代理模式下的错误映射。
  • 方法响应中必须提前添加你要返回的所有5xx状态码,否则无法选择映射。
  • 正则表达式要准确匹配Lambda抛出的errorMessage开头,比如你抛出的是511: xxx,正则^511:.*就能精准匹配该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:19