Você pode se conectar a uma instância de banco de dados do RDS para MariaDB, RDS para MySQL ou RDS para PostgreSQL com a AWS SDK para Python (Boto3), conforme descrito a seguir.
Pré-requisitos
Veja a seguir os pré-requisitos para se conectar à instância de banco de dados usando a autenticação do IAM:
Além disso, verifique se as bibliotecas importadas no código de exemplo existem no sistema.
Exemplos
Os exemplos de código usam perfis para credenciais compartilhadas. Para obter informações sobre a especificação de credenciais, consulte Credenciais
O exemplo de código a seguir mostra como gerar um token de autenticação e usá-lo para se conectar a uma instância de banco de dados.
Para executar esse exemplo de código, você precisa do AWS SDK para Python (Boto3)
Modifique os valores das seguintes variáveis, conforme necessário:
-
ENDPOINT
: o endpoint da instância de banco de dados que você deseja acessar -
PORT
: o número da porta usada para se conectar à instância de banco de dados -
USER
: a conta de banco de dados que você deseja acessar -
REGION
: a região da AWS na qual a instância do banco de dados está em execução. -
DBNAME
: o banco de dados que você deseja acessar -
SSLCERTIFICATE
: o caminho completo para o certificado SSL do Amazon RDSPara
ssl_ca
, defina um certificado SSL. Para baixar um certificado SSL, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.
nota
Não é possível usar um registro DNS personalizado do Route 53 em vez do endpoint do da instância de banco de dados para gerar o token de autenticação.
Esse código se conecta a uma instância de banco de dados MariaDB ou MySQL.
Antes de executar esse código, instale o driver PyMySQL seguindo as instruções no Python Package Index
import pymysql
import sys
import boto3
import os
ENDPOINT="mysqldb.123456789012.us-east-1.rds.amazonaws.com
"
PORT="3306
"
USER="jane_doe
"
REGION="us-east-1
"
DBNAME="mydb
"
os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1'
#gets the credentials from .aws/credentials
session = boto3.Session(profile_name='default')
client = session.client('rds')
token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION)
try:
conn = pymysql.connect(auth_plugin_map={'mysql_clear_password':None},host=ENDPOINT, user=USER, password=token, port=PORT, database=DBNAME, ssl_ca='SSLCERTIFICATE
', ssl_verify_identity=True)
cur = conn.cursor()
cur.execute("""SELECT now()""")
query_results = cur.fetchall()
print(query_results)
except Exception as e:
print("Database connection failed due to {}".format(e))
Esse código se conecta a uma instância de banco de dados PostgreSQL.
Antes de executar esse código, instale psycopg2
, seguindo as instruções na documentação de Psycopg
import psycopg2
import sys
import boto3
import os
ENDPOINT="postgresmydb.123456789012.us-east-1.rds.amazonaws.com
"
PORT="5432
"
USER="jane_doe
"
REGION="us-east-1
"
DBNAME="mydb
"
#gets the credentials from .aws/credentials
session = boto3.Session(profile_name='RDSCreds')
client = session.client('rds')
token = client.generate_db_auth_token(DBHostname=ENDPOINT
, Port=PORT
, DBUsername=USER
, Region=REGION
)
try:
conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USER, password=token, sslrootcert="SSLCERTIFICATE
")
cur = conn.cursor()
cur.execute("""SELECT now()""")
query_results = cur.fetchall()
print(query_results)
except Exception as e:
print("Database connection failed due to {}".format(e))
Se você quiser se conectar a uma instância de banco de dados por meio de um proxy, consulte Conectar-se a um proxy usando autenticação do IAM.