目前我已经设置了一个从api网关端点触发的lambda函数。目标是通过形成响应并首先触发回调来保持响应时间较短,然后继续与sns交互以将工作传递给其他lambda函数。但是,当我对端点运行火焰计时,我注意到了一些奇怪的行为。主要是响应时间似乎不断增加,此外还有502和504响应代码返回但没有500响应代码(如果我理解正确,则表示调用限制,因为429响应在api网关中映射到500)。如果我删除异步操作,我会看到合理的响应时间,并且没有错误。为什么这是观察到的行为,当实际触发响应时,在nodejs事件循环中项目排队的顺序是否不起作用,或者lambda只是等待事件队列在发送响应之前清空?如果是后者,那么异步交互中的错误将成为502& 504回复?
答案 0 :(得分:5)
不是在nodejs事件循环中排队项目的顺序 实际触发响应时的效果或只是lambda 在发送响应之前等待事件队列清空?
默认情况下,NodeJS 4.2 Lambda函数将在退出并触发API网关发送响应之前等待NodeJS事件循环为空。当您调用callback
函数时,它只是在事件循环清除后通知Lambda容器退出。在Lambda函数退出之前,API网关不会返回响应。您可以设置一个选项,在您调用callback
函数时立即触发Lambda函数退出,但随后在后台运行的其他内容将被终止。
如果是后者,那么异步交互中的错误就是 502& 504回复?
如果通过“异步交互”表示您正在调用SNS,那么如果这些调用失败并且您没有正确处理错误,则可能导致整个调用返回错误。如果您收到502错误,则需要检查Lambda function's logs in CloudWatch Logs以查看错误。您也可以enable CloudWatch Logs for API Gateway在这种情况下提供一些有用的信息。