首页 > 解决方案 > Lambda 在 2019 年 1 月 12 日 01:00 失去与 RDS 的连接(欧盟/伦敦)

问题描述

我有一组处理 SQS 堆栈上的消息的 lambda 函数。他们获取数据集,对其进行处理并将结果存储在 RDS MySQL 数据库中,并通过 VPC 连接到该数据库。Lambda 函数和 RDS 数据库都在同一个可用区中。

在过去的几个月里,这一直有效,没有任何问题,但是今天凌晨 (2019-01-12) 01:00,我开始看到 lambda 超时和消息被移入死信队列。

我进行了一些故障排除并确认超时的原因是 Lambda 无法建立与数据库服务器的连接。

RDS 服务器是公共的,但被锁定以仅允许通过 VPC 和 2 个公共 IP 进行访问。

到目前为止,我已采取以下步骤来尝试解决问题:

这似乎不是代码问题,因为在过去的几个月中它一直在完美运行,我可以毫无问题地在本地调用,而位于同一 VPC 子网上的 Elastic Beanstalk 实例继续通过 VPC 连接而没有问题。

这是我用来连接的代码:

connectionString = 'mysql+pymysql://{0}:{1}@{2}/{3}'.format(os.environ['DB_USER'], os.environ['DB_PASSWORD'], os.environ['DB_HOST'], os.environ['DB_SCHEMA'])
        engine = create_engine(connectionString, poolclass=NullPool)
        with engine.connect() as con: <--- breaking here
            meta = MetaData(engine, reflect=True) <-- never gets to here

我仔细检查了连接字符串和用户帐户,两者都是正确的/在本地工作。

如果有人能指出我正确的方向,我将不胜感激!

标签: python-3.xaws-lambdaamazon-rdsaws-vpc

解决方案


所以...

我正在更改安全组,但它对 RDS 主机没有影响,有一次我删除了所有访问权限,但我仍然可以连接,这太疯狂了。此时我开始认为周五晚上的中断使底层 RDS 主机进入了一个奇怪的状态。我将安全组恢复到应有的状态,停止并启动(重新启动无效)RDS 主机,一切又开始工作。

非常沮丧,但很高兴它终于解决了。


推荐阅读