2017-10-17 73 views
3

我一直無法使用來自Lambda函數的節點連接到MySQL數據庫。我收到的錯誤是Task timed out after 4.00 seconds從Lambda函數(節點)連接到MySQL數據庫

有沒有人有任何解決方案?

這是我的國家的概述:

  1. 的AWS RDS數據庫是MySQL數據庫。它不侷限於VPC(我可以使用MySQLWorkbench的主機/用戶/密碼進行連接)。
  2. 我的Lambda函數的執行角色設置爲將Lambda作爲受信任的實體並授予AdministratorAccess。
  3. 在我的本地機器上,我安裝了mysql模塊,壓縮了我的index.js和node_modules文件夾,並上傳到了我的Lambda函數。
  4. 我已經嘗試在處理程序中放置createConnection和connect函數。我試圖把我的查詢內連接函數的回調函數。我試圖增加超時時間到10秒。
  5. 我的代碼:

    var mysql = require('mysql'); 
    
    var connection = mysql.createConnection({ 
        host  : 'amazon-string.rds.amazonaws.com', 
        user  : 'myusername', 
        password : 'mypassword' 
    }); 
    
    connection.connect(); 
    
    exports.handler = (event, context, callback) => { 
    
        connection.query("SELECT * FROM table", function(err, rows, fields) { 
         console.log("rows: " + rows); 
         callback(null); 
        }); 
    
    }; 
    
+0

[AWS Lambda RDS連接超時]的可能重複(https://stackoverflow.com/questions/42605093/aws-lambda-rds-connection-timeout) –

回答

1

增加超時一分鐘。這可能是由於lambda函數的冷啓動。

只有您的第一個電話應該需要時間,因爲您重複使用相同的連接,連續呼叫應該非常快。

此外,如果超時時間更長,並不意味着您將因此超時收費,您只會在Lambda運行時收取費用。

也加快冷啓動時間,你可以的WebPack腳本,

http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/webpack.html

還有一個問題注意到了,

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : 'amazon-string.rds.amazonaws.com', 
    user  : 'myusername', 
    password : 'mypassword' 
}); 

connection.connect(); 

exports.handler = (event, context) => { 

    connection.query("SELECT * FROM table", function(err, rows, fields) { 
     console.log("rows: " + rows); 
     context.succeed('Success'); 
    }); 

}; 

希望它能幫助。

+0

謝謝您的回覆!它看起來像這個固定的問題!現在我得到一個新的超時問題:'連接ETIMEDOUT'。我已將Lambda超時增加到5分鐘,並且已將'connectTimeout':3000000'添加到我的createConnection對象,並且它仍然會發生。 – sketchedin

+0

刪除回調並使用context.succeed,這是我得到的唯一區別。 – Kannaiyan

+0

謝謝Kannaiyan。我終於得到了這個工作。我感謝您的幫助。 – sketchedin