

# Conectar-se ao cluster de banco de dados usando a autenticação do IAM e o AWS SDK para Python (Boto3)
<a name="UsingWithRDS.IAMDBAuth.Connecting.Python"></a>

Você pode se conectar a um cluster de banco de dados Aurora MySQL ou Aurora PostgreSQL com a AWS SDK para Python (Boto3), conforme descrito a seguir.

**Pré-requisitos**  
Veja a seguir os pré-requisitos para se conectar ao cluster de banco de dados usando a autenticação do IAM:
+ [Habilitar e desabilitar a autenticação de banco de dados do IAM](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [Criar e usar uma política do IAM para acesso do banco de dados do IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [Criar uma conta de banco de dados usando autenticação do IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md)

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](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) na documentação AWS SDK para Python (Boto3).

O exemplo de código a seguir mostra como gerar um token de autenticação e usá-lo para se conectar a um cluster de banco de dados. 

Para executar esse exemplo de código, você precisa do [AWS SDK para Python (Boto3)](https://aws.amazon.com/sdk-for-python/), encontrado no site AWS.

Modifique os valores das seguintes variáveis, conforme necessário:
+ `ENDPOINT`: o endpoint do cluster de banco de dados que você deseja acessar
+ `PORT`: o número da porta usada para se conectar ao cluster de banco de dados
+ `USER`: a conta de banco de dados que você deseja acessar
+ `REGION`: a região da AWS na qual o cluster 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 Aurora

  Para `ssl_ca`, defina um certificado SSL. Para baixar um certificado SSL, consulte [Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados](UsingWithRDS.SSL.md).

**nota**  
Não é possível usar um registro DNS personalizado do Route 53 em vez do endpoint do cluster de banco de dados para gerar o token de autenticação.

Esse código se conecta a um cluster de banco de dados Aurora MySQL.

Antes de executar esse código, instale o driver PyMySQL seguindo as instruções no [Python Package Index](https://pypi.org/project/PyMySQL/).

```
import pymysql
import sys
import boto3
import os

ENDPOINT="mysqlcluster.cluster-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, ssl_verify_cert=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 um cluster de banco de dados Aurora PostgreSQL.

Antes de executar esse código, instale `psycopg2`, seguindo as instruções na [documentação de Psycopg](https://pypi.org/project/psycopg2/).

```
import psycopg2
import sys
import boto3
import os

ENDPOINT="postgresmycluster.cluster-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 um cluster de banco de dados por meio de um proxy, consulte [Conectar-se a um banco de dados usando autenticação do IAM](rds-proxy-connecting.md#rds-proxy-connecting-iam).