将 Lambda 运行时从 Node 8.x 更改为 Node 12.x 后,从 AWS API Gateway 随机获得 502 Bad Gateway 响应

smo*_*fun 7 amazon-web-services node.js aws-lambda aws-api-gateway

由于 AWS Lambda 上的 NodeJS 8.x 运行时已停产,我们将 REST API 的暂存环境移至 NodeJS 12.x。

现在我们注意到,在某些随机时间,从前端 Web 应用程序到 API 网关的请求会以 502 失败。通常这种情况发生在 API 空闲一段时间(几分钟)之后。这主要发生在 OPTIONS 或 HEAD 请求中,但这可能是因为它是空闲时间后的第一个请求。对 API 的任何后续请求都可以正常工作。即使您刷新网站,所有请求都可以顺利通过。

我在 Lambda 上找不到任何日志。

API网关日志:

"error":  "Internal server error", "ErrorDetail": " "Internal server error"", "errorValidation": "-", "errorResponseType": "INTEGRATION_FAILURE"
Run Code Online (Sandbox Code Playgroud)

我们在 rumtime NodeJS 10.x 上也遇到了同样的问题,但在 NodeJs 8 上没有。

谢谢你的帮助!

smo*_*fun 1

看起来我们发现了这个错误——它在代码中。:)

一段时间后,我们在 Cloud Watch 上发现 Lambda 日志与 API Gateway 的日志匹配,并且看到一些数据库超时。我们仍在调查细节,但问题出在用于日志记录的快速中间件上。

即使在 OPTIONS 和 HEAD 请求上并且在确保数据库连接处于活动状态之前,它也会访问数据库。该问题可能与数据库套接字超时和 Lambda 寿命有关。然而,围绕日志中间件的简单 try-catch 显然解决了这个问题。

我们仍然不确定为什么 Node 8 的生产中没有发生错误。流量可能足够高以保持数据库连接打开。

谢谢大家的帮助。