对此有多个问题/答案,但似乎没有一个解决方案有效。
我目前的设置是:
- 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?谢谢!