在 AWS Lambda 中使用 pymongo 一段时间后发生 AutoReconnect 连接关闭错误
Posted
技术标签:
【中文标题】在 AWS Lambda 中使用 pymongo 一段时间后发生 AutoReconnect 连接关闭错误【英文标题】:AutoReconnect connection closed error occurs after some inactive time with pymongo using in AWS Lambda 【发布时间】:2021-09-20 00:01:37 【问题描述】:我在 us-east-1 和 eu-west-1 地区有一个用 Python 3.8 编写的 lambda 函数。 Lambda 正在尝试连接到 Mongodb(两个区域的数据库相同) us-east-1 地区的 Lambda 运行良好 ew-west-1 区域中的 Lambda 抛出 AutoReconnect('connection closed')> 错误 它发生在 15-60 分钟不活动后。我的意思是如果 lambda 没有执行一个小时,它会正常工作。但如果你决定在 20 分钟内再次运行它,它就会崩溃。 这是我当前的代码:
import pymongo
import logging
import os
connectionString = os.environ.get('MONGODBCONNECTIONSTRING')
databaseName = os.environ.get('MONGODBDATABASENAME')
clientMongo = pymongo.MongoClient(connectionString)
def lambda_handler(event, context):
try:
db = getattr(clientMongo, databaseName)
session_doc = db["_Session"]
return session_doc.find_one("_session_token": "123")
except Exception as ex:
logging.error(ex)
return None
错误发生在一行
return session_doc.find_one("_session_token": "123")
变量 session_doc 类型是集合,但我无法从中获取一行 我试图用循环和 try-except 来包装它,它没有帮助,在没有达到 lambda 超时的情况下一次又一次地发生错误
我应该如何更改我的代码,以免出现此错误?
【问题讨论】:
【参考方案1】:这是 MongoDB 白名单的错误。 Lambda 有两个子网,一个 IP 地址在白名单中,但第二个不在。我已将第二个 IP 添加到白名单中,它对我有用。
【讨论】:
以上是关于在 AWS Lambda 中使用 pymongo 一段时间后发生 AutoReconnect 连接关闭错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS CDK 在 AWS Codepipeline 中部署 Python Lambda 函数
如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?