Solução de problemas do RDS Proxy - Amazon Relational Database Service

Solução de problemas do RDS Proxy

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.

Verificar a conectividade para um proxy

É 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. Examine também o grupo de destino associado usando o comando describe-db-proxy-target-groups. Verifique se os detalhes dos destinos correspondem à instância de banco de dados do RDS ou ao cluster de banco de dados do 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. 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 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 }

Problemas e soluções comuns de

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.

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.

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:

  • Desabilite a configuração Exigir Transport Layer Security para o proxy.

  • Conectar-se ao banco de dados usando a configuração mínima de ssl-mode=REQUIRED no cliente do MySQL.

ERROR 2026 (HY000): SSL connection error: Internal Server Error

Falha no handshake TLS para o proxy. Algumas razões possíveis incluem:

  • O SSL é necessário, mas o servidor não oferece suporte a ele.

  • Ocorreu um erro interno do servidor.

  • Ocorreu um handshake ruim.

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:

  • O proxy não consegue estabelecer uma conexão de banco de dados porque o máximo de conexões máximas foi atingido

  • O proxy não consegue estabelecer uma conexão de banco de dados porque o banco de dados não está disponível.

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

Erro Causa Solução

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.

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:

  • Desabilite a opção Exigir Transport Layer Security do proxy.

  • Conectar-se ao banco de dados usando a configuração mínima de sslmode=allow no cliente do PostgreSQL.

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:

  • O cliente forneceu o nome de usuário do IAM incorreto.

  • O cliente forneceu um token de autorização do IAM incorreto para o usuário.

  • O cliente está usando uma política do IAM que não tem as permissões necessárias.

  • O cliente forneceu um token de autorização do IAM expirado para o usuário.

Para corrigir esse erro, faça o seguinte:

  1. Confirme se o usuário do IAM fornecido existe.

  2. Confirme se o token de autorização do IAM pertence ao usuário do IAM fornecido.

  3. Confirme se a política do IAM tem as permissões adequadas para o RDS.

  4. Verifique a validade do token de autorização do IAM usado.

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 Configuração de políticas do AWS Identity and Access Management (IAM).

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.

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.

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.

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.

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.

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.

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 .

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.

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.

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.

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.

Unknown error.

Ocorreu um erro desconhecido.

Entre em contato com o AWS Support para investigar o problema.

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:

  • O proxy não consegue estabelecer uma conexão de banco de dados porque o máximo de conexões foi atingido.

  • O proxy não consegue estabelecer uma conexão de banco de dados porque o banco de dados não está disponível.

As possíveis soluções são as seguintes:

  • Verifique o destino da instância de banco de dados do RDS ou o status do cluster de bancos de dados Aurora para ver se ele está indisponível.

  • Verifique se há consultas e/ou transações de longa duração sendo executadas. Elas podem usar conexões de banco de dados do grupo de conexões por um longo período.

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.