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
deAVAILABLE
indica que o proxy pode se conectar à instância de banco de dados. -
Um valor
State
deUNAVAILABLE
indica um problema de conexão temporário ou permanente. Nesse caso, examine os camposReason
eDescription
. Por exemplo, seReason
tiver um valor dePENDING_PROXY_CAPACITY
, tente se conectar novamente depois que o proxy terminar sua operação de escalabilidade. SeReason
tiver um valor deUNREACHABLE
,CONNECTION_FAILED
ouAUTH_FAILURE
, use a explicação do campoDescription
para ajudá-lo a diagnosticar o problema. -
O campo
State
pode ter um valor deREGISTERING
por um breve período antes de alterar paraAVAILABLE
ouUNAVAILABLE
.
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 -zxPostgreSQL_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 |
Você pode encontrar os seguintes problemas ao criar um proxy ou ao se conectar a um proxy.
Erro | Causas ou soluções alternativas |
---|---|
|
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 (
|
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 (
|
O número de solicitações de conexão simultâneas do cliente para o proxy excedeu o limite. |
|
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
|
O valor definido para o parâmetro |
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
|
ERROR 2026 (HY000): SSL connection error: Internal Server
|
Falha no handshake TLS para o proxy. Algumas razões possíveis incluem:
|
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:
|
Você pode encontrar os problemas a seguir ao se conectar a um proxy do PostgreSQL.
Erro | Causa | Solução |
---|---|---|
|
O usuário tentou se conectar ao banco de dados usando a autenticação do IAM com a configuração |
O usuário precisa se conectar ao banco de dados usando a configuração mínima de |
|
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 políticas do AWS Identity and Access Management (IAM) para o RDS Proxy. |
|
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. |
|
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. |
|
Um cliente tentou se conectar usando a autenticação do IAM, mas o SSL não estava habilitado. |
Habilite o SSL no cliente PostgreSQL. |
|
O usuário habilitou a opção Exigir Transport Layer Security, mas tentou se conectar com |
Para corrigir esse erro, execute um dos seguintes procedimentos:
|
|
Esse erro pode ocorrer devido aos seguintes motivos:
|
Para corrigir esse erro, faça o seguinte:
|
|
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. |
|
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. |
|
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 |
|
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. |
|
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. |
|
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. |
|
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 . |
|
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. |
|
Ocorreu um erro desconhecido. |
Entre em contato com o AWS Support para investigar o problema. |
|
O tempo limite do proxy foi atingido enquanto aguardava para adquirir uma conexão de banco de dados. Algumas razões possíveis incluem:
|
As possíveis soluções são as seguintes:
|
|
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 é: |