我将 Lambda 与 RDS 代理一起使用,以便能够重用与 MySQL 数据库的数据库连接。
我应该在执行查询后关闭连接还是将其保持打开状态以供 RDS 代理处理?
如果我应该关闭连接,那么首先使用 RDS 代理有什么意义呢?
这是我的 lambda 函数的示例:
const mysql = require("mysql2/promise")
exports.handler = async (event, context) => {
const connection = mysql.createConnection({
host: process.env.RDS_HOST, // RDS Proxy endpoint here
user: process.env.RDS_USER,
database: process.env.RDS_DATABASE,
password: process.env.RDS_PASSWORD,
ssl: "Amazon RDS"
})
try {
await connection.connect()
console.log(`Connected to db. ConnectionId: ${connection.threadId}`)
} catch (err) {
return handleError(err)
}
try {
// Do some queries
} catch (err) {
return handleError(err)
} finally {
await connection.end() // Should I close the connection here?
}
return response(200, "Success")
}
编辑:请注意,在处理程序(全局范围)之外初始化连接将使 lambda 函数在同一执行环境中的调用之间保留连接变量的值,这将导致以下错误连接时无法添加新命令在短时间内多次调用lambda函数时处于关闭状态,因为连接在第一次调用时已经关闭,所以我最好建议在处理程序内部而不是外部定义连接。