

# 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 ao cluster do Aurora 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\_value}})  |  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\_value}})  |  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\_set\_client'' 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/AuroraUserGuide/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/AuroraUserGuide/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/AuroraUserGuide/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 obter 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/AuroraUserGuide/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/AuroraUserGuide/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/AuroraUserGuide/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/AuroraUserGuide/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/AuroraUserGuide/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;
```