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

Lambda返回对象场景下API Gateway响应映射配置咨询

解决方案

核心思路是不序列化错误对象,直接将带自定义属性的Error实例作为错误返回,同时满足SDK直连和API Gateway状态码映射两个场景。

一、Lambda函数代码改造

不要使用context.fail()+序列化错误对象的写法,直接构造带自定义错误码属性的Error实例,通过callback第一个参数返回(async函数中可直接throw该错误实例,效果一致)。改造后的完整代码如下:

module.exports = {
    handler: async (event, context, callback) => {
        const rnd = Math.random();
        if (rnd > 0.33) {
            // 成功响应,保持原有逻辑
            callback(null, { att: "value" });
        }
        else if (rnd > 0.66) {
            // 404错误场景
            const err = new Error("Error message");
            err.name = "ITEM_NOT_FOUND";
            err.code = "ITEM_NOT_FOUND"; // 显式挂载code字段,方便SDK直接读取
            callback(err);
        }
        else {
            // 通用400错误场景
            const err = new Error("Error message");
            err.name = "GENERIC_ERROR_CODE";
            err.code = "GENERIC_ERROR_CODE";
            callback(err);
        }
    }
}

该写法下,通过AWS SDK调用Lambda时,catch块捕获到的错误对象会直接携带name、code、message属性,直接读取err.code即可拿到错误码,无需额外解析errorMessage字段的JSON字符串。如果是纯async/await写法,不需要调用callback,直接throw err即可,Lambda会自动将抛出的Error实例识别为错误返回。

二、API Gateway集成响应配置

在API Gateway控制台配置集成响应规则,按优先级从高到低配置3条规则,通过正则匹配Lambda返回的错误内容映射状态码:

  • 200状态码规则:默认成功规则,匹配Lambda无错误返回(即callback第一个参数为null)的场景,直接映射返回结果即可。
  • 404状态码规则:配置Lambda错误匹配正则为 .*ITEM_NOT_FOUND.*,只要错误内容中包含ITEM_NOT_FOUND字符串就命中规则,返回404状态码,可按需配置响应体映射模板,该正则容错性高,不受序列化格式的空格、转义字符影响。
  • 400状态码规则:配置Lambda错误匹配正则为 .*(通配所有错误场景),因为优先级低于404规则,所有未匹配到404的错误都会落到该规则,返回400状态码。

配置说明:Lambda返回错误时,会将Error实例的所有可枚举属性序列化为字符串返回给API Gateway,因此正则可以直接匹配到我们挂载的错误码字段值,无需额外解析逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:39:25