2016-03-08 19 views
6

を接続しますエラー:私はラムダ関数を使用して、RDSに接続しようとしていますが、私はエラーを取得していますETIMEDOUT RDSラムダ

var mysql = require('mysql'); 
exports.handler = function(event, context) { 
      //Connect to RDS 

var connection = mysql.createConnection({ 
host  : 'hostname', 
user  : 'username', 
password : 'password', 
database : 'database' 

}); 

connection.connect(function(err) 
{ 
    if (err) 
    { 
    throw err; 
    } 
else 
    { 
    console.log('DB connection establish'); 
    } 
    }); 

}; 

私は取得していますエラーは次のとおりです。私が持っていた

START RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae Version: $LATEST 

2016-03-08T23:08:06.737Z 9711e650-e582-11e5-af5f-97ba391a42ae  
Error: connect ETIMEDOUT 
    at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:412:13)  
     at Socket.g (events.js:180:16) 
    at Socket.emit (events.js:92:17) 
    at Socket._onTimeout (net.js:327:8)  
    at _makeTimerTimeout (timers.js:429:11) 
    at Timer.unrefTimeout [as ontimeout] (timers.js:493:5)  
    -------------------- 
    at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol /Protocol.js:141:48)  
    at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol /Protocol.js:52:41)  
    at Connection.connect (/var/task/node_modules/mysql  /lib/Connection.js:123:18)  
    at exports.handler (/var/task/exports.js:21:12)  
END RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae   
REPORT RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae 
Duration: 10988.17ms  
Process exited before completing request 

答えて

2

同じ問題があり、グーグルであなたのエントリーを見つけましたが、今私はそれを解決しました。 悲しいことに、私は実際にそれを解決したアクション、確かにわからないが、確認してください。

  • をあなたはグラント、それは公にアクセスRDSで動作するかどうかのVPCの使用が参照させる少なくともテスト目的のために
  • ない場合あなたの役割(例:lambda_basic_execution)IDおよびアクセス管理エリア内のAmazonRDSFullAccess
  • DBインスタンスの概要では、選択したセキュリティグループをクリックして編集できます。次のウィンドウでは、インバウンドおよびアウトバウンドのトラフィックルール。私の動作例では、すべてのポートとすべてのIP(0.0.0.0/0)からのトラフィックを両方の方法で許可しました。もちろん、これは安全な解決策ではありませんが、あなたの例に関しては、私のようにAWSに入って最初に実際のサンプルを作成しようとしていると思います。これらのルールを後で編集して、徐々にトラフィックを制限することができます。私は、私はあなたをそれがラムダ関数でVPCオプションやAPIエンドポイントを設定せずに働かせたと

    exports.handler = function(event, context) { 
    var mysql  = require('mysql'); 
    var connection = mysql.createConnection({ 
    host  : 'hostwithoutport', 
    user  : 'user', 
    password : 'password', 
    database : 'database' 
    }); 
    
    connection.query('SELECT * FROM Xy WHERE ID = "1"', function(err, rows) { 
    if (err) { 
    console.error('error connecting: ' + err.stack); 
    context.fail(); 
    return; 
    } 
    
    console.log('connected as id ' + connection.threadId); 
    context.succeed(rows); 
    }); 
    }; 
    

    を経由して接続を確立した最初の

で自分のコンピュータを介してRDSへの私のアクセスをテストするためにこれをしましたそれを別の方法で行うこともできますが、ラムダ関数を成功させ、失敗させる(または完了させる)ことを念頭に置いてください。そうしないと、ラムダ関数が成功して問合せが結果を判別できず、適切な結果が得られないことが原因で問題が発生する可能性があります。何らかの方法でラムダ関数を終了しないと、関数自体はタイムアウトしますが、それは異なって見えます。

また、常に接続を終了することを忘れないでください。これは、クエリを直接使用することによって暗示されます。この方法は、接続して単独で終了します。私が別のスレッドで読んだことによると、この問題は理論的には一度呼び出されたまだ開いている接続のために発生する可能性があります。

11

私はこれと同じ問題を抱えており、修正されました。 これがstackoverflowでのこの問題の上位検索結果であることを見て、ここで私のソリューションを投稿します。同じVPC内

この答えはVPC

  1. 内RDSインスタンスのためにある場所ラムダ機能をお使いのRDSインスタンスとして使用すると、VPCの実行を持っている必要があります
  2. あなたのラムダの実行の役割は、それに追加IAM
  3. あなたのラムダのためにそれを追加し、RDSインスタンスに接続セキュリティではラムダ関数
  4. にセキュリティグループを割り当てるmysqlの/オーロラ(ポート3306)のインバウンドルールを追加してではなく、IPアドレスのためにそれを追加しますセキュリティグループを機能させます。要約すると

これはRDSと同じVPCにラムダを置き、関係なく、ラムダ関数のIPのラムダ関数にMYSQLへのインバウンドアクセスを提供します。

+0

これは私にとってタイムアウトの問題を解決しました。ありがとう! – SexxLuthor

関連する問題