Szczegółowa analiza AWS Lambda

Tłumaczenie artykułu zostało przygotowane specjalnie dla studentów kursu "Usługi w chmurze". Jesteś zainteresowany rozwojem w tym kierunku? Obejrzyj klasę mistrzowską prowadzoną przez Egora Zueva (TeamLead w InBit) „Usługa AWS EC2” i dołącz do kolejnej grupy kursowej: start 26 września.

Szczegółowa analiza AWS Lambda

Coraz więcej osób migruje do AWS Lambda ze względu na skalowalność, wydajność, oszczędności i możliwość obsługi milionów, a nawet bilionów żądań miesięcznie. Aby to zrobić, nie musisz zarządzać infrastrukturą, na której działa usługa. A autoskalowanie pozwala obsłużyć tysiące jednoczesnych żądań na sekundę. Myślę, że AWS Lambda słusznie można nazwać jedną z najpopularniejszych usług AWS.

AWS Lambda

AWS Lambda to sterowana zdarzeniami bezserwerowa usługa obliczeniowa, która umożliwia uruchamianie kodu bez udostępniania serwerów lub zarządzania nimi oraz rozszerzanie innych usług AWS przy użyciu niestandardowej logiki. Lambda automatycznie reaguje na różne zdarzenia (tzw. wyzwalacze), takie jak żądania HTTP przesyłane przez Amazon API Gateway, zmiany danych w zasobnikach Amazon S3 czy tabelach Amazon DynamoDB; lub możesz uruchomić swój kod poprzez wywołania API przy użyciu zestawu AWS SDK i przejść między stanami w funkcjach krokowych AWS.

Lambda uruchamia kod w infrastrukturze obliczeniowej o wysokiej dostępności i jest w pełni odpowiedzialna za administrowanie platformą bazową, w tym za konserwację serwerów i systemu operacyjnego, dostarczanie zasobów, automatyczne skalowanie, monitorowanie kodu i rejestrowanie. Oznacza to, że wystarczy przesłać swój kod i skonfigurować sposób i czas jego wykonania. Usługa z kolei zadba o jej uruchomienie i zapewni wysoką dostępność Twojej aplikacji.

Kiedy przejść na Lambdę?

AWS Lambda to wygodna platforma obliczeniowa, która nadaje się do różnych zastosowań, o ile język i czas wykonania kodu są obsługiwane przez usługę. Jeśli chcesz skupić się na kodzie i logice biznesowej, jednocześnie zlecając konserwację serwerów, udostępnianie i skalowanie za rozsądną cenę, AWS Lambda jest zdecydowanie najlepszym rozwiązaniem.

Lambda idealnie nadaje się do tworzenia interfejsów programistycznych, a w połączeniu z API Gateway pozwala znacząco obniżyć koszty i szybciej wejść na rynek. Istnieją różne sposoby wykorzystania funkcji Lambda i opcji organizacji architektury bezserwerowej - każdy może wybrać coś odpowiedniego w zależności od swojego celu.

Lambda pozwala na wykonanie szerokiego zakresu zadań. Tym samym, dzięki obsłudze CloudWatch, możesz tworzyć zadania odroczone i automatyzować poszczególne procesy. Nie ma ograniczeń co do charakteru i intensywności korzystania z usługi (brane jest pod uwagę zużycie pamięci i czas), a nic nie stoi na przeszkodzie, aby systematycznie pracować nad pełnoprawnym mikroserwisem opartym na Lambdzie.

Tutaj możesz tworzyć akcje zorientowane na usługi, które nie działają w sposób ciągły. Typowym przykładem jest skalowanie obrazu. Nawet w przypadku systemów rozproszonych funkcje Lambda pozostają istotne.

Jeśli więc nie chcesz zajmować się przydzielaniem zasobów obliczeniowych i zarządzaniem nimi, wypróbuj AWS Lambda; jeśli nie potrzebujesz ciężkich obliczeń wymagających dużej ilości zasobów, wypróbuj także AWS Lambda; jeśli Twój kod działa okresowo, to prawda, powinieneś wypróbować AWS Lambda.

bezpieczeństwo

Jak dotąd nie ma żadnych skarg na bezpieczeństwo. Z drugiej strony, ponieważ wiele wewnętrznych procesów i funkcji implementacyjnych tego modelu jest ukrytych przed użytkownikiem zarządzanego środowiska uruchomieniowego AWS Lambda, niektóre ogólnie przyjęte zasady bezpieczeństwa w chmurze stają się nieistotne.

Podobnie jak większość usług AWS, Lambda jest świadczona w oparciu o wspólne zasady bezpieczeństwa i zgodności między AWS a klientem. Zasada ta zmniejsza obciążenie operacyjne klienta, gdyż AWS przejmuje na siebie zadania utrzymania, administrowania i monitorowania komponentów usług – od systemu operacyjnego hosta i warstwy wirtualizacji po fizyczne bezpieczeństwo majątku infrastruktury.

Mówiąc konkretnie o AWS Lambda, AWS jest odpowiedzialny za zarządzanie podstawową infrastrukturą, powiązanymi usługami bazowymi, systemem operacyjnym i platformą aplikacji. Klient natomiast odpowiada za bezpieczeństwo swojego kodu, przechowywanie poufnych danych, kontrolę dostępu do nich, a także do usługi i zasobów Lambda (Identity and Access Management, IAM), także w granicach wykorzystywanych funkcji.

Poniższy diagram przedstawia model współodpowiedzialności w zastosowaniu do AWS Lambda. Odpowiedzialność AWS jest pomarańczowa, a odpowiedzialność klienta niebieska. Jak widać, AWS bierze większą odpowiedzialność za aplikacje wdrażane w serwisie.

Szczegółowa analiza AWS Lambda

Model wspólnej odpowiedzialności mający zastosowanie do AWS Lambda

Czas wykonania Lambdy

Główną zaletą Lambdy jest to, że wykonując funkcję w Twoim imieniu, usługa sama przydziela niezbędne zasoby. Możesz uniknąć marnowania czasu i wysiłku na administrację systemem i skupić się na logice biznesowej i kodowaniu.

Usługa Lambda jest podzielona na dwie płaszczyzny. Pierwsza to płaszczyzna sterowania. Według Wikipedii płaszczyzna sterowania to część sieci odpowiedzialna za transport ruchu sygnalizacyjnego i wyznaczanie tras. Jest to główny komponent podejmujący globalne decyzje dotyczące udostępniania, obsługi i dystrybucji obciążeń. Ponadto płaszczyzna sterowania pełni rolę topologii sieci dostawcy rozwiązania, odpowiedzialnej za routing i zarządzanie ruchem.

Druga płaszczyzna to płaszczyzna danych. Ona, podobnie jak płaszczyzna sterowania, ma swoje własne zadania. Płaszczyzna kontroli udostępnia interfejsy API do zarządzania funkcjami (CreateFunction, UpdateFunctionCode) i kontroluje sposób, w jaki Lambda komunikuje się z innymi usługami AWS. Płaszczyzna danych steruje interfejsem API Invoke, który uruchamia funkcje Lambda. Po wywołaniu funkcji płaszczyzna sterowania przydziela lub wybiera istniejące środowisko wykonawcze, które jest wstępnie przygotowane dla tej funkcji, a następnie wykonuje znajdujący się w nim kod.

AWS Lambda obsługuje różne języki programowania, w tym Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 i inne, poprzez odpowiednie środowiska wykonawcze. AWS regularnie je aktualizuje, dystrybuuje poprawki bezpieczeństwa i wykonuje inne czynności konserwacyjne na tych środowiskach. Lambda umożliwia korzystanie także z innych języków, pod warunkiem, że samodzielnie zaimplementujesz odpowiednie środowisko uruchomieniowe. A wtedy trzeba będzie zadbać o jego utrzymanie, w tym monitorowanie jego bezpieczeństwa.

Jak to wszystko działa i jak usługa będzie realizować Twoje funkcje?

Każda funkcja działa w jednym lub większej liczbie dedykowanych środowisk, które istnieją tylko przez czas działania tej funkcji, a następnie są niszczone. Każde środowisko wykonuje tylko jedno wywołanie na raz, ale jest ono ponownie wykorzystywane, jeśli istnieje wiele wywołań szeregowych tej samej funkcji. Wszystkie środowiska uruchomieniowe działają na maszynach wirtualnych z wirtualizacją sprzętową – tzw. microVM. Każda mikroVM jest przypisana do konkretnego konta AWS i może być ponownie wykorzystywana przez środowiska do wykonywania różnych funkcji w ramach tego konta. Maszyny MicroVM są spakowane w elementy składowe platformy sprzętowej Lambda Worker, której właścicielem i operatorem jest AWS. Tego samego środowiska wykonawczego nie można używać przez różne funkcje, a mikroVM nie są unikalne dla różnych kont AWS.

Szczegółowa analiza AWS Lambda

Model izolacji Lambda AWS

Izolacja środowisk wykonawczych realizowana jest przy użyciu kilku mechanizmów. Na najwyższym poziomie każdego środowiska znajdują się osobne kopie następujących komponentów:

  • Kod funkcji
  • Dowolne warstwy Lambda wybrane dla tej funkcji
  • Środowisko wykonywania funkcji
  • Minimalna przestrzeń użytkownika w oparciu o Amazon Linux

Do izolowania różnych środowisk wykonawczych wykorzystywane są następujące mechanizmy:

  • cgroups - ogranicza dostęp do procesora, pamięci, pamięci masowej i zasobów sieciowych dla każdego środowiska wykonawczego;
  • przestrzenie nazw - grupują identyfikatory procesów, identyfikatory użytkowników, interfejsy sieciowe i inne zasoby zarządzane przez jądro Linuksa. Każde środowisko wykonawcze działa we własnej przestrzeni nazw;
  • seccomp-bpf – ogranicza wywołania systemowe, których można używać w czasie wykonywania;
  • iptables i tablice routingu - izolacja środowisk wykonawczych od siebie;
  • chroot - zapewnia ograniczony dostęp do bazowego systemu plików.

W połączeniu z zastrzeżonymi technologiami izolacji AWS, mechanizmy te zapewniają niezawodną separację czasu działania. Środowiska izolowane w ten sposób nie mogą uzyskiwać dostępu ani modyfikować danych z innych środowisk.

Chociaż na jednej mikroVM można uruchomić wiele środowisk wykonawczych tego samego konta AWS, w żadnym wypadku nie można współużytkować mikroVM pomiędzy różnymi kontami AWS. AWS Lambda wykorzystuje tylko dwa mechanizmy do izolowania mikroVM: instancje EC2 i Firecracker. Izolacja gości w Lambdzie w oparciu o instancje EC2 istnieje już od 2015 roku. Firecracker to nowy hiperwizor typu open source zaprojektowany specjalnie przez AWS dla obciążeń bezserwerowych i wprowadzony w 2018 roku. Fizyczny sprzęt obsługujący maszyny microVM jest współdzielony pomiędzy obciążeniami na różnych kontach.

Zapisywanie środowisk i stanów procesów

Chociaż środowiska wykonawcze Lambda są unikalne dla różnych funkcji, mogą wielokrotnie wywoływać tę samą funkcję, co oznacza, że ​​środowisko wykonawcze może przetrwać kilka godzin, zanim zostanie zniszczone.

Każde środowisko wykonawcze Lambda ma także zapisywalny system plików, dostępny poprzez katalog /tmp. Dostęp do jego zawartości nie jest możliwy z innych środowisk wykonawczych. Jeśli chodzi o trwałość stanu procesu, pliki zapisane w /tmp istnieją przez cały cykl życia środowiska wykonawczego. Pozwala to na akumulację wyników wielu wywołań, co jest szczególnie przydatne w przypadku kosztownych operacji, takich jak ładowanie modeli uczenia maszynowego.

Zadzwoń do transferu danych

Interfejsu API Invoke można używać w dwóch trybach: trybie zdarzenia i trybie żądania-odpowiedzi. W trybie zdarzeń wywołanie jest dodawane do kolejki w celu późniejszej realizacji. W trybie żądanie-odpowiedź funkcja jest wywoływana natychmiastowo z podanym ładunkiem, po czym zwracana jest odpowiedź. W obu przypadkach funkcja działa w środowisku Lambda, ale z różnymi ścieżkami ładunku.

Podczas wywołań żądanie-odpowiedź ładunek przepływa z interfejsu API przetwarzania żądań (wywoływacza API), takiego jak AWS API Gateway lub AWS SDK, do modułu równoważenia obciążenia, a następnie do usługi wywołań Lambda (Invoke Service). Ten ostatni określa odpowiednie środowisko do wykonania funkcji i przekazuje tam ładunek w celu zakończenia wywołania. Moduł równoważenia obciążenia odbiera ruch chroniony protokołem TLS przez Internet. Ruch w ramach usługi Lambda – po module równoważenia obciążenia – przechodzi przez wewnętrzne VPC w określonym regionie AWS.

Szczegółowa analiza AWS Lambda

Model przetwarzania wywołań AWS Lambda: tryb żądanie-odpowiedź

Wywołania zdarzeń można wykonywać natychmiast lub dodawać do kolejki. W niektórych przypadkach kolejka jest realizowana przy użyciu usługi Amazon SQS (Amazon Simple Queue Service), która przekazuje wywołania do usługi realizacji połączeń Lambda poprzez wewnętrzny proces odpytywania. Przesyłany ruch jest chroniony protokołem TLS i nie ma dodatkowego szyfrowania danych przechowywanych w Amazon SQS.

Wywołania zdarzeń nie zwracają odpowiedzi — Lambda Worker po prostu ignoruje wszelkie informacje o odpowiedziach. Połączenia oparte na zdarzeniach z Amazon S3, Amazon SNS, CloudWatch i innych źródeł są przetwarzane przez Lambdę w trybie zdarzeń. Wywołania ze strumieni Amazon Kinesis i DynamoDB, kolejek SQS, modułu równoważenia obciążenia aplikacji i wywołań API Gateway są przetwarzane w sposób żądanie-odpowiedź.

Monitorowanie

Możesz monitorować i kontrolować funkcje Lambda, korzystając z różnych mechanizmów i usług AWS, w tym poniższych.

Amazon Cloud Watch
Zbiera różne statystyki, takie jak liczba żądań, czas trwania żądań i liczba żądań, które zakończyły się niepowodzeniem.

Amazon CloudTrail
Umożliwia rejestrowanie, ciągłe monitorowanie i utrzymywanie informacji o aktywności konta powiązanych z infrastrukturą AWS. Będziesz mieć pełną historię działań wykonanych przy użyciu AWS Management Console, AWS SDK, narzędzi wiersza poleceń i innych usług AWS.

RTG AWS
Zapewnia pełny wgląd we wszystkie etapy przetwarzania żądań w Twojej aplikacji w oparciu o mapę jej wewnętrznych komponentów. Umożliwia analizę aplikacji w trakcie rozwoju i w środowiskach produkcyjnych.

Konfiguracja AWS
Będziesz mógł śledzić zmiany w konfiguracji funkcji Lambda (w tym usunięcie) i środowiskach wykonawczych, znacznikach, nazwach procedur obsługi, rozmiarze kodu, alokacji pamięci, ustawieniach limitu czasu i ustawieniach współbieżności, a także roli wykonywania Lambda IAM, podsieciach i powiązaniach grup zabezpieczeń .

wniosek

AWS Lambda oferuje potężny zestaw narzędzi do budowania bezpiecznych i skalowalnych aplikacji. Wiele praktyk bezpieczeństwa i zgodności w AWS Lambda jest takich samych jak w innych usługach AWS, chociaż istnieją wyjątki. Od marca 2019 r. Lambda jest zgodna z SOC 1, SOC 2, SOC 3, PCI DSS, ustawą o przenośności i odpowiedzialności w ubezpieczeniach zdrowotnych (HIPAA) oraz innymi przepisami. Jeśli więc zastanawiasz się nad wdrożeniem kolejnej aplikacji, rozważ usługę AWS Lambda – może ona będzie najlepiej pasować do Twojego zadania.

Źródło: www.habr.com

Dodaj komentarz