Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Serverless function always timeout on lambda

Tags:

node.js

lambda

I have wrote a simple query call, My hello handler is this

'use strict';

const pg = require('pg');
const conn = 'pg://postgres:user:pass@rds_host:5432/database_name';

module.exports.hello = (event, context, callback) => {
  const client = new pg.Client(conn);
  client.connect();

  client.query('SELECT column_a FROM table_b', function(err, result) {
    client.end();
    if (err) {
      callback(null, {error: err});
    } else {
      const response = {
        statusCode: 200,
        body: JSON.stringify({
          data: result.rows
        }),
      };

      callback(null, response);
    }
  });

  // Use this code if you don't use the http event with the LAMBDA-PROXY integration
  // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

I have executed this script on my local by manual calling

const handler = require('../server/handler');

handler.hello({}, {}, function(err, response) {
  console.log(err, response);
});

and works, when I call

$ serverless invoke local -f hello -l

also works, but calling lambda always fails,

$ SLS_DEBUG=* serverless invoke -f hello -l 


{
    "errorMessage": "2017-04-21T01:11:19.580Z 697e69bc-262f-11e7-8fee-0331cc761e9a Task timed out after 6.00 seconds"
}
--------------------------------------------------------------------
START RequestId: 697e69bc-262f-11e7-8fee-0331cc761e9a Version: $LATEST
END RequestId: 697e69bc-262f-11e7-8fee-0331cc761e9a
REPORT RequestId: 697e69bc-262f-11e7-8fee-0331cc761e9a  Duration: 6000.71 ms    Billed Duration: 6000 ms        Memory Size: 1024 MB    Max Memory Used: 20 MB  
2017-04-21T01:11:19.580Z 697e69bc-262f-11e7-8fee-0331cc761e9a Task timed out after 6.00 seconds



  Error --------------------------------------------------

     Invoked function failed

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Stack Trace --------------------------------------------

Error: Invoked function failed
    at AwsInvoke.log (/home/rkmax/my-project/node_modules/serverless/lib/plugins/aws/invoke/index.js:122:31)
From previous event:
    at Object.invoke:invoke [as fn] (/home/rkmax/my-project/node_modules/serverless/lib/plugins/aws/invoke/index.js:22:10)
    at BbPromise.reduce (/home/rkmax/my-project/node_modules/serverless/lib/classes/PluginManager.js:210:55)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at PluginManager.invoke (/home/rkmax/my-project/node_modules/serverless/lib/classes/PluginManager.js:210:22)
    at PluginManager.run (/home/rkmax/my-project/node_modules/serverless/lib/classes/PluginManager.js:225:17)
    at Serverless.run (/home/rkmax/my-project/node_modules/serverless/lib/Serverless.js:97:31)
    at serverless.init.then (/home/rkmax/my-project/node_modules/serverless/bin/serverless:23:50)

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Forums:        forum.serverless.com
     Chat:          gitter.im/serverless/serverless

  Your Environment Information -----------------------------
     OS:                 linux
     Node Version:       7.9.0
     Serverless Version: 1.11.0
like image 353
rkmax Avatar asked Oct 15 '25 15:10

rkmax


1 Answers

Is your lambda in the same VPC and subnet as your Postgres database? If you created the lambda and you didn't explicitly state which subnet it belongs to, then it is effectively "public", meaning that it can access internet resources, DynamoDB, SNS, S3, ..., but it cannot talk to private RDS instances. To add your lambda to the VPC where the database lives go to the tab Configuration->Advanced Settings and set up something similar to the following with rules that show traffic enabled within the VPC... Advanced Settings with VPC & Subnets & Security Groups configured

like image 116
Ryan Naccarato Avatar answered Oct 18 '25 13:10

Ryan Naccarato



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!