2017-10-17 7 views
3

ラムダ関数からノードを使用してMySQLデータベースに接続できませんでした。私が受け取るエラーはTask timed out after 4.00 secondsです。ラムダ関数(ノード)からMySQLデータベースに接続

解決方法はありますか?ここで

は私の状態の概要は次のとおりです。

  1. AWS RDSデータベースはMySQLデータベースです。 VPCに限定されていません(MySQLWorkbenchのホスト/ユーザ/パスワードを使用して接続できます)。
  2. 私のラムダ関数の実行ロールは、ラムダが信頼できるエンティティとして設定され、AdministratorAccessが与えられています。
  3. 私のローカルマシンで、mysqlモジュールをインストールし、index.jsとnode_modulesフォルダを圧縮してラムダ関数にアップロードしました。
  4. 私は、createConnectionを入れて、ハンドラの中に関数を接続しようとしました。私は接続関数のコールバック関数の中に私のクエリを入れてみました。タイムアウト時間を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ラムダRDS接続タイムアウト]の可能な複製(https://stackoverflow.com/questions/42605093/aws-lambda-rds-connection-timeout) –

答えて

1

は1分にタイムアウトを増やします。それはラムダ関数のコールドスタートによるものかもしれません。

同じ接続を再利用しているため、最初の通話には時間がかかるだけで、連続した通話は非常に高速になります。

また、よりタイムアウトを設定しても、そのタイムアウトのために請求されるわけではありません。ラムダが実行されている時間に限り課金されます。

また、あなたが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

返信いただきありがとうございます!この問題は修正されたようです。今私は新しいタイムアウトの問題を取得しています: 'connect ETIMEDOUT'。私はラムダタイムアウトを5分に増やしました。私は '' connectTimeout ':3000000'を私のcreateConnectionオブジェクトに追加しました。 – sketchedin

+0

コールバックを削除し、context.succeedを使用してください。これが私の唯一の違いです。 – Kannaiyan

+0

ありがとうKannaiyan。私はついにこれを手に入れました。私はあなたの助けに感謝します。 – sketchedin

関連する問題