Tengo una base de datos postgresql alojada en mi instancia ec2. Estoy tratando de conectarme usando Python desde mi computadora local.
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")pero lo consigo
Error while connecting to PostgreSQL could not connect to server: Connection timed out (0x0000274C/10060) Is the server running on host "ec2-***-***-***-***.***-***-1.compute.amazonaws.com" (**.**.**.***) and accepting TCP/IP connections on port 5432? no workMi archivo pg_hba.conf se ve así
# 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 identy mi archivo postgresql.conf parece
#------------------------------------------------------------------------------ # 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) Tengo un grupo de seguridad ec2:
¿Qué estoy haciendo mal? Soy un novato completo, cualquier ayuda apreciada!
El tiempo de espera de la conexión generalmente indica que no puede comunicarse con el host o que un firewall lo está bloqueando.
Primero intente hacer ping al host desde su máquina. Si suena bien, probablemente haya un firewall entre usted y su instancia EC2. Tu captura de pantalla de seguridad de EC2 me parece correcta.
¿Está detrás de un firewall que podría estar bloqueando las sesiones salientes desde su computadora local a Internet?
Después de solucionar algunos problemas a través del chat, descubrimos que el grupo de seguridad de AWS que permitía la entrada de TCP/5432 no estaba asignado a la instancia EC2.
Hay muchas causas posibles, por lo que comenzaría con un cliente de base de datos confiable como DBeaver e intentaría establecer la conexión desde su máquina local para descartar problemas con Python.
Dependiendo de su configuración, puede tener un segundo firewall entrante (iptables, etc.) ejecutándose dentro de su instancia ec2 que debe configurarse o deshabilitarse.
Inicie sesión en la consola ec2 y vea si puede conectarse al servidor. Cargue un cliente de base de datos como pgsql dentro de ec2 e intente conectarse al servidor con localhost:5432 como destino.
Es posible que deba modificar pg_hba.conf para que el servidor genere archivos de registro, pero eso puede indicarle si se está accediendo al servidor y cuál es el problema.