Solução de Problemas Comuns de Conexão RDS a partir de Instâncias EC2
Conectar uma instância Amazon EC2 a uma instância Amazon Relational Database Service (RDS) é uma operação fundamental em muitas arquiteturas AWS. No entanto, complexidades na configuração de rede frequentemente levam a falhas de conexão. Este guia fornece uma abordagem sistemática para diagnosticar e resolver os problemas de conectividade mais comuns entre sua camada de computação (EC2) e sua camada de banco de dados gerenciado (RDS).
Entendendo que tanto o EC2 quanto o RDS residem no ambiente AWS Virtual Private Cloud (VPC), a maioria dos problemas de conexão decorrem de regras de grupo de segurança incorretas, roteamento de sub-rede ou configurações incorretas de parâmetros do banco de dados. Verificando metodicamente esses componentes, você pode restaurar rapidamente o acesso ao banco de dados.
Pré-requisitos para Conexão Bem-Sucedida
Antes de mergulhar na solução de problemas, garanta que os seguintes elementos fundamentais estejam corretamente configurados:
- Alinhamento VPC: Idealmente, tanto a instância EC2 quanto a instância RDS devem residir na mesma VPC para a configuração mais simples, embora a conectividade entre VPCs seja possível via VPC Peering.
- Zonas de Disponibilidade (AZs): Certifique-se de que sua infraestrutura de aplicativos (EC2) possa alcançar a infraestrutura de banco de dados (RDS) entre AZs, se necessário, embora o roteamento geralmente cuide disso dentro da VPC.
- Alcançabilidade de Rede: Confirme se a instância EC2 está em execução e possui uma conexão de rede ativa (por exemplo, pode alcançar a internet ou outros serviços internos).
Passo 1: Verifique as Configurações do Grupo de Segurança (O Culpado Mais Comum)
Grupos de Segurança agem como firewalls virtuais para sua instância EC2 e sua instância RDS. Uma configuração incorreta aqui é a origem da vasta maioria das falhas de conexão.
A. Verificação do Grupo de Segurança EC2
Sua instância EC2 precisa de Regras de Saída que permitam o tráfego sair 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 RDS
Este é o passo crítico. O Grupo de Segurança RDS deve permitir explicitamente o tráfego de entrada da instância EC2.
Verificação Acionável:
- Navegue até o console RDS e selecione sua instância de banco de dados.
- Vá para a aba Conectividade e segurança e encontre o(s) Grupo(s) de Segurança associado(s).
- Edite as Regras de Entrada.
- Certifique-se de que há uma regra permitindo tráfego na porta específica do banco de dados (por exemplo, 3306 para MySQL, 5432 para PostgreSQL).
- O 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 referencie o 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 que o IP privado da instância EC2 mude (por exemplo, durante escalonamento ou reinicialização).
Exemplo de Regra de Entrada (PostgreSQL):
| Tipo | Protocolo | Intervalo de Porta | Origem |
|---|---|---|---|
| PostgreSQL | TCP | 5432 | sg-012345abcdef67890 (Seu ID do Grupo de Segurança EC2) |
Passo 2: Confirme a Acessibilidade Pública e o Endpoint RDS
Se sua instância EC2 não estiver em uma sub-rede privada ou exigir conexão pela internet pública (geralmente desencorajado para produção), você deve verificar a Acessibilidade Pública do RDS.
A. Configuração de Acessibilidade Pública
- No console RDS, verifique a aba Conectividade e segurança da instância RDS.
- Se Acessível publicamente estiver definido como Não, o banco de dados só poderá ser alcançado por recursos dentro da mesma VPC (como uma instância EC2 em uma sub-rede privada).
- Se Acessível publicamente estiver definido como Sim, certifique-se de que a instância EC2 tenha uma rota válida para o gateway de internet ou gateway NAT se estiver em uma sub-rede privada, e que o Grupo de Segurança permita a entrada de tráfego dos intervalos de IP públicos necessários (ou esteja seguro via lista de permissões de IP estrita).
B. Verificação do Endpoint
Certifique-se de que o aplicativo na instância EC2 está usando o Endpoint RDS correto (nome DNS) e a Porta correta. Discrepâncias aqui levam a timeouts ou recusas de conexão.
Use o utilitário telnet ou nc (netcat) de sua instância EC2 para testar a alcançabilidade TCP básica para o endpoint e porta 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: Analise a 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. Listas de Controle de Acesso de Rede (NACLs)
Listas de Controle de Acesso 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 para ambas as sub-redes EC2 e RDS.
- Certifique-se de que 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 tráfego de retorno.
B. Endpoints VPC (Se Aplicável)
Se sua instância EC2 estiver em uma sub-rede privada e acessando endpoints RDS via um Endpoint de Gateway VPC para S3 ou Endpoints de Interface para outros serviços, certifique-se de que a política do endpoint permite comunicação para o serviço RDS, se aplicável, embora o RDS geralmente dependa do roteamento VPC padrão.
Passo 4: Verificações de Configuração da Instância de Banco de Dados
Se a conectividade de rede for confirmada (o Passo 2 é bem-sucedido), o problema está no próprio mecanismo do 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 pelo aplicativo que se conecta a partir 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
- Status do Banco de Dados: Certifique-se de que o status da instância RDS está Disponível. Se estiver modificando, fazendo backup ou reiniciando, as conexões falharão.
- Grupos de Parâmetros: Verifique quaisquer Grupos de Parâmetros personalizados aplicados à instância RDS. Certas configurações (como
skip-networkingem algumas configurações do MySQL, embora menos comum em RDS gerenciado) podem impedir conexões.
C. Autenticação de Banco de Dados IAM (Se Usado)
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 executando o aplicativo) tenha as permissões corretas (rds-db:connect) e que a string de conexão inclua corretamente os tokens de autenticação necessários.
Resumo do Fluxo de Solução de Problemas
Use esta lista de verificação priorizada para resolver problemas rapidamente:
- Verificação Ping/Telnet: O EC2 consegue alcançar a porta RDS usando
telnetounc? (Testa o caminho de rede básico/Grupos de Segurança). - Grupo de Segurança RDS: A regra de Entrada permite tráfego da Grupo de Segurança EC2 para a porta RDS?
- NACLs: As regras de Entrada e Saída estão abertas para as portas necessárias (Porta do Banco de Dados + Portas Efêmeras)?
- Endpoint/Credenciais: A string de conexão está correta e as credenciais são válidas?
- Status do DB: A instância RDS está Disponível?
Ao verificar metodicamente essas camadas — desde o perímetro de segurança para dentro até a camada de autenticação do banco de dados — você pode isolar e corrigir eficientemente a maioria dos bloqueios de conectividade comuns de EC2 para RDS.