La première chose serait de comprendre comment require
fonctionne dans NodeJS. Je vous recommande de passer par ceci articles
si vous souhaitez en savoir plus.
Maintenant, une fois que vous avez demandé votre connexion, vous l'avez pour de bon et elle ne sera plus nécessaire. Cela correspond à ce que vous recherchez car vous ne voulez pas surcharger votre base de données en créant une nouvelle connexion à chaque fois.
Mais il y a un problème...
Démarrages à froid Lambda
Chaque fois que vous appelez une fonction Lambda pour la première fois, elle lance un conteneur avec votre fonction à l'intérieur et le maintient actif pendant environ 5 minutes. Il est très probable (bien que cela ne soit pas garanti) que vous toucherez le même conteneur à chaque fois tant que vous faites 1 requête à la fois. Mais que se passe-t-il si vous avez 2 demandes en même temps ? Ensuite, un autre récipient sera mis en rotation en parallèle avec le récipient précédent déjà réchauffé. Vous venez de créer une autre connexion sur votre base de données et vous avez maintenant 2 conteneurs. Maintenant, devinez ce qui se passe si vous avez 3 requêtes simultanées ? Oui! Un conteneur de plus, ce qui équivaut à une connexion à la base de données de plus.
Tant qu'il y a de nouvelles demandes à vos fonctions Lambda, par défaut, elles évolueront pour répondre à la demande (vous pouvez le configurer dans la console pour limiter l'exécution à autant d'exécutions simultanées que vous le souhaitez - en respectant les limites de votre compte)
Vous ne pouvez pas vous assurer en toute sécurité que vous disposez d'un nombre fixe de connexions à votre base de données simplement en exigeant votre code lors de l'invocation d'une fonction. La bonne chose est que ce n'est pas votre faute. C'est ainsi que se comportent les fonctions Lambda.
... une autre approche est
pour mettre en cache les données que vous souhaitez dans un véritable système de mise en cache, comme ElasticCache , par exemple. Vous pourriez alors déclencher une fonction Lambda par un événement CloudWatch qui s'exécute dans une certaine fréquence de temps. Cette fonction interrogerait alors votre base de données et stockerait les résultats dans votre cache externe. De cette façon, vous vous assurez que votre connexion DB n'est ouverte que par un Lambda à la fois, car elle respectera l'événement CloudWatch, qui s'avère ne s'exécuter qu'une seule fois par déclencheur.
MODIFIER :après que l'OP a envoyé un lien dans les sections de commentaires, j'ai décidé d'ajouter quelques informations supplémentaires pour clarifier ce que l'article mentionné veut dire
Extrait de l'article :
Et c'est exactement ce que vous faites. Et cela fonctionne ! Mais le problème est que si vous avez N connexions (requêtes Lambda) en même temps. Si vous ne définissez aucune limite, par défaut, jusqu'à 1 000 fonctions Lambda peuvent être lancées simultanément. Maintenant, si vous faites ensuite 1 000 requêtes supplémentaires simultanément dans les 5 prochaines minutes, il est très probable que vous n'ouvrirez aucune nouvelle connexion, car elles ont déjà été ouvertes lors d'invocations précédentes et les conteneurs sont toujours actifs.