

# Solução de problemas do RDS Proxy
<a name="rds-proxy.troubleshooting"></a>

 A seguir, é possível encontrar ideias de solução de problemas para alguns problemas comuns do proxy do RDS e informações sobre logs do CloudWatch para o RDS Proxy. 

 Nos logs do RDS Proxy, cada entrada é prefixada com o nome do endpoint de proxy associado. Esse nome pode ser o nome que você especificou para um endpoint definido pelo usuário. Ou pode ser o nome especial `default` para o endpoint padrão de um proxy que realiza solicitações de leitura/gravação. Para obter mais informações sobre os endpoints do proxy, consulte [Como trabalhar com endpoints do proxy do Amazon RDS](rds-proxy-endpoints.md). 

**Topics**
+ [Verificar a conectividade para um proxy](#rds-proxy-verifying)
+ [Problemas e soluções comuns](#rds-proxy-diagnosis)
+ [Solução de problemas do RDS Proxy com o RDS para MySQL](#rds-proxy-MySQL-troubleshooting)
+ [Solução de problemas do RDS Proxy com o RDS para PostgreSQL](#rds-proxy-PostgreSQL-troubleshooting)

## Verificar a conectividade para um proxy
<a name="rds-proxy-verifying"></a>

 É possível usar os comandos a seguir para verificar se todos os componentes, como proxy, banco de dados e instâncias de computação na conexão, podem se comunicar entre si. 

 Examine o próprio proxy usando o comando [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). Examine também o grupo de destino associado usando o comando [describe-db-proxy-target-groups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-target-groups.html). Confira se os detalhes dos destinos correspondem à instância de banco de dados do RDS que você pretende associar ao proxy. Use comandos como os seguintes. 

```
aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME
aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME
```

 Para confirmar se o proxy pode se conectar ao banco de dados subjacente, examine os destinos especificados nos grupos de destino usando o comando [describe-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-targets.html). Use um comando como o seguinte. 

```
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME
```

 A saída do comando [describe-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-targets.html) inclui um campo `TargetHealth`. É possível examinar os campos `State`, `Reason` e `Description` dentro de `TargetHealth` para verificar se o proxy pode se comunicar com a instância de banco de dados subjacente. 
+  Um valor `State` de `AVAILABLE` indica que o proxy pode se conectar à instância de banco de dados. 
+  Um valor `State` de `UNAVAILABLE` indica um problema de conexão temporário ou permanente. Nesse caso, examine os campos `Reason` e `Description`. Por exemplo, se `Reason` tiver um valor de `PENDING_PROXY_CAPACITY`, tente se conectar novamente depois que o proxy terminar sua operação de escalabilidade. Se `Reason` tiver um valor de `UNREACHABLE`, `CONNECTION_FAILED` ou `AUTH_FAILURE`, use a explicação do campo `Description` para ajudá-lo a diagnosticar o problema. 
+  O campo `State` pode ter um valor de `REGISTERING` por um breve período antes de alterar para `AVAILABLE` ou `UNAVAILABLE`. 

 Se o comando do Netcat a seguir (`nc`) for bem-sucedido, você poderá acessar o endpoint do proxy na instância do EC2 ou em outro sistema em que esteja conectado. Esse comando relata uma falha se você não estiver na mesma VPC que o proxy e o banco de dados associado. Você pode fazer login diretamente no banco de dados sem estar na mesma VPC. No entanto, não é possível fazer login no proxy a menos que você esteja na mesma VPC. 

```
nc -zx MySQL_proxy_endpoint 3306

nc -zx PostgreSQL_proxy_endpoint 5432
```

 Você pode usar os comandos a seguir para garantir que sua instância do EC2 tenha as propriedades necessárias. Em particular, a VPC da instância do EC2 deve ser a mesma que a VPC da instância de banco de dados do RDS ou do cluster de bancos de dados Aurora ao qual o proxy se conecta. 

```
aws ec2 describe-instances --instance-ids your_ec2_instance_id
```

 Examine os segredos do Secrets Manager usados para o proxy. 

```
aws secretsmanager list-secrets
aws secretsmanager get-secret-value --secret-id your_secret_id
```

 O campo `SecretString` exibido por `get-secret-value` deve estar codificado como uma string JSON que inclua os campos `username` e `password`. O exemplo a seguir mostra o formato do campo `SecretString`. 

```
{
  "ARN": "some_arn",
  "Name": "some_name",
  "VersionId": "some_version_id",
  "SecretString": '{"username":"some_username","password":"some_password"}',
  "VersionStages": [ "some_stage" ],
  "CreatedDate": some_timestamp
}
```

Ao solucionar problemas de autenticação do IAM, verifique o seguinte:
+ O banco de dados tem a autenticação do IAM habilitada.
+ O proxy está configurado com o esquema de autenticação correto.
+ As políticas do IAM no perfil do IAM fornecido ao proxy concedem a permissão `rds-db:connect` necessária para o banco de dados apropriado e seu nome de usuário.
+ Para a autenticação de ponta a ponta do IAM, existem usuários de banco de dados que correspondem aos nomes de usuário ou perfil do IAM.
+ O SSL/TLS está habilitado para a conexão.

## Problemas e soluções comuns
<a name="rds-proxy-diagnosis"></a>

Esta seção descreve alguns problemas comuns e possíveis soluções ao usar o Proxy RDS.

Depois de executar o comando `aws rds describe-db-proxy-targets` da CLI, se a descrição de `TargetHealth` indicar `Proxy does not have any registered credentials`, verifique o seguinte:
+ Há credenciais registradas para que o usuário acesse o proxy.
+ O perfil do IAM para acessar o segredo do Secrets Manager usado pelo proxy é válido.

Você pode encontrar os eventos de RDS a seguir ao criar ou se conectar a um proxy de banco de dados.


| Categoria | ID do evento do RDS | Descrição | 
| --- | --- | --- | 
|  falha  | RDS-EVENT-0243 | O RDS não conseguiu provisionar capacidade para o proxy porque não há endereços IP suficientes disponíveis em suas sub-redes. Para resolver o problema, suas sub-redes devem ter o número mínimo de endereços IP não usados. Para determinar o número recomendado para sua classe de instância, consulte [Planejar a capacidade de endereços IP](rds-proxy-network-prereqs.md#rds-proxy-network-prereqs.plan-ip-address). | 
|  falha  | RDS-EVENT-0275 |  O RDS limitou algumas conexões com o proxy de banco de dados *nome*. O número de solicitações de conexão simultâneas do cliente para o proxy excedeu o limite.  | 

 Você pode encontrar os seguintes problemas ao criar um proxy ou ao se conectar a um proxy. 


|  Erro  |  Causas ou soluções alternativas  | 
| --- | --- | 
|   `403: The security token included in the request is invalid`   |  Selecione uma função existente do IAM em vez de optar por criar uma.  | 

## Solução de problemas do RDS Proxy com o RDS para MySQL
<a name="rds-proxy-MySQL-troubleshooting"></a>

 Você pode encontrar os problemas a seguir ao se conectar a um proxy do MySQL. 


|  Erro  |  Causas ou soluções alternativas  | 
| --- | --- | 
|  ERROR 1040 (HY000): Connections rate limit exceeded (limit\$1value)  |  A taxa de solicitações de conexão do cliente para o proxy excedeu o limite.  | 
|  ERROR 1040 (HY000): IAM authentication rate limit exceeded  |  O número de solicitações simultâneas com autenticação do IAM do cliente para o proxy excedeu o limite.  | 
|  ERROR 1040 (HY000): Number simultaneous connections exceeded (limit\$1value)  |  O número de solicitações de conexão simultâneas do cliente para o proxy excedeu o limite.  | 
|   `ERROR 1045 (28000): Access denied for user 'DB_USER'@'%' (using password: YES)`   |  O segredo do Secrets Manager usado pelo proxy não corresponde ao nome de usuário e à senha de um usuário de banco de dados existente. Atualize as credenciais no segredo do Secrets Manager ou verifique se o usuário do banco de dados existe e tem a mesma senha do segredo.  | 
|  ERROR 1105 (HY000): Unknown error  |  Ocorreu um erro desconhecido.  | 
|  ERROR 1231 (42000): Variable ''character\$1set\$1client'' can't be set to the value of value  |   O valor definido para o parâmetro `character_set_client` não é válido. Por exemplo, o valor `ucs2` não é válido porque ele pode travar o servidor do MySQL.   | 
|  ERROR 3159 (HY000): This RDS Proxy requires TLS connections.  |   Você habilitou a configuração **Exigir Transport Layer Security** no proxy, mas a conexão incluiu o parâmetro `ssl-mode=DISABLED` no cliente MySQL. Realize um dos procedimentos a seguir:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  | 
|  ERROR 2026 (HY000): SSL connection error: Internal Server Error  |   Falha no handshake TLS para o proxy. Algumas razões possíveis incluem:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  | 
|  ERROR 9501 (HY000): Timed-out waiting to acquire database connection  |   O tempo limite do proxy foi atingido enquanto aguardava para adquirir uma conexão de banco de dados. Algumas razões possíveis incluem:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  | 

## Solução de problemas do RDS Proxy com o RDS para PostgreSQL
<a name="rds-proxy-PostgreSQL-troubleshooting"></a>

 Você pode encontrar os problemas a seguir ao se conectar a um proxy do PostgreSQL. 


|  Erro  |  Causa  |  Solução  | 
| --- | --- | --- | 
|   `ERROR 28000: IAM authentication is allowed only with SSL connections.`   |   O usuário tentou se conectar ao banco de dados usando a autenticação do IAM com a configuração `sslmode=disable` no cliente do PostgreSQL.   |   O usuário precisa se conectar ao banco de dados usando a configuração mínima de `sslmode=require` no cliente do PostgreSQL. Para obter mais informações, consulte a documentação [PostgreSQL SSL Support](https://www.postgresql.org/docs/current/libpq-ssl.html).   | 
|  `ERROR 28000: This RDS proxy has no credentials for the role role_name. Check the credentials for this role and try again.`   |   Não há segredo do Secrets Manager para essa função.   |   Adicione um segredo do Secrets Manager para essa função. Para ter mais informações, consulte [Configurar a autenticação do IAM para o RDS Proxy](rds-proxy-iam-setup.md).  | 
|  `ERROR 28000: RDS supports only IAM, MD5, or SCRAM authentication.`   |   O cliente de banco de dados que está sendo usado para se conectar ao proxy está usando um mecanismo de autenticação que não é compatível proxy no momento.   |   Se você não estiver usando a autenticação do IAM, use a autenticação de senha MD5 ou SCRAM.   | 
|  `ERROR 28000: A user name is missing from the connection startup packet. Provide a user name for this connection.`   |   O cliente de banco de dados que está sendo usado para se conectar ao proxy não está enviando um nome de usuário ao tentar estabelecer uma conexão.   |   Defina um nome de usuário ao configurar uma conexão com o proxy usando o cliente PostgreSQL de sua escolha.   | 
|  `ERROR 28000: IAM is allowed only with SSL connections.`   |   Um cliente tentou se conectar usando a autenticação do IAM, mas o SSL não estava habilitado.   |   Habilite o SSL no cliente PostgreSQL.   | 
|  `ERROR 28000: This RDS Proxy requires TLS connections.`   |   O usuário habilitou a opção **Exigir Transport Layer Security**, mas tentou se conectar com `sslmode=disable` no cliente do PostgreSQL.   |   Para corrigir esse erro, execute um dos seguintes procedimentos:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  | 
|  `ERROR 28P01: IAM authentication failed for user user_name. Check the IAM token for this user and try again.`   |   Esse erro pode ocorrer devido aos seguintes motivos:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  |   Para corrigir esse erro, faça o seguinte:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  | 
|  `ERROR 28P01: The password that was provided for the role role_name is wrong.`   |   A senha para essa função não corresponde ao segredo do Secrets Manager.   |   Verifique o segredo dessa função no Secrets Manager para ver se a senha é a mesma que está sendo usada no cliente PostgreSQL.   | 
|  `ERROR 28P01: The IAM authentication failed for the role role_name. Check the IAM token for this role and try again.`   |   Há um problema com o token do IAM usado para a autenticação do IAM.   |   Gere outro token de autenticação e use-o em uma nova conexão.   | 
|  `ERROR 0A000: Feature not supported: RDS Proxy supports only version 3.0 of the PostgreSQL messaging protocol.`   |   O cliente PostgreSQL usado para se conectar ao proxy usa um protocolo mais antigo que 3.0.   |   Use um cliente PostgreSQL mais recente que ofereça suporte ao protocolo de sistema de mensagens 3.0. Se você estiver usando a CLI `psql` do PostgreSQL, use uma versão posterior ou igual a 7.4.   | 
|  `ERROR 0A000: Feature not supported: RDS Proxy currently doesn't support streaming replication mode.`   |   O cliente PostgreSQL usado para se conectar ao proxy está tentando usar o modo de replicação de streaming, que não é compatível com o proxy do RDS no momento.   |   Desative o modo de replicação de streaming no cliente PostgreSQL que está sendo usado para estabelecer a conexão.   | 
|  `ERROR 0A000: Feature not supported: RDS Proxy currently doesn't support the option option_name.`   |   Pela mensagem de inicialização, o cliente PostgreSQL usado para se conectar ao proxy está solicitando uma opção que não é compatível com o proxy do RDS no momento.   |   Desative a opção que está sendo mostrada como não compatível na mensagem acima no cliente PostgreSQL que está sendo usado para se conectar.   | 
|  `ERROR 53300: The IAM authentication failed because of too many competing requests.`   |   O número de solicitações simultâneas com autenticação do IAM do cliente para o proxy excedeu o limite.   |   Reduza a taxa na qual as conexões que usam a autenticação do IAM de um cliente PostgreSQL são estabelecidas.   | 
|  `ERROR 53300: The maximum number of client connections to the proxy exceeded number_value.`   |   O número de solicitações de conexão simultâneas do cliente para o proxy excedeu o limite.   |   Reduza o número de conexões ativas de clientes PostgreSQL para esse proxy do RDS .   | 
|  `ERROR 53300: Rate of connection to proxy exceeded number_value.`   |   A taxa de solicitações de conexão do cliente para o proxy excedeu o limite.   |   Reduza a taxa na qual as conexões de um cliente PostgreSQL são estabelecidas.   | 
|  `ERROR XX000: Unknown error.`   |   Ocorreu um erro desconhecido.   |   Entre em contato com o AWS Support para investigar o problema.   | 
|  `ERROR 08000: Timed-out waiting to acquire database connection.`   |   O proxy atingiu o tempo limite enquanto aguardava para obter uma conexão de banco de dados dentro do período especificado pela configuração `ConnectionBorrowTimeout`. Algumas razões possíveis incluem:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  |   As possíveis soluções são as seguintes:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy.troubleshooting.html)  | 
|  `ERROR XX000: Request returned an error: database_error.`   |   A conexão de banco de dados estabelecida pelo proxy retornou um erro.   |   A solução depende do erro específico do banco de dados. Um exemplo é: `Request returned an error: database "your-database-name" does not exist`. Isso significa que o nome do banco de dados especificado não existe no servidor do banco de dados. Ou isso significa que o nome de usuário usado como um nome de banco de dados (se não for especificado um nome de banco de dados) não existe no servidor.   | 
|  `ERROR 53300: The IAM authentication failed because of too many competing requests.`  |  O número de solicitações simultâneas com autenticação do IAM do cliente para o proxy excedeu o limite.  |  Reduza a taxa na qual as conexões que usam a autenticação do IAM de um cliente PostgreSQL são estabelecidas.  | 
|  `ERROR 28000: Enable IAM authentication for the client connection to the proxy and try again.`  |  O RDS Proxy não pode se conectar ao banco de dados porque a autenticação do IAM não está habilitada para a conexão do cliente com o proxy. Isso ocorre quando o parâmetro `DefaultAuthScheme` do proxy está definido como `IAM_AUTH` com um usuário registrado, mas o cliente está usando a autenticação por senha em vez da autenticação do IAM.  |  Habilite a autenticação do IAM para a conexão do cliente com o proxy e tente novamente.  | 
|  `ERROR 28000: Configure IAM authentication as the DefaultAuthScheme in your proxy and try again.`  |  O RDS Proxy não consegue se conectar ao banco de dados porque `DefaultAuthScheme` não está definido como `IAM_AUTH`. O parâmetro `DefaultAuthScheme` do proxy está definido como `NONE`, mas o cliente está tentando usar a autenticação do IAM.  |  Defina `DefaultAuthScheme` como `IAM_AUTH` para seu proxy e tente novamente.  | 

### Solução de problemas de exclusão do banco de dados `postgres`
<a name="rds-proxy-PostgreSQL-troubleshooting.postgresDBDelete"></a>

Se você excluir acidentalmente o banco de dados `postgres` da sua instância, precisará restaurá-lo para restabelecer a conectividade com sua instância. Execute os seguintes comandos em sua instância de banco de dados:

```
CREATE DATABASE postgres;
GRANT CONNECT ON DATABASE postgres TO rdsproxyadmin;
```