Solução de Problemas Comuns de Conexão com RDS a partir de Instâncias EC2

Um guia prático para diagnosticar e resolver problemas típicos de conectividade entre instâncias Amazon EC2 e bancos de dados RDS. Aprenda a abordagem sistemática para solucionar armadilhas comuns relacionadas a grupos de segurança, roteamento VPC, ACLs de rede e configurações do RDS para garantir uma comunicação confiável de aplicações na nuvem.

Solução de Problemas Comuns de Conexão com RDS a partir de Instâncias EC2

Quando uma aplicação no EC2 não consegue se conectar ao RDS, primeiro identifique o tipo de falha. Um timeout geralmente significa que o tráfego está sendo descartado em algum lugar do caminho. Um rápido connection refused significa que o host foi alcançado, mas a porta não aceitou a conexão. Um erro de autenticação significa que o caminho de rede provavelmente funciona e o problema subiu para usuários do banco de dados, senhas, SSL, autenticação IAM ou permissões.

Essa distinção economiza tempo. Não redefina senhas para um timeout de rede e não abra grupos de segurança para uma senha incorreta. Trabalhe a partir da instância EC2 para fora: DNS, acessibilidade de porta, grupos de segurança, roteamento de sub-rede, NACLs, status do RDS e, em seguida, autenticação do banco de dados.

Pré-requisitos para uma Conexão Bem-Sucedida

Antes de mergulhar na solução de problemas, certifique-se de que os seguintes elementos fundamentais estejam configurados corretamente:

  1. Alinhamento de VPC: Tanto a instância EC2 quanto a instância RDS devem idealmente residir na mesma VPC para a configuração mais simples, embora a conectividade entre VPCs seja possível via VPC Peering.
  2. Zonas de Disponibilidade (AZs): Certifique-se de que sua infraestrutura de aplicação (EC2) possa alcançar a infraestrutura de banco de dados (RDS) entre AZs, se necessário, embora o roteamento geralmente lide com isso dentro da VPC.
  3. Acessibilidade de Rede: Confirme que a instância EC2 está em execução e possui uma conexão de rede ativa (por exemplo, ela pode alcançar a internet ou outros serviços internos).

Passo 1: Verificar Configurações do Grupo de Segurança (O Culpado Mais Comum)

Os Grupos de Segurança atuam como firewalls virtuais tanto para sua instância EC2 quanto para sua instância RDS. Uma configuração incorreta aqui é a fonte da grande maioria das falhas de conexão.

A. Verificação do Grupo de Segurança do EC2

Sua instância EC2 precisa de Regras de Saída que permitam que o tráfego saia na porta do banco de dados. Por padrão, a maioria dos grupos de segurança permite todo o tráfego de saída (0.0.0.0/0 em todos os protocolos/portas), mas é aconselhável verificar isso.

B. Verificação das Regras de Entrada do Grupo de Segurança do RDS

Este é o passo crítico. O Grupo de Segurança do RDS deve permitir explicitamente o tráfego de entrada da instância EC2.

Verificação Acionável:

  1. Navegue até o console do RDS e selecione sua instância de banco de dados.
  2. Vá para a guia Conectividade e segurança e encontre o(s) Grupo(s) de Segurança associado(s).
  3. Edite as Regras de Entrada.
  4. Certifique-se de que existe uma regra permitindo tráfego na porta específica do banco de dados (por exemplo, 3306 para MySQL, 5432 para PostgreSQL).
  5. A Origem para esta regra deve ser o ID do Grupo de Segurança da sua instância EC2, ou o intervalo de IP privado específico da instância EC2 se você não estiver usando referências de grupo de segurança.

Melhor Prática: Sempre faça referência ao ID do Grupo de Segurança do recurso de origem (EC2) em vez de usar endereços IP específicos no campo de origem. Isso permite que a conexão persista mesmo se o IP privado da instância EC2 mudar (por exemplo, durante escalonamento ou reinicialização).

Exemplo de Regra de Entrada (PostgreSQL):

Tipo Protocolo Intervalo de Portas Origem
PostgreSQL TCP 5432 sg-012345abcdef67890 (ID do Grupo de Segurança do seu EC2)

Passo 2: Confirmar Acessibilidade Pública e Endpoint do RDS

Se sua instância EC2 não estiver em uma sub-rede privada ou precisar de conexão via internet pública (geralmente desencorajado para produção), você deve verificar a Acessibilidade Pública do RDS.

A. Configuração de Acessibilidade Pública

  1. No console do RDS, verifique a guia Conectividade e segurança da instância RDS.
  2. Se Acessível publicamente estiver definido como Não, o banco de dados é acessível apenas através de caminhos de rede privados, como recursos na mesma VPC ou redes conectadas através de peering, Transit Gateway, VPN ou Direct Connect, quando o roteamento e as regras de segurança permitirem.
  3. Se Acessível publicamente estiver definido como Sim, não trate isso como um atalho para acesso de produção. Confirme que o cliente tem uma rota pública válida e mantenha o grupo de segurança do RDS restrito ao menor intervalo de origem prático. Uma instância EC2 na mesma VPC normalmente deve usar o caminho privado.

B. Verificação do Endpoint

Certifique-se de que a aplicação na instância EC2 está usando o Endpoint do RDS correto (nome DNS) e a Porta correta. Incompatibilidades aqui levam a timeouts ou recusas de conexão.

Use o utilitário telnet ou nc (netcat) da sua instância EC2 para testar a acessibilidade TCP básica ao endpoint e porta do RDS:

# Para MySQL na porta 3306
telnet seu-endpoint-rds.rds.amazonaws.com 3306

# Para PostgreSQL na porta 5432
nc -zv seu-endpoint-rds.rds.amazonaws.com 5432

Uma conexão bem-sucedida resulta em uma tela em branco ou uma mensagem de conexão imediata. Uma falha (timeout ou recusa) indica um bloqueio de rede, geralmente Grupos de Segurança ou Roteamento de Sub-rede.

Passo 3: Analisar Configuração de Sub-rede e Roteamento

Se os grupos de segurança parecerem corretos, o problema pode estar em como as sub-redes se comunicam.

A. ACLs de Rede (NACLs)

As ACLs de Rede são firewalls sem estado que operam no nível da sub-rede. Se você implementou NACLs personalizadas, elas podem estar bloqueando o tráfego de retorno necessário para que uma conexão seja concluída.

  • Verifique as NACLs tanto para a sub-rede do EC2 quanto para a sub-rede do RDS.
  • Certifique-se de que ambas as regras de Entrada e Saída permitam tráfego na porta do banco de dados e no intervalo de portas efêmeras (1024-65535) para o tráfego de retorno.

B. Roteamento entre VPCs ou Híbrido

As conexões de banco de dados RDS geralmente usam roteamento VPC normal, não um endpoint de gateway estilo S3. Se o EC2 e o RDS estiverem em VPCs diferentes ou conectados a partir de redes locais, verifique a rota privada completa em ambas as direções. VPC peering, Transit Gateway, VPN e Direct Connect exigem entradas de tabela de roteamento, bem como regras de grupo de segurança e NACL compatíveis.

Passo 4: Verificações de Configuração da Instância do Banco de Dados

Se a conectividade de rede for confirmada (Passo 2 bem-sucedido), o problema está dentro do próprio mecanismo de banco de dados.

A. Credenciais e Autorização do Banco de Dados

Verifique o nome de usuário, senha e nome do banco de dados que estão sendo usados pela aplicação que se conecta da instância EC2. Serviços RDS como MySQL e PostgreSQL impõem autenticação estrita de usuário.

B. Grupos de Parâmetros e Status do Banco de Dados

  1. Status do Banco de Dados: Certifique-se de que o status da instância RDS é Disponível. Se estiver modificando, fazendo backup ou reiniciando, as conexões falharão.
  2. Grupos de Parâmetros: Verifique quaisquer Grupos de Parâmetros personalizados aplicados à instância RDS. Certas configurações (como skip-networking em algumas configurações do MySQL, embora menos comum no RDS gerenciado) podem impedir conexões.

C. Autenticação de Banco de Dados IAM (Se Usada)

Se você estiver usando IAM para autenticação de banco de dados em vez de senhas, certifique-se de que a função IAM anexada à instância EC2 (ou o perfil de usuário que executa a aplicação) tenha as permissões corretas (rds-db:connect) e que a string de conexão inclua corretamente os tokens de autenticação necessários.

Fluxo de Solução de Problemas

Use esta lista de verificação priorizada para resolver problemas rapidamente:

  1. Verificação de Porta: O EC2 consegue alcançar a porta do RDS usando telnet ou nc? Não confie no ping ICMP; o RDS não é um servidor normal que você possa solucionar dessa forma.
  2. Grupo de Segurança do RDS: A regra de Entrada permite tráfego do Grupo de Segurança do EC2 para a porta do RDS?
  3. NACLs: As regras de Entrada e Saída estão abertas para as portas necessárias (Porta do Banco de Dados + Portas Efêmeras)?
  4. Endpoint/Credenciais: A string de conexão está correta e as credenciais são válidas?
  5. Status do DB: A instância RDS está Disponível?

Se o teste de porta falhar, permaneça na camada de rede até que ele seja bem-sucedido. Se o teste de porta for bem-sucedido, mas o cliente do banco de dados falhar, pare de alterar as regras da VPC e leia atentamente o erro do banco de dados. A maioria dos incidentes EC2-para-RDS se torna muito mais fácil quando a acessibilidade de rede e a autenticação do banco de dados são tratadas como questões separadas.