Lambda NodeJS MySQL Task Timed out










0















I am trying to learn how to connect MySQL using lambda functions in AWS. I have followed a couple of instructions online and basically ended up with this code:





var mysql = require('mysql');
var pool = mysql.createPool(
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db",
);

exports.handler = (event, context, callback) =>
// prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;

pool.getConnection(function(err, connection)
if (err) throw err;

// Use the connection
connection.query('SELECT id FROM customer limit 10;', function (error, results, fields)
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null,results);
);
);
;



This is working on my local but when I zip this code and uploaded it as a lambda function, this returns




Response:

"errorMessage": "2018-11-13T02:16:10.339Z 0562b432-e6ea-11e8-81ef-bd64aa1af0a4 Task timed out after 30.03 seconds"



It times out no matter how many seconds I set it to.



I have pretty much set everything at default since I am new to all of these but I have added AmazonRDSFullAccess to the role of lambda function.



Does anyone have any idea what may be wrong or missing in my setup?



Thanks.










share|improve this question
























  • Do you have Lamda running behind a VPC ?

    – sulabh chaturvedi
    Nov 13 '18 at 2:58











  • just change the behavior such that the execution ends as soon as the callback function is called by setting callbackWaitsForEmptyEventLoop = false on the context object. bcz Default is true... you'd want to set

    – Krishna kushwaha
    Nov 13 '18 at 7:28











  • At first it was set to No VPC and then tried adding subnets and security group I see in my RDS instance but connection still times out.

    – yeoman_983
    Nov 13 '18 at 22:38















0















I am trying to learn how to connect MySQL using lambda functions in AWS. I have followed a couple of instructions online and basically ended up with this code:





var mysql = require('mysql');
var pool = mysql.createPool(
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db",
);

exports.handler = (event, context, callback) =>
// prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;

pool.getConnection(function(err, connection)
if (err) throw err;

// Use the connection
connection.query('SELECT id FROM customer limit 10;', function (error, results, fields)
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null,results);
);
);
;



This is working on my local but when I zip this code and uploaded it as a lambda function, this returns




Response:

"errorMessage": "2018-11-13T02:16:10.339Z 0562b432-e6ea-11e8-81ef-bd64aa1af0a4 Task timed out after 30.03 seconds"



It times out no matter how many seconds I set it to.



I have pretty much set everything at default since I am new to all of these but I have added AmazonRDSFullAccess to the role of lambda function.



Does anyone have any idea what may be wrong or missing in my setup?



Thanks.










share|improve this question
























  • Do you have Lamda running behind a VPC ?

    – sulabh chaturvedi
    Nov 13 '18 at 2:58











  • just change the behavior such that the execution ends as soon as the callback function is called by setting callbackWaitsForEmptyEventLoop = false on the context object. bcz Default is true... you'd want to set

    – Krishna kushwaha
    Nov 13 '18 at 7:28











  • At first it was set to No VPC and then tried adding subnets and security group I see in my RDS instance but connection still times out.

    – yeoman_983
    Nov 13 '18 at 22:38













0












0








0








I am trying to learn how to connect MySQL using lambda functions in AWS. I have followed a couple of instructions online and basically ended up with this code:





var mysql = require('mysql');
var pool = mysql.createPool(
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db",
);

exports.handler = (event, context, callback) =>
// prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;

pool.getConnection(function(err, connection)
if (err) throw err;

// Use the connection
connection.query('SELECT id FROM customer limit 10;', function (error, results, fields)
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null,results);
);
);
;



This is working on my local but when I zip this code and uploaded it as a lambda function, this returns




Response:

"errorMessage": "2018-11-13T02:16:10.339Z 0562b432-e6ea-11e8-81ef-bd64aa1af0a4 Task timed out after 30.03 seconds"



It times out no matter how many seconds I set it to.



I have pretty much set everything at default since I am new to all of these but I have added AmazonRDSFullAccess to the role of lambda function.



Does anyone have any idea what may be wrong or missing in my setup?



Thanks.










share|improve this question
















I am trying to learn how to connect MySQL using lambda functions in AWS. I have followed a couple of instructions online and basically ended up with this code:





var mysql = require('mysql');
var pool = mysql.createPool(
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db",
);

exports.handler = (event, context, callback) =>
// prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;

pool.getConnection(function(err, connection)
if (err) throw err;

// Use the connection
connection.query('SELECT id FROM customer limit 10;', function (error, results, fields)
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null,results);
);
);
;



This is working on my local but when I zip this code and uploaded it as a lambda function, this returns




Response:

"errorMessage": "2018-11-13T02:16:10.339Z 0562b432-e6ea-11e8-81ef-bd64aa1af0a4 Task timed out after 30.03 seconds"



It times out no matter how many seconds I set it to.



I have pretty much set everything at default since I am new to all of these but I have added AmazonRDSFullAccess to the role of lambda function.



Does anyone have any idea what may be wrong or missing in my setup?



Thanks.







mysql node.js amazon-web-services aws-lambda amazon-rds






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 6:55









John Rotenstein

70.5k780124




70.5k780124










asked Nov 13 '18 at 2:48









yeoman_983yeoman_983

102




102












  • Do you have Lamda running behind a VPC ?

    – sulabh chaturvedi
    Nov 13 '18 at 2:58











  • just change the behavior such that the execution ends as soon as the callback function is called by setting callbackWaitsForEmptyEventLoop = false on the context object. bcz Default is true... you'd want to set

    – Krishna kushwaha
    Nov 13 '18 at 7:28











  • At first it was set to No VPC and then tried adding subnets and security group I see in my RDS instance but connection still times out.

    – yeoman_983
    Nov 13 '18 at 22:38

















  • Do you have Lamda running behind a VPC ?

    – sulabh chaturvedi
    Nov 13 '18 at 2:58











  • just change the behavior such that the execution ends as soon as the callback function is called by setting callbackWaitsForEmptyEventLoop = false on the context object. bcz Default is true... you'd want to set

    – Krishna kushwaha
    Nov 13 '18 at 7:28











  • At first it was set to No VPC and then tried adding subnets and security group I see in my RDS instance but connection still times out.

    – yeoman_983
    Nov 13 '18 at 22:38
















Do you have Lamda running behind a VPC ?

– sulabh chaturvedi
Nov 13 '18 at 2:58





Do you have Lamda running behind a VPC ?

– sulabh chaturvedi
Nov 13 '18 at 2:58













just change the behavior such that the execution ends as soon as the callback function is called by setting callbackWaitsForEmptyEventLoop = false on the context object. bcz Default is true... you'd want to set

– Krishna kushwaha
Nov 13 '18 at 7:28





just change the behavior such that the execution ends as soon as the callback function is called by setting callbackWaitsForEmptyEventLoop = false on the context object. bcz Default is true... you'd want to set

– Krishna kushwaha
Nov 13 '18 at 7:28













At first it was set to No VPC and then tried adding subnets and security group I see in my RDS instance but connection still times out.

– yeoman_983
Nov 13 '18 at 22:38





At first it was set to No VPC and then tried adding subnets and security group I see in my RDS instance but connection still times out.

– yeoman_983
Nov 13 '18 at 22:38












1 Answer
1






active

oldest

votes


















0














After doing some trial and errors, I was able to make it work and what I was missing is that I did not allow All TCP in the inbound of my RDS Security group. After that, I set it as my lambda function to No VPC, and it was able to query properly.



This link: https://dzone.com/articles/querying-rds-mysql-db-with-nodejs-lambda-function and the stack overflow link posted in there (which is this: AWS Lambda RDS connection timeout) helped me a lot in figuring out what was wrong with my code/setup.



Here is the final code that I ended up using.





const mysql = require('mysql');
const pool = mysql.createPool(
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db"
);

exports.handler = (event, context, callback) =>
//prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;

pool.getConnection((err, connection) =>
if(err) throw err;

// Use the connection
connection.query('SELECT id FROM customer limit 10;', (error, results, fields) =>

// And done with the connection.
connection.release();

// Handle error after the release.
if (error) callback(error);
else callback(null,results);
);
);
;



Thanks!






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53273063%2flambda-nodejs-mysql-task-timed-out%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    After doing some trial and errors, I was able to make it work and what I was missing is that I did not allow All TCP in the inbound of my RDS Security group. After that, I set it as my lambda function to No VPC, and it was able to query properly.



    This link: https://dzone.com/articles/querying-rds-mysql-db-with-nodejs-lambda-function and the stack overflow link posted in there (which is this: AWS Lambda RDS connection timeout) helped me a lot in figuring out what was wrong with my code/setup.



    Here is the final code that I ended up using.





    const mysql = require('mysql');
    const pool = mysql.createPool(
    host: "foo-bar-123.us-east-2.rds.amazonaws.com",
    user: "root",
    password: "pass123",
    database: "sample_db"
    );

    exports.handler = (event, context, callback) =>
    //prevent timeout from waiting event loop
    context.callbackWaitsForEmptyEventLoop = false;

    pool.getConnection((err, connection) =>
    if(err) throw err;

    // Use the connection
    connection.query('SELECT id FROM customer limit 10;', (error, results, fields) =>

    // And done with the connection.
    connection.release();

    // Handle error after the release.
    if (error) callback(error);
    else callback(null,results);
    );
    );
    ;



    Thanks!






    share|improve this answer



























      0














      After doing some trial and errors, I was able to make it work and what I was missing is that I did not allow All TCP in the inbound of my RDS Security group. After that, I set it as my lambda function to No VPC, and it was able to query properly.



      This link: https://dzone.com/articles/querying-rds-mysql-db-with-nodejs-lambda-function and the stack overflow link posted in there (which is this: AWS Lambda RDS connection timeout) helped me a lot in figuring out what was wrong with my code/setup.



      Here is the final code that I ended up using.





      const mysql = require('mysql');
      const pool = mysql.createPool(
      host: "foo-bar-123.us-east-2.rds.amazonaws.com",
      user: "root",
      password: "pass123",
      database: "sample_db"
      );

      exports.handler = (event, context, callback) =>
      //prevent timeout from waiting event loop
      context.callbackWaitsForEmptyEventLoop = false;

      pool.getConnection((err, connection) =>
      if(err) throw err;

      // Use the connection
      connection.query('SELECT id FROM customer limit 10;', (error, results, fields) =>

      // And done with the connection.
      connection.release();

      // Handle error after the release.
      if (error) callback(error);
      else callback(null,results);
      );
      );
      ;



      Thanks!






      share|improve this answer

























        0












        0








        0







        After doing some trial and errors, I was able to make it work and what I was missing is that I did not allow All TCP in the inbound of my RDS Security group. After that, I set it as my lambda function to No VPC, and it was able to query properly.



        This link: https://dzone.com/articles/querying-rds-mysql-db-with-nodejs-lambda-function and the stack overflow link posted in there (which is this: AWS Lambda RDS connection timeout) helped me a lot in figuring out what was wrong with my code/setup.



        Here is the final code that I ended up using.





        const mysql = require('mysql');
        const pool = mysql.createPool(
        host: "foo-bar-123.us-east-2.rds.amazonaws.com",
        user: "root",
        password: "pass123",
        database: "sample_db"
        );

        exports.handler = (event, context, callback) =>
        //prevent timeout from waiting event loop
        context.callbackWaitsForEmptyEventLoop = false;

        pool.getConnection((err, connection) =>
        if(err) throw err;

        // Use the connection
        connection.query('SELECT id FROM customer limit 10;', (error, results, fields) =>

        // And done with the connection.
        connection.release();

        // Handle error after the release.
        if (error) callback(error);
        else callback(null,results);
        );
        );
        ;



        Thanks!






        share|improve this answer













        After doing some trial and errors, I was able to make it work and what I was missing is that I did not allow All TCP in the inbound of my RDS Security group. After that, I set it as my lambda function to No VPC, and it was able to query properly.



        This link: https://dzone.com/articles/querying-rds-mysql-db-with-nodejs-lambda-function and the stack overflow link posted in there (which is this: AWS Lambda RDS connection timeout) helped me a lot in figuring out what was wrong with my code/setup.



        Here is the final code that I ended up using.





        const mysql = require('mysql');
        const pool = mysql.createPool(
        host: "foo-bar-123.us-east-2.rds.amazonaws.com",
        user: "root",
        password: "pass123",
        database: "sample_db"
        );

        exports.handler = (event, context, callback) =>
        //prevent timeout from waiting event loop
        context.callbackWaitsForEmptyEventLoop = false;

        pool.getConnection((err, connection) =>
        if(err) throw err;

        // Use the connection
        connection.query('SELECT id FROM customer limit 10;', (error, results, fields) =>

        // And done with the connection.
        connection.release();

        // Handle error after the release.
        if (error) callback(error);
        else callback(null,results);
        );
        );
        ;



        Thanks!







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 19 '18 at 21:06









        yeoman_983yeoman_983

        102




        102



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53273063%2flambda-nodejs-mysql-task-timed-out%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Use pre created SQLite database for Android project in kotlin

            Darth Vader #20

            Ondo