在 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 命令?

AWS Lambda、API 网关和 Cognito:如何在 lambda 函数中获取身份对象?

aws Lambda函数访问策略

使用nodejs中的AWS Lambda函数上传音频文件

是否可以在 aws lambda 中使用 bigquery?