Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

312
Visualizações
Cómo conectarse a la base de datos AWS RDS MySql con Python

Actualmente estoy tratando de conectarme a mi base de datos MySql creada en AWS con un programa python usando la biblioteca PyMySQL

 # !/usr/bin/env python # -*- coding: utf-8 -*- import pymysql host = 'admin.cjp8hsqu4je0.us-east-2.rds.amazonaws.com' user = 'admin' password = '12345678' database = 'admin' connection = pymysql.connect(host, user, password, database) with connection: cur = connection.cursor() cur.execute("SELECT VERSION()") version = cur.fetchone() print("Database version: {} ".format(version[0]))

Cuando ejecuto el código anterior me sale el siguiente error:

 Traceback (most recent call last): File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pymysql\connections.py", line 581, in connect sock = socket.create_connection( File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 808, in create_connection raise err File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 796, in create_connection sock.connect(sa) socket.timeout: timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): File "bot.py", line 10, in <module> connection = pymysql.connect(host, user, password, database) File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pymysql\__init__.py", line 94, in Connect return Connection(*args, **kwargs) File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pymysql\connections.py", line 325, in __init__ self.connect() File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pymysql\connections.py", line 630, in connect raise exc pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'admin.cjp8hsqu4je0.us-east-2.rds.amazonaws.com' (timed out)")

¿Qué estoy haciendo mal? Los argumentos que le di a la función son correctos. ¿Podría ser un problema con el controlador MySql?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Si desea acceder a su RDS desde fuera de AWS a través de Internet, debe configurarse para que esté disponible públicamente :

ingrese la descripción de la imagen aquí

También debe colocarse en una subred pública (p. ej., VPC predeterminada) y tener reglas de entrada abiertas en su grupo de seguridad ( una buena práctica es limitar el acceso solo a las IP seleccionadas o al rango de IP, en lugar de usar 0.0.0.0/0 ):

ingrese la descripción de la imagen aquí

Espero que esto ayude.

over 4 years ago · Santiago Trujillo Relatório

0

Se agotó el tiempo de espera de esta solicitud, lo que indica que no puede conectarse debido a una regla de firewall.

Si está ejecutando esto en una instancia o contenedor EC2, entonces:

  • Asegúrese de que la instancia de RDS esté configurada para permitir el acceso entrante al rango de subred para la instancia/contenedor en el puerto 3306 mediante su grupo de seguridad.

Si está ejecutando esto externamente, entonces necesitará:

  • Conéctese a través de una VPN a su VPC y actualice el grupo de seguridad de RDS para incluir en la lista blanca su rango de CIDR local
  • Si no puede usar una VPN, deberá crear el RDS para que sea de acceso público con un grupo de seguridad que incluya en la lista blanca el acceso entrante a su dirección IP pública.

Si está utilizando un Lambda, se debe hacer lo siguiente:

  • Migre su Lambda a la VPC, adjunte un grupo de seguridad que permita el acceso saliente (de forma predeterminada, debería permitir el acceso saliente a todo). Debe estar en subredes privadas
  • Actualice el grupo de seguridad de la base de datos RDS para permitir el acceso entrante en el puerto 3306 a las subredes LAmbda o al grupo de seguridad adjunto a Lambda.

En este documento encontrará más información sobre la configuración de Lambda dentro de una VPC.

over 4 years ago · Santiago Trujillo Relatório

0

Finalmente llego a la solución definitiva:

Si tiene una instancia EC2 que está correctamente conectada a la instancia RDS, puede abrir un túnel ssh entre ellas y usar pymysql (biblioteca de python).

¡Aquí está el increíble código que salva el día! (Agregué un código y comentarios, pero puede obtener el código original usando el enlace a continuación) Enlace al github del salvador

En primer lugar, instale estas bibliotecas:

  • !pip instalar sshtunnel

  • !pip instalar PyMySQL

     # Import libraries from sshtunnel import SSHTunnelForwarder import pymysql # SSH (ec2_public_dns, ec2_user, pem_path, remote_bind_address=(rds_instance_access_point, port)) with SSHTunnelForwarder(('ec2-52-202-194-76.public-ec2-instance.amazonaws.com'), ssh_username="ec2-user", ssh_pkey="~/ssh-tunnel-rds.pem", remote_bind_address=('private-rds-instance.ckfkidfytpr4.us-east-1.rds.amazonaws.com', 3306)) as tunnel: print("****SSH Tunnel Established****") db = pymysql.connect( host='127.0.0.1', user="rdsuser",password="rdspassword", port=tunnel.local_bind_port, database="dbName" ) # Run sample query in the database to validate connection try: # Print all the databases with db.cursor() as cur: # Print all the tables from the database cur.execute('SHOW TABLES FROM dbName') for r in cur: print(r) # Print all the data from the table cur.execute('SELECT * FROM table_name') for r in cur: print(r) finally: db.close() print("YAYY!!")
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda