REST call from Lambda often extremely slow

Viewed 1641

I'm not sure if the question is correct here or would better fit on Super User. However since I think I may did something wrong with my code I try it here.

I created a small proxy lambda function to invoke my REST API. I'm using node.js and the request package. Here is my code:

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));
};

This is really nothing special however I thought that the request should be canceled after 1000ms. But I see often that the execution was canceled due the timeout of 3000ms. I increased it to 30000ms and it starts working. Sometimes the lambda is excuted within 500ms but then it takes the next time 3100ms. I do not unterstand why this happens. Please enlighten me.

1 Answers

it's probably from a normal behavior called Cold Start

When using AWS Lambda, provisioning of your function's container can take >5 seconds. That makes it impossible to guarantee <1 second responses to events such as API Gateway, DynamoDB, CloudWatch, S3, etc.

here is a good article from serverless on what is it, and how to deal with it.

Related