将 AWS Lambda 429 错误映射到 API Gateway 2XX 响应

Posted

技术标签:

【中文标题】将 AWS Lambda 429 错误映射到 API Gateway 2XX 响应【英文标题】:Map AWS Lambda 429 errors to API Gateway 2XX response 【发布时间】:2016-07-21 16:05:36 【问题描述】:

我了解,API Gateway 在设计上会将 429 个错误从 Lambda 映射到 500 个响应。 有没有办法将 429 映射到 202 之类的其他东西? 我试图从这个正则表达式创建一个集成响应映射:.* 这应该将几乎所有内容映射到我定义的状态代码,但我仍然从 API 网关收到 500 个错误。

【问题讨论】:

【参考方案1】:

粘贴我在 AWS 论坛 post 的回复:

无法将 Lambda 的 429 映射到任何状态代码。它会永远 被认为是500。很好奇,为什么要将429映射到 202(表示“接受”)?

【讨论】:

感谢您的快速回复。以后会加入吗?我的生产环境中的 Lambda 负载很大,我正在测试有效处理负载的方法。虽然我想让它在规模化生产中运行,但我不希望客户知道这些错误。大约 202,这实际上是有道理的,假设我们将所有对 API 网关的请求都记录到 CloudWatch,那么 lambda 会为其中一些返回 429,然后我们可以说 API 网关“202 接受”请求,我们可以稍后处理这些请求通过查询 CloudWatch。 我明白了。我们没有任何计划在未来支持这一点。我的建议是: 1. 增加 Lambda 限制,这样您的 API 调用就不会受到限制。您无需为节流限制增加付费,您只需按使用付费。 2. 使用 API Gateway 将消息发送到 SQS 并返回 202。在某个时间间隔内,调用 Lambda 函数,该函数将获取许多 SQS 消息并进行处理。【参考方案2】:

Lambda 429 现在映射到 INTEGRATION_FAILURE API Gateway 响应,因此您可以将其映射到您想要的任何代码,但请记住,这会使任何其他集成错误也返回该代码。见https://forums.aws.amazon.com/thread.jspa?threadID=309901

【讨论】:

以上是关于将 AWS Lambda 429 错误映射到 API Gateway 2XX 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数从 POST 从 Amazon API Gateway 传递到 AWS Lambda

将 C# 函数发布到 AWS lambda 时出现“类型或命名空间不存在”错误

AWS API Gateway 429 响应 - 没有 CORS 标头

AWS Lambda - 访问被拒绝错误 - GetObject

AWS API Gateway - Lambda - 内部服务器错误

AWS lambda:调用HeadObject操作时发生错误(404):找不到