Lambda関数からNodeを使用してMySQLデータベースに接続できませんでした。受け取るエラーはTask timed out after 4.00 seconds
。
ソリューションはありますか?
私の状態の概要は次のとおりです。
私のコード:
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);
});
};
タイムアウトを1分に増やします。ラムダ関数のコールドスタートが原因である可能性があります。
同じ接続を再利用しているため、最初の呼び出しだけに時間がかかり、連続した呼び出しは非常に高速になります。
また、タイムアウトを長くすることは、そのタイムアウトに対して課金されることを意味するのではなく、Lambdaの実行時間に対してのみ課金されます。
また、coldstart時間を短縮するために、スクリプトをwebpackすることができます。
http://docs.aws.Amazon.com/sdk-for-javascript/v2/developer-guide/webpack.html
もう1つの問題があります。
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');
});
};
それが役に立てば幸い。
RDSを使用しているため、セキュリティグループの構成を確認してください。デフォルトでは、RDSのセキュリティグループは、独自のIPおよびデフォルトVPC上のデフォルトセキュリティグループからのインバウンド接続を許可します。ただし、LambdaはデフォルトでVPCなしで実行されるため、RDSへの接続を確立できません。
RDSインスタンスを変更してすべてのIPアドレスを許可するか、RDSインスタンスがアクセスできるVPCでLambda関数を実行し、セキュリティグループへのアクセスを許可します。