首页 > 解决方案 > 来自 Lambda 的 REST 调用通常非常慢

问题描述

我不确定这里的问题是正确的还是更适合超级用户。但是,由于我认为我的代码可能做错了什么,所以我在这里尝试一下。

我创建了一个小型代理 lambda 函数来调用我的 REST API。我正在使用 node.js 和请求包。这是我的代码:

exports.handler = function (request, context) {
    require('request').post({url: 'https://example.com/foo/bar', json:request, timeout:1000}, function(error, response, body){
        if(error) {
            console.log("Something went wrong:\n" + JSON.stringify(error, null, 2));
            context.succeed({failed:true})
        } else {
            console.log("Returning remote response:\n" + JSON.stringify(body, null, 2));
            context.succeed(body);
        }
    });

    console.log("Forwarding request to own backend:\n" + JSON.stringify(request, null, 2));
};

这确实没什么特别的,但是我认为应该在 1000 毫秒后取消请求。但是我经常看到由于 3000 毫秒的超时而取消了执行。我将它增加到 30000 毫秒,它开始工作。有时 lambda 在 500 毫秒内执行,但下一次需要 3100 毫秒。我不明白为什么会这样。请赐教。

标签: node.jsrestamazon-web-servicesaws-lambdaruntime

解决方案


它可能来自称为冷启动的正常行为

使用 AWS Lambda 时,您的函数容器的预置可能需要 5 秒以上的时间。这使得无法保证对 API Gateway、DynamoDB、CloudWatch、S3 等事件的响应小于 1 秒。

这是一篇来自无服务器的好文章,关于它是什么以及如何处理它。


推荐阅读