Pierwszą rzeczą byłoby zrozumienie, jak require
działa w NodeJS. Polecam zapoznać się z tym artykuł
jeśli chcesz dowiedzieć się więcej na ten temat.
Teraz, gdy już zażądałeś połączenia, masz je na dobre i nie będzie ono potrzebne ponownie. To pasuje do tego, czego szukasz, ponieważ nie chcesz przeciążać swojej bazy danych, tworząc za każdym razem nowe połączenie.
Ale jest problem...
Lambda zaczyna się na zimno
Za każdym razem, gdy wywołasz funkcję Lambda po raz pierwszy, uruchomi ona kontener z Twoją funkcją w nim i utrzyma go przy życiu przez około 5 minut. Jest bardzo prawdopodobne (choć nie jest to gwarantowane), że trafisz za każdym razem w ten sam kontener, o ile wysyłasz jedno żądanie. Ale co się stanie, jeśli masz 2 prośby w tym samym czasie? Następnie równolegle do poprzedniego, już rozgrzanego pojemnika, zostanie wirowany kolejny pojemnik. Właśnie utworzyłeś kolejne połączenie w swojej bazie danych i teraz masz 2 kontenery. Teraz zgadnij, co się stanie, jeśli będziesz mieć 3 równoczesne żądania? Tak! Jeszcze jeden kontener, co oznacza jeszcze jedno połączenie z bazą danych.
Tak długo, jak pojawiają się nowe żądania do funkcji Lambda, domyślnie będą one skalowane w celu spełnienia wymagań (możesz skonfigurować to w konsoli, aby ograniczyć wykonywanie do tylu jednoczesnych wykonań, ile chcesz - przestrzegając limitów Konta)
Nie możesz bezpiecznie upewnić się, że masz stałą liczbę połączeń z bazą danych, po prostu wymagając Twój kod po wywołaniu funkcji. Dobrą rzeczą jest to, że to nie twoja wina. Tak właśnie zachowują się funkcje Lambda.
...jeden inny sposób to
do buforowania żądanych danych w prawdziwym systemie buforowania, na przykład ElasticCache , na przykład. Wtedy jedna funkcja Lambda może zostać wyzwolona przez zdarzenie CloudWatch który działa w określonej częstotliwości czasu. Ta funkcja wysyła zapytanie do bazy danych i przechowuje wyniki w zewnętrznej pamięci podręcznej. W ten sposób upewnisz się, że połączenie z bazą danych jest otwierane tylko przez jedną Lambdę na raz, ponieważ będzie ono respektować zdarzenie CloudWatch, które okazuje się uruchamiać tylko raz na wyzwalacz.
EDYTUJ :po tym, jak OP wysłał link w sekcjach komentarzy, postanowiłem dodać kilka dodatkowych informacji, aby wyjaśnić, co wspomniany artykuł chce powiedzieć
Z artykułu:
I to jest dokładnie to, co robisz. I to działa! Ale problem polega na tym, że masz N połączeń (żądań Lambda) w tym samym czasie. Jeśli nie ustawisz żadnych limitów, domyślnie można uruchomić do 1000 funkcji Lambda jednocześnie. Teraz, jeśli następnie wyślesz kolejne 1000 żądań jednocześnie w ciągu następnych 5 minut, jest bardzo prawdopodobne, że nie otworzysz żadnych nowych połączeń, ponieważ zostały one już otwarte przy poprzednich wywołaniach, a kontenery nadal są aktywne.