Problème d'accès à une base de données logique dans une application laravel multi-tenant

0

Bonjour la communauté et très bon début d'année 2025.

S'il vous plaît je rencontre un problème depuis peu sur une application laravel multi-tenant (utilisation de la librairie stancl) que j'ai déployée sur AWS. Voici les services que j'utilise :

  • Elastic Beanstalk : j'y ai créé mon environnement,
  • RDS MySql : j'ai créé une base de données principale. Les bases de données des locataires (ce que j'appelle bases de données logiques) sont créées à partir de la console administrateur de mon application,
  • EC2 : l'instance de mon application s'y trouve.

Le problème que je rencontre est que lorsque je me connecte à l'environnement d'un locataire (nom_locataire.domaine.com), les données des tables du locataire en question ne sont pas lues. Aucun message d'erreur n'apparaît non plus dans l'inspecteur de code. Je parviens bien à me connecter sur mon instance RDS sur EC2, et je vois les différentes tables de chaque locataire. J'ai également pu accéder aux tables du locataire à partir de Workbench sur ma machine sans problème.

Je précise que tout fonctionne parfaitement en local avec Wamp.

Je pense à un problème de route mais je ne sais pas.

Aucun message d'erreur n'est généré. Tout est fait correctement dans l'application également. Donc je ne sais pas quel peut être le problème.

Merci beaucoup pour toute aide.

3 réponses
0

Bonjour et bonne année 2025 à vous aussi. Je comprends votre frustration face à ce problème. Voici quelques pistes à explorer pour résoudre votre problème d'accès aux données des locataires dans votre application Laravel multi-tenant déployée sur AWS :

  1. Configuration de la base de données : Assurez-vous que votre application Laravel est correctement configurée pour se connecter à la base de données RDS. Vérifiez le fichier de configuration de la base de données (database.php) et assurez-vous qu'il utilise les variables d'environnement pour lire les informations de connexion.

  2. Variables d'environnement : Vérifiez que les variables d'environnement nécessaires pour la connexion à la base de données sont correctement définies dans votre environnement Elastic Beanstalk. Cela inclut l'hôte, le nom de la base de données, l'utilisateur et le mot de passe.

  3. Groupes de sécurité : Assurez-vous que le groupe de sécurité de votre instance EC2 est autorisé à accéder à l'instance RDS. Vérifiez les règles entrantes du groupe de sécurité RDS pour permettre le trafic depuis le groupe de sécurité EC2.

  4. Configuration multi-tenant : Vérifiez la configuration de votre bibliothèque multi-tenant (stancl). Assurez-vous qu'elle est correctement configurée pour utiliser la base de données RDS et qu'elle peut créer et accéder aux bases de données des locataires.

  5. Logs d'application : Activez la journalisation détaillée dans votre application Laravel et vérifiez les logs pour tout message d'erreur ou avertissement lié à la connexion à la base de données ou à l'accès aux données des locataires. Téléchargez les journaux complets de votre environnement Beanstalk et consultez le journal des applications.

  6. Connexion à la base de données : Essayez de vous connecter manuellement à la base de données RDS depuis votre instance Beanstalk EC2 en utilisant les mêmes informations de connexion que votre application. Cela vous aidera à vérifier si le problème est lié à la connectivité ou à la configuration de l'application.

  7. Permissions de la base de données : Vérifiez que l'utilisateur de la base de données a les permissions nécessaires pour accéder et modifier les bases de données des locataires.

  8. Cache de l'application : Essayez de vider le cache de votre application Laravel, car parfois des problèmes peuvent survenir en raison de configurations mises en cache.

Si après avoir vérifié ces points le problème persiste, il serait utile d'activer temporairement l'affichage des erreurs dans votre environnement de production pour obtenir plus d'informations sur le problème. Assurez-vous de désactiver cet affichage une fois le problème résolu pour des raisons de sécurité.

N'hésitez pas à fournir plus de détails sur votre configuration ou sur les étapes que vous avez déjà essayées pour que nous puissions vous aider davantage.
NOTE : Si vous rencontrez toujours des problèmes, je vous recommande de créer un dossier de support technique auprès de l'équipe d'assistance AWS Premium Elastic Beanstalk afin que l'équipe puisse étudier votre problème de manière plus approfondie.
Sources
Deploying a Laravel application to Elastic Beanstalk - AWS Elastic Beanstalk
Using Elastic Beanstalk with Amazon RDS - AWS Elastic Beanstalk
Viewing logs from Amazon EC2 instances in your Elastic Beanstalk environment

profile picture
répondu il y a un mois
AWS
INGÉNIEUR EN ASSISTANCE TECHNIQUE
vérifié il y a un mois
AWS
INGÉNIEUR EN ASSISTANCE TECHNIQUE
révisé il y a un mois
AWS
INGÉNIEUR EN ASSISTANCE TECHNIQUE
révisé il y a un mois
AWS
INGÉNIEUR EN ASSISTANCE TECHNIQUE
révisé il y a un mois
AWS
INGÉNIEUR EN ASSISTANCE TECHNIQUE
révisé il y a un mois
0

Après avoir journalisé les logs des requêtes, il semble ne pas y avoir de problème.

Voici le résultat du fichier laravel.logs sur AWS : Voici le résultat du fichier laravel.logs sur AWS

Le résultat est le même fichier pour l'application qui fonctionne sans problème au niveau local / Le résultat est le même fichier pour l'application qui fonctionne sans problème au niveau local

répondu il y a un mois
0

Pour compléter :

Je joins une fois de plus les logs des requêtes capturées, AWS vs Local.

AWS AWS

Local Local

La méthode de journalisation en vert utilisée est celle-ci : https://medium.com/@mehhfooz/log-requests-and-responses-in-laravel-f859d1f47b74

La méthode en noir & bleu celle-ci : https://medium.com/@CodeBriefly/how-to-log-all-sql-queries-in-laravel-a1798783ddf2 && https://laravel.com/docs/8.x/database#listening-for-query-events

Vous pouvez voir que la requête en bleu n'est pas capturée côté AWS.

Merci pour votre assistance.

répondu il y a un mois

Vous n'êtes pas connecté. Se connecter pour publier une réponse.

Une bonne réponse répond clairement à la question, contient des commentaires constructifs et encourage le développement professionnel de la personne qui pose la question.

Instructions pour répondre aux questions