无法从 AWS Lambda 连接到 RDS Postgres,但可以建立套接字连接
Can not connect from AWS Lambda to RDS Postgres but can establish socket connection
RDS不能上网,和Lambda一样的VPC。我可以从同一 VPC 中的 EC2 连接到 RDS。我尝试建立从 Lambda 到 RDS 的套接字连接成功:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(s.connect(('xxx.cmebgbnbfkax.eu-west-1.rds.amazonaws.com', 5432)))
在日志中我看到 None
所以连接成功,但是我通过 psycopg2 连接超时:
psycopg2.connect(
host='xxx.cmebgbnbfkax.eu-west-1.rds.amazonaws.com',
dbname=<my db name>,
user=<my usernamr>,
password=<my password>)
我在 Lambda 上设置了最大超时 - 60 秒。安全组允许访问端口 5432。据我了解,如果我可以建立到数据库的套接字连接——这意味着所有关于网络的偏好都可以吗?那么哪里会出问题呢?
我的解决方案:我迁移到 DynamoDB - 现在我不需要在部署存档中使用静态链接库编译 psycopg2
。
RDS不能上网,和Lambda一样的VPC。我可以从同一 VPC 中的 EC2 连接到 RDS。我尝试建立从 Lambda 到 RDS 的套接字连接成功:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(s.connect(('xxx.cmebgbnbfkax.eu-west-1.rds.amazonaws.com', 5432)))
在日志中我看到 None
所以连接成功,但是我通过 psycopg2 连接超时:
psycopg2.connect(
host='xxx.cmebgbnbfkax.eu-west-1.rds.amazonaws.com',
dbname=<my db name>,
user=<my usernamr>,
password=<my password>)
我在 Lambda 上设置了最大超时 - 60 秒。安全组允许访问端口 5432。据我了解,如果我可以建立到数据库的套接字连接——这意味着所有关于网络的偏好都可以吗?那么哪里会出问题呢?
我的解决方案:我迁移到 DynamoDB - 现在我不需要在部署存档中使用静态链接库编译 psycopg2
。