如何在 lambda 函数中正确关闭数据库连接?

How to properly close the database connection in a lambda function?

在我的 lambda 函数中,我试图在发送回调后立即关闭 mongo 连接。但是它有一个问题。

我认为 lambda 为所有函数重新使用了连接,因为我在处理程序的顶部打开了连接:

// 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 });
};

知道如何解决这个问题吗?我们真的必须在此时关闭连接吗?

可能会尝试 try-with-resource 自动关闭连接。

要么将 mongoose.connect 代码移到处理程序中,要么停止调用 db.close()。您当前有一个数据库连接被 Lambda 函数的多次调用重用,但您在第一次调用完成后关闭它。

我的用法是 Python,但您将使用您喜欢的语言进行操作。 lambda 的最佳解决方案,考虑按次付费: 运行 在 lamba 函数之前全局执行此操作(我在配置中执行此操作 class)

if self.conn == None or self.conn.close == 1:
  self.make_connection()

如何实施 make_connection() 取决于您。 根本不要使用 db.close()。

AWS 调用加载您的 lambda 函数并 运行 加载您的全局函数一次。 之后在每次调用时它只运行它保持加载一段时间的 lambda(从一些测试 20 分钟到 50 分钟)。 数据库驱动程序将在内部超时时关闭连接。

优点 - 长时间只打开一次连接,为每个 lambda 节省时间 运行。

缺点 - lambda 在内存中时你一直保持连接。

在我看来这是值得的。