web-dev-qa-db-ja.com

ラムダ関数でデータベース接続を適切に閉じる方法は?

ラムダ関数では、コールバックを送信するとすぐにmongo接続を閉じようとしました。しかし、問題があります。

  • リクエストを送信すると、関数はその役割を果たし、コールバックを送信してデータベース接続を閉じます。
  • 2番目の要求が送信されると、関数はタイムアウトになります。
  • db.close()を削除すると、問題なく動作します。

ハンドラーの上部で接続を開くため、ラムダはすべての関数の接続を再利用すると思います。

// Connect to database
mongoose.connect(process.env.DATABASE_URL);


const handleCreateUser = async (event, context, callback) => {
  // eslint-disable-next-line no-param-reassign
  context.callbackWaitsForEmptyEventLoop = false;

  const data = JSON.parse(event.body);
  const { user, userProfile } = data;

  await createUser({ callback, user, userProfile });
};

これを修正する方法はありますか?この時点で本当に接続を閉じる必要がありますか?

11
THpubs

ハンドラー内で_mongoose.connect_コードを移動するか、db.close()の呼び出しを停止します。現在、Lambda関数の複数の呼び出しによって再利用されている単一のデータベース接続がありますが、最初の呼び出しが完了した後で接続を閉じています。

4
Mark B