无法从 EC2 ubuntu 实例 (python psycopg2) 连接到 RDS postgresql 实例

Can't connect to RDS postgresql instance from EC2 ubuntu instance (python psycopg2)

我在 AWS 上有一个 postgresql 数据库,可以在我的本地测试服务器上运行。

我编写了连接到 EC2 (Ubuntu t2.micro) 的 CI/CD 代码并克隆了代码存储库,当我启动该应用程序时,出现此错误:

Traceback (most recent call last):
File "app.py", line 3, in <module>
from app.routes.company_controller import company_app
File "/home/ubuntu/back-end/app/routes/company_controller.py", line 11, in <module>
db_connection = psycopg2.connect(**db_param)
File "/home/ubuntu/.local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in 
connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: 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"?

该代码适用于本地,但这里看起来像:

db_param = config_var()
db_connection = psycopg2.connect(**db_param)

config_var() returns 一个字典,包含从环境变量和日志连接到数据库的所有信息,这很好。

这是 installs/launches 应用的 bash 脚本:

  "git clone https://$back_user:$back_token@gitlab.com/blabla \
  && cd blabla \
  && sudo apt-get -y install python3-pip \
  && sudo apt-get -y install libpq-dev python-dev \
  && pip install -r requirements.txt \
  && python3 app.py"

在 requirements.txt 我有一行 psycopg2。 最后但并非最不重要的一点是,我向任何人开放了这个世界上任何 IP 地址的所有端口,以使这个学习过程更容易,但我无法摆脱那个错误。

编辑:如评论中所问,更多细节: 这就是 config_var() 所做的:

def config_var():
return {
    "database": os.environ.get('DATABASE'),
    "user": os.environ.get('USER'),
    "password": os.environ.get('PASSWORD'),
    "host": os.environ.get('HOST'),
    "port": os.environ.get('PORT')
}

下面是我在 bash 脚本中设置变量的方式(连接到 EC2 后,我 运行 在 CI 管道中设置了这个变量):

 "export USER=$user \
 && export DATABASE=$database \
 && export PASSWORD=$password \
 && export HOST=$host \
 && export PORT=$port"

我发现了错误,问题是我的变量没有在 ubuntu 会话中正确设置。

导致我出错的是 psycopg2 文档和上面的评论。 "host – database host address (defaults to UNIX socket if not provided)"