AWS Lambda 到 RDS PostgreSQL

AWS Lambda to RDS PostgreSQL

各位 AWS 贡献者大家好,我目前正在开展一个项目,以设置一个将 Lambda 函数连接到我们在 RDS 上托管的 PostgreSQL 数据库的示例。我在本地测试了我的 Python + SQL 代码(在 VS 代码和 DBeaver 中),它在仅包含基本凭据(主机、数据库名、用户名密码)的情况下工作得很好。但是,当我将代码粘贴到 Lambda 函数中时,它给了我各种各样的错误。我遵循此 template 并修改了我的代码以改为从秘密管理器检索凭据。

我目前正在使用 boto3、psycopg2 和秘密管理器来获取凭据并连接到数据库。

我遇到的错误列表-

  1. 服务器意外关闭了连接。这可能意味着服务器在处理请求之前或期间异常终止
  2. 无法连接到服务器:连接超时。服务器 运行 正在主机“db 端点”上并在端口 5432 上接受 TCP/IP 连接吗?
  3. 严重:没有 pg_hba.conf 主机“ip:xxx”、用户“userXXX”、数据库“dbXXX”、SSL 关闭的条目

我尝试过的东西 -

  1. RDS和Lambda在同一个VPC,同一个子网,同一个安全组。
  2. IP 地址包含在入站规则中
  3. Lambda 函数设置为 运行 最多 15 分钟,它总是在达到 15 分钟之前停止
  4. 我尝试了数据库端点和数据库代理端点,none 有效。

当我在本地 运行 代码时,我真的没有意义,我只需要提供主机、数据库名、用户名和密码,仅此而已,我能够编写我想要的所有查询和功能。但是当我将代码放入 lambda 函数时,它需要所有这些秘密管理器、VPC 安全组、SSL、代理、TCP/IP 规则等。有人可以解释为什么 运行 之间存在需求差异吗在本地和在 lambda 上?

最后,有人知道我的设置有什么问题吗?我很乐意提供与此相关的任何信息,任何一般的研究方向都会非常有帮助。谢谢!

按照下面 link 中的说明构建特定的 psycopg2 程序包并验证 VPC 子网和安全组是否正确配置为我解决了这个问题。

我在 Amazon Linux 2 AMI 实例上使用 psycopg2 v2.9.3 为 Python 3.7.10 运行 构建了一个 PostgreSQL 10.20 包。我必须对方向进行的唯一更改是在压缩之前将 psycopg2 目录放入 python 目录(即“python/psycopg2/”)——Lambda 中的 import psycopg2 语句在我这样做之前功能失败了。

这是我正在使用的 VPC 场景。 Lambda 函数在 Public 子网和关联的安全组内执行。专用子网安全组的入站规则只允许 Public 子网安全组的 TCP 连接到 5432。