Verifique seus grupos de segurança, esse é o provável culpado. Os hosts dentro de uma VPC usando nomes DNS sempre usarão o IP privado do recurso remoto, portanto, a porção NAT / IG não é importante.
Eu tenho uma instância do RDS em execução em uma sub-rede sem NAT e uma instância do EC2 em execução em outra sub-rede com um Gateway da Internet configurado, ambos localizados na mesma VPC. Eu configurei a instância do RDS para não ser publicamente acessível.
Estou usando o seguinte comando no meu EC2 remoto (em execução na segunda sub-rede) para conectar-me à instância do RDS:
mysql -h xxxx.eu-central-1.rds.amazonaws.com -P 3306 -u root -p
Eu digitei a senha correta que defini ao configurar o RDS, mas recebo o seguinte erro:
ERROR 2003 (HY000): Can't connect to MySQL server on 'XXX.eu-central-1.rds.amazonaws.com' (110)
Eu verifiquei, não é um problema de resolução de nomes. O ec2 converte o terminal no ip interno correto.
VPC : o mesmo que o EC2
ZONA DE DISPONIBILIDADE : eu-central-1b
SUBNET : no painel RDS eu posso ver todas as sub-redes, mas eu posso ver que há um ip menos disponível na sub-rede privada da zona b
GRUPO DE SEGURANÇA : grupo de segurança privada (sem regras de saída e na regra única de entrada com a porta mysql e o grupo de segurança pública como a origem)
ACESSÍVEL PUBLICAMENTE : não
MULTI AZ : não
VPC : o mesmo que o RDS
ZONA DE DISPONIBILIDADE : eu-central-1b
SUBNET : sub-rede pública da zona b
GRUPO DE SEGURANÇA : grupo de segurança pública (todas as portas de qualquer origem, como regra de entrada, e ssh, http e https, de qualquer origem, como regra de saída)
Eu posso acessar a instância do EC2 usando http e ssh. Funciona como esperado.
VPC : tanto o RDS quanto o EC2 usam o mesmo
SUBNETS : um público e um privado para cada AZ, 4 no total
DHCP : o padrão ( domain-name = eu-central-1.compute.internal
domain-name-servers = AmazonProvidedDNS
)
ROUTE TABLES : para as sub-redes públicas, direcione para local
(automaticamente) e para a internet getaway, para o privado, apenas o local
(automaticamente)
ACLs : public: allow all
na entrada e na saída. private: allow all
somente na entrada. Há também uma linha com o id *
com deny all
, em ambas as ACLs, tanto na entrada quanto na saída, mas tenho certeza de que é suposto estar lá, não posso excluí-la.
O que estou fazendo de errado? Estou faltando alguma coisa?
Você precisa garantir que seu grupo de segurança VPC / EC2 e NACLs permitam o acesso apropriado.
Eu tenho um tutorial que cobre a configuração do grupo de segurança EC2 / RDS que você pode achar útil.
Você também deve verificar com esta resposta em SO .