【问题标题】:When does lambda + api gateway actually send a response to the client?lambda + api 网关何时真正向客户端发送响应?
【发布时间】:2017-06-30 19:58:11
【问题描述】:

目前我已经设置了一个从 api 网关端点触发的 lambda 函数。目标是通过首先形成响应并触发回调来保持响应时间较短,然后继续与 sns 交互以将工作传递给其他 lambda 函数。但是,在对端点运行 blazemeter 时,我注意到了一些奇怪的行为。主要是响应时间似乎在不断增加,此外有 502 和 504 响应代码返回,但没有 500 响应代码(如果我理解正确,表示调用限制,因为 429 响应映射到 api 网关中的 500)。如果我删除异步操作,我会看到合理的响应时间并且没有错误。为什么这是观察到的行为,当实际触发响应时,项目在 nodejs 事件循环中排队的顺序是否不起作用,或者 lambda 只是等待事件队列在发送响应之前清空?如果是后者,那么异步交互中的错误是否会导致 502 和 504 响应?

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    nodejs 事件循环中项目的排队顺序是否不是 实际触发响应或 lambda 时的效果 等待事件队列清空后再发送响应?

    默认情况下,NodeJS 4.2 Lambda 函数将等待 NodeJS 事件循环为空,然后退出并触发 API Gateway 发送响应。当您调用 callback 函数时,它只会在事件循环清除后通知 Lambda 容器退出。在 Lambda 函数退出之前,API Gateway 不会返回响应。您可以设置一个选项以在您调用 callback 函数后立即触发 Lambda 函数退出,但随后您在后台运行的其他内容将被终止。

    如果是后者,那么异步交互中的错误会是 502 和 504 响应的原因?

    如果您所说的“异步交互”是指您对 SNS 的调用,那么是的,如果这些调用失败并且您没有正确处理错误,则可能会导致整个调用返回错误。如果您收到 502 错误,您需要检查您的 Lambda function's logs in CloudWatch Logs 以查看错误是什么。您也可以 enable CloudWatch Logs for API Gateway 在这种情况下提供一些有用的信息。

    【讨论】:

    • 您是否找到了一种方法来触发 ApiGateway,同时保持 lambda 的拆解代码运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多