• CloudPouch NEW!
  • Akademia
  • Blog
  • O stronie
  • Home

AWS Lambda - najlepsze praktyki.


AWS Lambda - najlepsze praktyki

Poni偶ej moje w艂asne oraz zebrane z innych 藕r贸de艂 najlepsze praktyki dotycz膮ce projektowania i programowania funkcji Lambda. Pomijaj膮c aspekty bezpiecze艅stwa praktycznie wszystkie pozosta艂e wpisuj膮 si臋 w pryncypium architektonicznie: funkcja lambda powinna dzia艂a膰 jak najkr贸cej.

Najlepsze praktyki dotycz膮ce AWS Lambda

  1. Funkcja Lambda jest bezstanowa i w taki spos贸b powinna zosta膰 zaprogramowana.

  2. Stan powinien by膰 przechowywany poza funkcj膮. Najlepiej w innej us艂udze serverless np. S3 lub DynamoDB. Mog膮 to te偶 by膰 innego typu bazy danych, w tym relacyjne (AWS RDS), przy czym nale偶y pami臋ta膰 o niskiej skalowalno艣ci takich baz w por贸wnaniu z Lambd膮.

  3. Odseparuj logik臋 funkcji od metody wywo艂ywanej przez AWS (zwyczajowo nazywanej handler). W ten spos贸b 艂atwiej Ci b臋dzie testowa膰 logik臋 biznesow膮 funkcji oraz zmigrowa膰 si臋 na inn膮 chmur臋 publiczn膮 je艣li zajdzie taka potrzeba.

  4. Ponownie wykorzystuj istniej膮ce zasoby. Utrzymuj po艂膮czenia do bazy w ciep艂ych funkcjach - jest du偶a szansa, 偶e b臋dziesz m贸g艂 je u偶y膰 przy kolejnym wywo艂aniu funkcji, co oszcz臋dzi czas potrzebny na ponowne nawi膮zanie po艂膮czenia.

  5. Gdzie to mo偶liwe korzystaj ze zmiennych statycznych, globalnych oraz wzorca singleton. Dzi臋ki czemu przy kolejnych wywo艂aniach ciep艂ej funkcji nie b臋dziesz traci艂 czasu na ponown膮 inicjalizacj臋 obiekt贸w lub zmiennych.

  6. Korzystaj ze zmiennych 艣rodowiskowych, aby automatycznie konfigurowa膰 zmienne np. ARN kolejki, czy nazwa wiaderka S3.

  7. Korzystaj z SSM Parameters i Secrets Manager. Nigdy nie umieszczaj kluczy, hase艂 i innych sekret贸w w kodzie.

  8. Minimalizuj wielko艣膰 kodu funkcji. W Java czy JavaScript zale偶no艣ci do bibliotek i framework贸w szybko mog膮 przekroczy膰 dziesi膮tki a nawet setk臋 megabajt贸w. Kontroluj swoje zale偶no艣ci, aby zminimalizowa膰 wielko艣膰 deploymentu i oszcz臋dzi膰 na czasie (oczekiwania programisty i uruchamiania si臋 funkcji).

  9. Loguj wywo艂ania funkcji do CloudWach Logs. U偶ywaj filtr贸w, metryk i alarm贸w w CloudWatch w celu lepszego monitoringu wdro偶onego systemu serverless.

  10. U偶ywaj warstw gdy chcesz uruchomi膰 lokalnie z poziomu funkcji w艂asn膮 komend臋/binark臋 linuxow膮. (Przyk艂adowo w warstwie mo偶esz dostarczy膰 do kontenera Lambda aplikacj臋 ffmpeg do edycji audio i wideo. Dzi臋ki czemu za ka偶dym razem gdy b臋dziesz aktualizowa膰 kod funkcji Lambda nie b臋dziesz musia艂 wysy艂a膰 wraz z kodem binarki ffmpeg).

  11. Warstwy mo偶esz wykorzysta膰 do standaryzacji rozwi膮za艅 powtarzalnych problem贸w (nie wiem jak jest po polsku cross-cutting concern 馃檪 ), gdy偶 jedn膮 warstw臋 mo偶esz umie艣ci膰 w dowolnej liczbie funkcji.

  12. Dobierz odpowiednio ilo艣膰 pami臋ci do funkcji. Im wi臋cej RAMu przydzielone tym dro偶sze wywo艂anie, ale paradoksalnie funkcja mo偶e generowa膰 mniejsze (podobne) koszty, ni偶 ten sam kod wywo艂any na 128 MB, poniewa偶 wykona si臋 znacznie szybciej.

  13. Je艣li zale偶 Ci na szybko艣膰 dzia艂ania ale r贸wnie偶 wygodzie developmentu to rozwa偶 JavaScript zamiast innego j臋zyka. Nie wybieraj Go tylko dlatego, 偶e w testach jest najszybsze. Ju偶 kilkukrotnie s艂ysza艂em negatywne opinie na temat tego j臋zyka od os贸b, kt贸re si臋 na niego przesiad艂y. Wi臋cej na ten temat w moim poradniku 12 rzeczy o Serverless, kt贸re musisz wiedzie膰 przed rozpocz臋ciem projektu w chmurze AWS.

  14. Waliduj dane wej艣ciowe. Obs艂uguj wyj膮tki i b艂臋dy.

  15. Zarz膮dzaj timeoutami do zewn臋trznych zasob贸w. Chyba nie chcesz aby Twoja funkcja bezczynnie czeka艂a na brak odpowiedzi z jakiego艣 zasobu. W ko艅cu p艂acisz za ten czas.

  16. Nie u偶ywaj rekurencji (nie wywo艂uj funkcji sam膮 sob膮).

  17. Wbrew oczekiwaniom Twoja Lambda mo偶e si臋 wywo艂a膰 wi臋c razy ni偶 raz na pojedyncze 偶膮danie. Jest to zwi膮zane z obs艂ug膮 b艂臋d贸w w us艂udze Lambda ale r贸wnie偶 np. z brzegowymi sytuacjami w kolejkach kt贸rych u偶ywasz. Bez r贸偶nicy na pow贸d Twoja funkcja powinna by膰 idempotentna, czyli powinna sobie poradzi膰 w wielokrotnym wywo艂aniem z tymi samymi parametrami lub 偶膮daniem. Wi臋cej info tutaj.

Najlepsze praktyki dotycz膮ce AWS Lambda w VPC

  • Unikaj umieszczania funkcji lambda wewn膮trz VPC.

  • Je艣li ju偶 musisz mie膰 funkcj臋 wewn膮trz VPC to unikaj u偶ywania DNS贸w do 鈥榬esolvowania鈥 domeny, gdy偶 mo偶e to zaj膮膰 dodatkowe kilka sekund.

  • Zdefiniuj przynajmniej po jednym subnecie na stref臋 dost臋pno艣ci (availability zone) swojej funkcji.

  • Ka偶da dzia艂aj膮ca instancja funkcji w VPC otrzymuje IP. Upewnij si臋, 偶e w przypadku du偶ej ilo艣ci wywo艂a艅 funkcji naraz nie przekroczysz zdefiniowanych limit贸w (zawsze mo偶esz je zwi臋kszy膰).

Powy偶sze najlepsze praktyki zebra艂em na bazie swoich do艣wiadcze艅 oraz wiedzy zebranej w poni偶szych ksi膮偶kach:




Cze艣膰

Nazywam si臋 Pawe艂 Zubkiewicz i ciesz臋 si臋, 偶e tu jeste艣!
Od ponad 18 lat profesjonalnie tworz臋 oprogramowanie, a od 2016 roku pasjonuje si臋 Serverless.
T膮 stron臋 stworzy艂em z my艣l膮 o Tobie i o nas wszystkich, kt贸rzy uwa偶aj膮, 偶e trend serverless trwale zmieni spos贸b tworzenia oprogramowania.
Wi臋cej o tej stronie...

Kategorie

Pobierz bezp艂atny PDF

Poradnik 12 Rzeczy o Serverless

Wybrane artyku艂y