【问题标题】:Lambda returning Http 200 on timeout to API GatewayLambda 在超时时向 API Gateway 返回 Http 200
【发布时间】:2019-08-16 22:20:52
【问题描述】:

我有一个 lambda 函数,它的超时设置为 10 秒。此 lambda 是从 API 网关触发的。现在,就我而言,我可以在 cloudwatch 日志中看到我收到超时错误Task timed out after 10.00 seconds,这很好。但是我在 API 网关日志中得到的响应代码是 Http-200

我在 Stack Overflow 上阅读了一些关于此问题的 AWS 文档和答案,如果这是预期的事情或我的代码存在问题,但似乎没有一个给出明确的答案,因为许多问题都太老了跟随。

我也没有在 AWS 文档中找到任何实质性内容。

【问题讨论】:

  • 嘿,自从您提出问题后有什么见解吗?

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

根据 AWS,

对于 Lambda 自定义集成,您必须映射 Lambda 返回的错误 在对您的标准 HTTP 错误响应的集成响应中 客户。否则,Lambda 错误将作为 200 OK 响应返回 默认值,结果对于您的 API 用户来说并不直观。

Error Handling here

您必须明确处理此类错误。

【讨论】:

  • 在我的 API Gateway 的 cloudformation 模板中,我有 x-amazon-apigateway-integration 并在其中配置了 '.*(Task timed out|"httpStatus":"503")。但这是我应该做的吗?我的意思是我有x-amazon-apigateway-integration: responses: default: statusCode: '200' 所以如果我为此改变一些东西,那么正确的 200 也会被改变。正确的 ?我不确定我是否理解正确
  • 将默认值设为 5xx 或 4xx 并返回 2xx 以用于已知的 lamda 调用会更有意义。因为我们知道成功状态代码的处理,任何其他异常都将是错误
【解决方案2】:

我最近也偶然发现了这一点。 在我的场景中,我通常想知道当 lambda 执行超时、内存不足等时 API Gateway 返回什么,并在 aws 论坛中找到了答案:

AWS Forum

仅当执行结果失败时应用 Lambda 错误正则表达式,例如在您的 Lambda 函数中抛出异常或标记为失败。如果异常被 Lambda 服务失败,如访问被拒绝、限制等,则不会应用正则表达式。

一种可能的解决方案是将 API 网关用作 lambda 代理。然后它实际上将所有 service 错误映射到 HTTP-502 响应。

我链接的论坛中的帖子也提到使用调用类型event。也许这有帮助。

【讨论】:

  • 这不是真的。如果 lambda 中的任务超时,仍将应用正则表达式
猜你喜欢
  • 2021-05-14
  • 2017-09-07
  • 2017-04-06
  • 2015-10-23
  • 2018-11-28
  • 2016-01-27
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多