1

对此有多个问题/答案,但似乎没有一个解决方案有效。

我目前的设置是:

  • VPC 中的 Lambda(使用 python 2.7 运行时)
  • 同一 VPC 中的 RDS 实例(postgres)
  • Lambda 角色具有对某些 S3 存储桶和 AWSLambdaVPCAccessExecutionRole 的策略读/写
  • Lambda 子网的路由表可以访问本地 IP 和 S3 的 VPC 终端节点
  • RDS 子网的路由表可以访问本地 IP
  • Lambda 安全组 (SG) 具有 Postgres 和 VPC 端点的入站和出站规则
  • RDS SG 具有针对 Lambda SG id 的入站和出站规则

我正在使用 psycopg2 进行连接,它在我的requirements.txt文件中。我尝试了一个简单的 SELECT 查询,如下所示:

conn = psycopg2.connect(dbname=os.environ['DB_NAME'], user=os.environ['USERNAME'], password=os.environ['PASSWORD'])
cursor = conn.cursor()
query = "SELECT * from {};".format(os.environ['TABLE'])
cursor.execute(query)
records = cursor.fetchall()

这给了我错误:

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
: OperationalError
Traceback (most recent call last):
File "/var/task/mylambda.py", line 31, in call
conn = psycopg2.connect(dbname=os.environ['DB_NAME'], 
user=os.environ['USERNAME'], password=os.environ['PASSWORD'])
File "/tmp/sls-py-req/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

我错过了什么?如何从我的 Lambda 成功连接到 RDS?谢谢!

4

0 回答 0