Python 无法远程连接到托管在amazon ec2实例上的postgresql数据库

Python 无法远程连接到托管在amazon ec2实例上的postgresql数据库,python,postgresql,amazon-web-services,amazon-ec2,Python,Postgresql,Amazon Web Services,Amazon Ec2,我的ec2实例上有一个postgresql数据库。我正在尝试从本地计算机使用Python连接到它 import psycopg2 try: connection = psycopg2.connect(user="postgres", password="<password>", host="ec2-***-*

我的ec2实例上有一个postgresql数据库。我正在尝试从本地计算机使用Python连接到它

import psycopg2

try:
 connection = psycopg2.connect(user="postgres",
                               password="<password>",
                               host="ec2-***-***-***-***.***-***-1.compute.amazonaws.com",
                               port="5432",
                               database="<db_name>")

 cursor = connection.cursor()

 cursor.execute(f"SELECT * FROM <tablename>;")
 record = cursor.fetchall()
 print(record, "\n")

except (Exception, psycopg2.Error) as error:
 print("Error while connecting to PostgreSQL", error)
finally:
 try:
     if connection:
         cursor.close()
         connection.close()
         print("PostgreSQL connection is closed")
 except:
     print("no work")
我的pg_hba.conf文件如下所示

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident
我的postgresql.conf文件如下所示

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)
我有一个ec2安全组:
我做错了什么?我是一个完全的新手,任何帮助感谢

连接超时通常表示您无法访问主机或被防火墙阻止

首先尝试从您的计算机ping主机。如果ping正常,那么您和EC2实例之间可能有防火墙。我觉得你的EC2安全截图很好

您是否在防火墙后面,防火墙可能会阻止从本地计算机到Internet的出站会话


通过聊天进行故障排除后,我们发现允许TCP/5432入站的AWS安全组未分配给EC2实例。

连接超时通常表示您无法访问主机或被防火墙阻止

首先尝试从您的计算机ping主机。如果ping正常,那么您和EC2实例之间可能有防火墙。我觉得你的EC2安全截图很好

您是否在防火墙后面,防火墙可能会阻止从本地计算机到Internet的出站会话


通过聊天进行故障排除后,我们发现允许TCP/5432入站的AWS安全组未分配给EC2实例。

可能有许多原因,因此我将从一个受信任的DB客户端(如DBeaver)开始,并尝试从本地计算机建立连接,以排除python问题

根据您的设置,您可能有第二个传入的防火墙iptables等在ec2实例中运行,需要配置或禁用

登录ec2控制台,查看是否可以连接到服务器。在ec2内加载类似pgsql的db客户端,并尝试连接到以localhost:5432为目标的服务器


您可能需要更改pg_hba.conf,以便服务器生成日志文件,但这可以告诉您是否正在访问服务器,以及问题是什么。

有许多可能的原因,因此我将从一个受信任的数据库客户端(如DBeaver)开始,尝试从本地计算机建立连接,以排除python问题

根据您的设置,您可能有第二个传入的防火墙iptables等在ec2实例中运行,需要配置或禁用

登录ec2控制台,查看是否可以连接到服务器。在ec2内加载类似pgsql的db客户端,并尝试连接到以localhost:5432为目标的服务器


您可能需要更改pg_hba.conf,以便服务器生成日志文件,但这可以告诉您是否正在访问服务器,以及问题所在。

我可以从ec2实例访问数据库,但不能远程访问。我尝试使用pgAdmin,但它也说超时已过期。我将尝试使用日志文件,谢谢。我可以从ec2实例访问数据库,但不能远程访问。我尝试使用pgAdmin,但它也说超时已过期。我将尝试使用日志文件,谢谢。我尝试ping它ping ec2-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***?在对数据库连接进行故障排除之前,请确定是否可以访问服务器。我可以使用PuTTY和ec2密钥对通过SSH连接到实例。Ok。你用的是同一个DNA名字吗?它是否解析为PuTTY会话使用的相同IP地址?如果是这样,那么您是在控制您的本地网络,还是在工作?我使用的是相同的DNS,但没有ec2-user@. 我如何检查IP?这是我的家庭网络。我尝试ping它ping ec2-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***?在对数据库连接进行故障排除之前,请确定是否可以访问服务器。我可以使用PuTTY和ec2密钥对通过SSH连接到实例。Ok。你用的是同一个DNA名字吗?它是否解析为PuTTY会话使用的相同IP地址?如果是这样,那么您是在控制您的本地网络,还是在工作?我使用的是相同的DNS,但没有ec2-user@. 我如何检查IP?这是我的家庭网络。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)