Step Function Map State中的Lambda执行后是否需要关闭MongoDB连接
Lambda + MongoDB 连接问题解答
执行完是否需要主动关闭连接
你当前在Step Function Map State的使用场景下需要主动关闭。Map State会触发大量Lambda实例并发或串行执行,若不每次执行都释放连接,很快会占满MongoDB的最大连接数阈值,导致后续所有连接请求被拒绝,你现有代码中finally块内的await db.disconnect()逻辑是必要的。
不主动关闭连接是否会一直保持
只要Lambda执行环境未被销毁(Lambda执行完代码后,执行环境会被冷冻保留一段时间,用来响应同函数的后续调用),未关闭的连接会一直处于空闲存活状态,不会自动释放。
MongoDB服务端是否会主动关闭空闲连接
默认原生MongoDB没有配置空闲连接超时规则,不会主动断开空闲连接。如果你使用的是云厂商托管的MongoDB服务,一般默认会配置10~30分钟的空闲连接超时,到时间后服务端会主动断开连接;如果是自建MongoDB,需要手动配置net.idleConnectionTimeoutMS参数才会触发服务端主动断开空闲连接。
该场景最佳实践
- 若Map State并发度极低(单批次并发量低于10,总执行次数很少):可以复用Lambda执行环境的连接,将连接实例提到handler外部,不需要每次关闭,降低连接建立开销:
// 连接实例定义在handler外部,执行环境复用时可复用连接 let dbConn = null export const handler = async (_, context) => { context.callbackWaitsForEmptyEventLoop = false try { if (!dbConn || !dbConn.isConnected()) { dbConn = await db.connect() } // 执行业务逻辑 } catch (err) { // 异常处理逻辑 } }
- 若Map State并发度高、总执行次数多:保留你现有每次执行完主动断开连接的逻辑,避免连接数溢出影响整体服务可用性。
- 兜底优化:给MongoDB配置合理的空闲连接超时时间,避免异常场景下的连接泄露。
内容的提问来源于stack exchange,提问作者Aslan Gurbanov
相关产品推荐
相关产品推荐

