J'ai créé une instance de test de base PostgreSQL RDS dans un VPC qui a un seul sous-réseau public et qui devrait être disponible pour se connecter via Internet public. Il utilise le groupe de sécurité par défaut, qui est ouvert pour le port 5432. Lorsque j'essaie de me connecter, il échoue. Je dois manquer quelque chose de très simple - mais je suis assez perdu à ce sujet.
Voici les paramètres de la base de données, notez qu'il est marqué comme Publicly Accessible
:
Voici les paramètres du groupe de sécurité, notez qu'il est grand ouvert (confirmé dans les paramètres RDS ci-dessus par le conseil vert "autorisé" à côté du point de terminaison):
Voici la commande que j'essaie d'utiliser pour me connecter:
psql --Host=myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com \
--port=5432
--username=masteruser
--password
--dbname=testdb
Et c'est le résultat que j'obtiens en essayant de me connecter à partir d'un Yosemite MacBook Pro (notez qu'il se résout en une adresse IP 54. *):
psql: could not connect to server: Operation timed out
Is the server running on Host "myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com" (54.xxx.xxx.xxx) and accepting
TCP/IP connections on port 5432?
Je n'ai aucun type de pare-feu activé et je peux me connecter aux instances publiques de PostgreSQL sur d'autres fournisseurs (par exemple Heroku).
Tout conseil de dépannage serait très apprécié, car je suis à peu près perdu ici.
Mise à jour
Par commentaire, voici les règles ACL entrantes pour le VPC par défaut:
Le problème était que la règle entrante dans le groupe de sécurité spécifiait un groupe de sécurité comme source. Le changer en un CIDR qui comprenait mon adresse IP a résolu le problème.
Ouvrez le groupe de sécurité de base de données dans AWS; et choisissez "Modifier les règles entrantes"; "Ajouter une règle". Il y a une option "Mon IP" dans le menu déroulant; sélectionnez cette option pour remplir automatiquement l'adresse IP publique de votre ordinateur en notation CIDR
J'étais confronté à un problème similaire, et voici comment je l'ai résolu:
Cliquez sur le groupe de sécurité pour l'instance RDS et vérifiez les règles entrantes. Vous pourriez voir quelque chose comme ceci:
Vous devez définir la plage IP pour contenir votre adresse IP ou simplement sélectionner "N'importe où" dans la liste déroulante Source, pour la rendre accessible depuis localhost ou n'importe où:
Je voulais juste ajouter mes découvertes pour faire gagner du temps à quelqu'un. Cette solution décrite ci-dessus a fonctionné sur une instance de dev ec2 mais après avoir migré vers un nouveau serveur, elle a cessé de fonctionner. Il s'est avéré que mon instance RDS et mon instance EC2 étaient dans le même VPC, de sorte que l'instance RDS ne pouvait pas voir l'adresse IP publique que j'avais ajoutée à son groupe de sécurité. Pour que cela fonctionne, vous devez ajouter au groupe de sécurité des instances RDS, l'IP privée de l'instance EC2 que vous pouvez trouver en détail.