J'ai une application CodeIgniter PHP sur une instance Elastic Beanstalk. J'essaie de le connecter à une instance RDS MySQL que j'ai configurée, mais le chargement de l'URL du site Elastic Beanstalk a toujours pour effet d'empêcher la page de terminer la connexion. J'ai limité le problème à l'impossibilité de se connecter à la base de données.
Je pense avoir correctement configuré mes groupes de sécurité pour permettre aux instances d'Elastic Beanstalk EC2 de communiquer avec RDS, mais il faut que quelque chose ne tourne pas rond, car la page ne se charge toujours pas.
J'ai inclus ci-dessous des captures d'écran des règles entrantes/sortantes pour le groupe de sécurité utilisé par RDS et Elastic Beanstalk, ainsi qu'une capture d'écran des groupes de sécurité que j'ai attachés à l'instance Elastic Beanstalk.
Des idées sur la raison pour laquelle mon application Elastic Beanstalk ne peut pas communiquer avec mon instance RDS?
EDIT: L’instance RDS et l’instance Elastic Beanstalk appartiennent au même groupe de sécurité.
Ajoutez le nom du groupe de sécurité de pile avec lequel vous avez configuré votre Elastic Beanstalk à la liste des groupes de sécurité RDS.
Il est plus simple de tester en vous connectant à l'instance EC2 (par exemple, eb ssh) et de tester la connexion à la base de données pour exclure tout problème avec votre application.
mysql -u user -p password -h rds.instance.endpoint.region.rds.amazonaws.com
Avez-vous également lancé l'instance RDS dans VPC?
Votre groupe de sécurité RDS doit accorder le trafic entrant sur le port 3306 au groupe de sécurité beanstalk.
par exemple, groupe de sécurité RDS
Incoming
ALLOW TCP 3306 from BeanstalkSG
Ne pas ouvrir à 0.0.0.0
Étant donné que vous autorisez déjà tout le trafic sortant, votre Beanstalk SG n'a pas besoin d'accorder 3306 pour le trafic sortant en plus.
Vos listes de contrôle d'accès VPC autorisent-elles le trafic sur le 3306? (Ils le font, par défaut)
Il existe maintenant un tutorial sur la façon de connecter ElasticBeanstalk à n’importe quelle base de données RDS (MySQL, etc.), d’une manière qui ne lie pas les deux, c’est-à-dire que vous pouvez les créer séparément. Le tutoriel explique comment configurer des groupes de sécurité via la console AWS.
Après cela, vous devez définir 5 variables d’environnement ElasticBeanstalk (au moins pour MySQL): RDS_HOSTNAME
, RDS_PORT
, RDS_DB_NAME
, RDS_USERNAME
et RDS_PASSWORD
.
Différentes instances ElasticBeanstalk accèdent à ces variables de différentes manières pour établir une connexion à une base de données (je sais qu'en PHP, vous devez utiliser $_SERVER['RDS_DB_NAME']
, etc.). Voir comment le faire en Java, Node.js, Python, Ruby et .NET dans le lien ci-dessus.
Il est courant que les nouveaux utilisateurs confondent le RDS nom d'instance avec le nom de la base de données.
Le nom d'occurrence est simplement une étiquette que vous et d'autres humains utilisez pour organiser vos éléments RDS. Cette étiquette n'est pas du tout utilisée sur votre application.
Le nom de la base de données}, d'autre part, est ce dont vous avez besoin sur votre application.
Après avoir créé une instance/un cluster RDS, sachez que votre serveur est VIDE. Il n'y a pas de base de données à l'intérieur.
Vous pouvez avoir plusieurs bases de données dans une instance ou un cluster RDS, tout comme de nombreuses bases de données dans un serveur MySQL. Et par défaut, vous n'en avez pas.
Vous devez exécuter une commande "CREATE DATABASE" sur la ligne de commande MySQL avant d'utiliser RDS sur votre application.
Pour être juste, il n'y a qu'une seule base de données sur votre instance RDS nouvellement créée. Il s'appelle " mysql " mais vous n'êtes pas autorisé à l'utiliser sur vos applications.
Le seul moyen de créer une base de données à utiliser sur votre application consiste à utiliser une instance EC2, car les instances RDS ne sont pas accessibles au public.
Étapes simples:
1. Créez une instance nano (sur le même groupe de sécurité/VPC);
2. Connectez-vous à l'instance nano via SSH (ex. ssh -i <my_key.pem> my_nano.amazonaws.com
);
(3.mysql -u <master_user> -p -h <rds_endpoint>
4. maître_user et master_password sont ceux que vous avez définis lors de la création du cluster RDS - il n'y a pas de valeur par défaut pour ces informations d'identification;
5. Une fois sur mysql, créez une base de données: CREATE database <my_db>
;
6. Ensuite, dans votre application, utilisez: maître_utilisateur, mot_de_passe principal, my_db, rds_endpoint .