AWS Lambda kontra Amazon EC2: które rozwiązanie wybrać?
Amazon jest jednym z liderów w dziedzinie świadczenia różnorodnych usług w chmurze, oferując kilkadziesiąt usług, a ich liczba wciąż rośnie. Amazon EC2 to jedna z najpopularniejszych usług Amazona i główny element platformy chmurowej Amazon, która została zaprezentowana w 2006 roku. Amazon EC2 jest obecnie szeroko stosowany, ale rośnie również popularność innej usługi Amazona o nazwie Lambda (wprowadzonej w 2014 roku). W dzisiejszym wpisie na blogu porównujemy platformy AWS Lambda i EC2, aby pomóc Ci dokonać właściwego wyboru dla Twojego środowiska.
< span data-sheets-value=”{” 1 „:2,” 2 „:”
„}” data-sheets-userformat=”{” 2 „:17089,” 3 „:{” 1 „:0},” 9 „:1,” 10 „:1,” 12 „:0,” 17 „:1}”>
</span>
Czym jest AWS EC2?
AWS EC2 (Amazon Web Services Elastic Compute Cloud) to usługa umożliwiająca korzystanie w chmurze z maszyn wirtualnych zwanych instancjami EC2 oraz zapewniająca skalowalność. W dowolnym momencie można zmieniać ilość miejsca na dysku, wydajność Procesora, pamięć itp. Można wybrać obraz bazowy z niezbędnym, preinstalowanym systemem operacyjnym (OS), takim jak Linux lub Windows, a następnie skonfigurować większość ustawień systemu operacyjnego, a także zainstalować własne aplikacje. Masz dostęp z uprawnieniami administratora do swoich instancji Amazon EC2 i możesz tworzyć dodatkowych użytkowników. Zarządzaj wszystkim, czego potrzebujesz, i w pełni kontroluj swoje instancje EC2, w tym uruchamianie ich na nowo i wyłączanie. Kategoria usługi internetowej AWS EC2 znana jest jako „Infrastruktura jako usługa” (Infrastructure as a Service). Usługę AWS EC2 można wykorzystać do hostingu w chmurze – serwery można wdrażać jako maszyny wirtualne (instancje) w chmurze.
Czym jest AWS Lambda?
AWS Lambda to platforma obliczeniowa, która pozwala na uruchamianie fragmentu kodu napisanego w jednym z obsługiwanych języków programowania – Java, JavaScript lub Python – po uruchomieniu wyzwalacza powiązanego z określonym zdarzeniem. Nie ma potrzeby konfigurowania wirtualnego serwera ani środowiska w celu uruchomienia napisanej przez siebie aplikacji. Wystarczy wprowadzić kod programu (zwany w tym przypadku funkcją Lambda ) w interfejsie AWS Lambda, powiązać funkcję Lambda z wydarzeniem i uruchomić aplikację w chmurze w razie potrzeby, bez konieczności zajmowania się zarządzaniem serwerem i konfiguracją środowiska. W ten sposób można skupić się na aplikacji, a nie na zarządzaniu serwerem — właśnie dlatego AWS Lambda określa się mianem bezserwerowej.
Zdarzeniem, po którym uruchamiana jest aplikacja, może być przesłanie pliku do zasobnika Amazon S3, wprowadzenie zmian w tabelach DynamoDB, otrzymanie żądania HTTP do usługi API Gateway itp. Po skonfigurowaniu funkcji tak, aby uruchamiała się po wystąpieniu zdarzenia, aplikacja będzie uruchamiana automatycznie po każdym nowym zdarzeniu.
Jeśli chodzi o klasyfikację, Lambda jest implementacją modelu Function as a Service (FaaS) firmy Amazon. W poniższej tabeli można zapoznać się z poziomem zarządzania dla każdego typu usługi, począwszy od korzystania z serwerów fizycznych, oraz porównać je. Najniższe poziomy (wymagające zarządzania przez użytkownika) są zaznaczone kolorem zielonym, a wyższe poziomy (zarządzane przez dostawcę) – kolorem niebieskim. Zatem korzystając z serwerów fizycznych, można zarządzać sprzętem oraz wszystkimi wyższymi poziomami. Korzystając z usługi „Infrastruktura jako usługa” (IaaS), takiej jak AWS EC2, można zarządzać systemami operacyjnymi na udostępnionych maszynach wirtualnych (instancjach EC2). Na poziomie Platformy jako usługi (PaaS) można uruchamiać aplikacje, które przed uruchomieniem wymagają kompilacji. Korzystając z usługi typu Function as a Service (FaaS), takiej jak AWS Lambda, nie trzeba kompilować aplikacji – wystarczy wprowadzić kod w interfejsie udostępnionym przez dostawcę usług zarządzanych (MSP). Model SaaS (oprogramowanie jako usługa), wspomniany dla porównania w tabeli, pozwala jedynie na korzystanie z gotowych aplikacji (stworzonych przez dostawców) w chmurze za pomocą klienta typu thin client lub przeglądarki internetowej.
AWS EC2 a Lambda: przypadki użycia
AWS EC2 ma szeroki zakres zastosowań, ponieważ podczas korzystania z tej usługi można skonfigurować niemal wszystko. Najczęstsze przypadki użycia AWS EC2 to:
- Hosting stron internetowych
- Tworzenie i testowanie aplikacji lub złożonych środowisk
- Obliczenia o wysokiej wydajności
- Odzyskiwanie awaryjne
Ogólne przypadki użycia AWS Lambda:
- Automatyzacja zadań
- Przetwarzanie obiektów przesłanych do Amazon S3
- Analiza logów w czasie rzeczywistym
- Filtrowanie i przekształcanie danych w czasie rzeczywistym
Rozważmy konkretny przykład. Wyobraź sobie, że Twoja strona internetowa korzysta z zasobnika Amazon S3 do przechowywania treści, w tym zdjęć, filmów, plików audio itp. Gdy zostanie przesłany nowy plik obrazu lub wideo, musisz utworzyć miniaturę dla swojej strony internetowej, która będzie służyć jako link do pełnowymiarowego obrazu lub pliku wideo. Ręczne tworzenie miniatur może być żmudnym i czasochłonnym zadaniem. W takim przypadku można utworzyć funkcję Lambda, która automatycznie zmieni rozmiar obrazu na podstawie przesłanego pliku, zmieni nazwę tego obrazu i zapisze docelowy obraz w odpowiednim katalogu. Funkcję Lambda można skonfigurować tak, aby była uruchamiana bezpośrednio po zdarzeniu przesłania oryginalnego pliku obrazu do zasobnika Amazon S3 używanego przez witrynę internetową.
AWS EC2 a Lambda: zasada działania
EC2 . Jak być może pamiętasz, korzystając z AWS EC2, pracujesz z maszynami wirtualnymi (VM) zwanymi instancjami EC2. Do instancji EC2 można dodawać wirtualny sprzęt (dyski wirtualne, interfejsy sieciowe, procesory, pamięć), a także uruchamiać, zatrzymywać i restartować instancję maszyny wirtualnej. Instancje EC2 mogą współpracować z dwoma typami pamięci masowej – Elastic Block Storage (EBS) oraz zasobnikami S3. Możesz skorzystać z gotowego obrazu z zainstalowanym systemem operacyjnym lub stworzyć własny, dostosowany do potrzeb obraz Amazon Machine Image (AMI). Usługa chmurowa EC2 zapewnia automatyczne skalowanie i równoważenie obciążenia. Instancje EC2 mogą współpracować z większością innych usług internetowych Amazon, takich jak S3, ECS, Route53, CloudWatch itp. .
Lambda . Podczas korzystania z AWS Lambda Twoja aplikacja (funkcja Lambda) działa w kontenerze, co jest dla Ciebie całkowicie przezroczyste. Kontener zawiera kod i biblioteki. Zasoby są dostarczane przez Amazon zgodnie z potrzebami aplikacji, a skalowanie odbywa się automatycznie i w sposób płynny. Użytkownik nie ma kontroli ani nad kontenerem, w którym działa aplikacja, ani nad instancją EC2, na której ten kontener jest uruchomiony (nie ma o nich żadnej wiedzy, ponieważ infrastruktura bazowa jest niedostępna dla użytkowników Amazon Lambda). Zobacz tabelę powyżej.
AWS Lambda można uznać za framework usługi EC2 Container Service (ECS), który wykorzystuje kontenery do uruchamiania fragmentu kodu reprezentującego aplikację. Cykl życia każdego kontenera jest krótki. Działająca funkcja Lambda nie zapisuje swojego stanu. Jeśli chcesz zapisać wyniki, należy je przechowywać w jakimś magazynie danych, na przykład w zasobniku Amazon S3. Możliwe jest skonfigurowanie sieci wirtualnej dla funkcji Lambda, na przykład w celu połączenia z usługą Amazon RDS (Amazon Relational Database Service). Lambda składa się z wielu części: warstw, środowiska funkcji oraz modułu obsługi. Wyzwalacze to elementy uruchamiające funkcję Lambda. Lambda to pojedyncza funkcja, która jest wykonywana na żądanie wyzwalaczy.
Pełna lista dostępnych wyzwalaczy:
- API Gateway
- AWS IoT
- Alexa Skills Kit
- Alexa Smart Home
- Application Load Balancer
- CloudFront
- CloudWatch Events
- CloudWatch Logs
- CodeCommit
- Cognito Sync Trigger
- DynamoDB
- Kinesis
- S3
- SNS
- SQS
API Gateway to specjalna usługa, która pozwala programistom łączyć różnorodne aplikacje spoza AWS z aplikacjami AWS i innymi zasobami.
AWS EC2 a Lambda: wersje/migawki
EC2 . Dla woluminów EBS (Elastic Block Storage) instancji AWS EC2 dostępny jest złożony system migawki . Można tworzyć migawki przyrostowe oraz przywrócić do pożądanego stanu instancji EC2. Migawki wielowoluminowe mogą być wykorzystywane w przypadku krytycznych obciążeń, na przykład baz danych korzystających z wielu woluminów EBS.
Lambda . Wsparcie dla wygodnego systemu przechowywania wersji funkcji Lambda umożliwia ułatwienie zarządzania funkcjami Lambda. Każdej przesłanej kopii kodu można przypisać numer wersji, a następnie dodać aliasy odwołujące się do odpowiedniej wersji kodu. Numer każdej wersji zaczyna się od 1 i jest przyrostowo zwiększany. Funkcje Lambda można na przykład podzielić na kategorie: alfa, beta i produkcyjne. Nazwa zasobu Amazon (Amazon Resource Name) jest przypisywana do każdej wersji funkcji Lambda podczas publikacji i nie można jej później zmienić.
AWS EC2 a Lambda: bezpieczeństwo
EC2 . Należy zadbać o swoje instancje EC2 oraz wszystkie komponenty znajdujące się w tych instancjach. Można ręcznie skonfigurować zaporę ogniową dla instancji EC2 – Amazon udostępnia zaporę ogniową VPC (Virtual Private Cloud) do kontrolowania ruchu i zapewnienia bezpieczeństwa instancjom EC2 w chmurze. Można ręcznie zainstalować i skonfigurować oprogramowanie antywirusowe dla instancji EC2, tworzyć role IAM, określać uprawnienia, tworzyć grupy zabezpieczeń itp. Narzędzie AWS Systems Manager Patch Manager pozwala na automatyczną instalację aktualizacji systemu operacyjnego i poprawek zabezpieczeń. Można skonfigurować AWS tak, aby przed instalacją poprawki lub aktualizacji tworzył migawkę, co pozwoli zapobiec ewentualnym problemom. W razie potrzeby należy utworzyć pary kluczy, aby uzyskać dostęp do instancji EC2. Podczas korzystania z AWS EC2 należy zwracać większą uwagę na bezpieczeństwo niż w przypadku korzystania z AWS Lambda.
Lambda . Istnieją uprawnienia do usług AWS, do których Lambda ma dostęp domyślnie. Rola IAM służy do definiowania usług, które muszą być dostępne dla funkcji Lambda. Dla każdej funkcji Lambda należy skonfigurować rolę IAM, w imieniu której funkcja Lambda będzie uruchamiana. Oznacza to, że po skonfigurowaniu roli IAM będzie można połączyć funkcję Lambda z określonymi usługami Amazon bez użycia kluczy lub innych parametrów autoryzacyjnych.
Możliwe jest skonfigurowanie szyfrowania między funkcją Lambda a usługą S3, a także między bramą API a funkcją Lambda za pomocą klucza KMS. Podczas tworzenia funkcji Lambda generowany jest domyślny klucz szyfrujący. Zaleca się jednak utworzenie własnego klucza KMS.
W porównaniu z instancjami EC2 funkcje Lambda nie wymagają aktualizacji zabezpieczeń ani poprawek. Amazon automatycznie aktualizuje kontenery i systemy operacyjne, na których opierają się te funkcje. Jest to zaleta korzystania z funkcji Lambda pod względem bezpieczeństwa.
AWS EC2 a Lambda: wydajność i dostępność
EC2 . Po uruchomieniu instancji EC2 działa ona do momentu ręcznego zatrzymania lub zaplanowania zadania wyłączenia. Gdy instancja EC2 jest uruchomiona, aplikacja jest na niej uruchamiana niemal natychmiast. Można uruchamiać jednocześnie dowolną liczbę aplikacji, o ile pozwala na to wydajność instancji EC2. Uruchamianie aplikacji na instancjach EC2 to dobre rozwiązanie, gdy aplikacje muszą być uruchamiane regularnie przez cały dzień.
Lambda . Funkcja Lambda jest zawsze dostępna, ale nie działa przez cały czas. Domyślnie funkcja Lambda jest nieaktywna. Gdy aktywowany jest wyzwalacz powiązany z wydarzeniem, uruchamiana jest aplikacja (funkcja Lambda). Maksymalny czas działania funkcji Lambda (limit czasu) jest ograniczony do 900 sekund (15 minut). W związku z tym uruchamianie aplikacji długotrwałych w AWS Lambda nie jest dobrym pomysłem. Jeśli chcesz uruchamiać aplikacje, których pomyślne wykonanie trwa dłużej niż 900 sekund, lub aplikacje o zmiennym czasie wykonania, rozważ skorzystanie z AWS EC2. Kolejnym ograniczeniem dla działającej funkcji Lambda jest maksymalna ilość pamięci, która wynosi 3008 MB.
W zależności od regionu można jednocześnie uruchamiać od 1000 do 3000 instancji Lambda. Skontaktuj się z pomocą techniczną AWS, jeśli chcesz uruchamiać więcej instancji jednocześnie.
Opóźnienie między wysłaniem żądania a wykonaniem aplikacji wynosi w przypadku AWS Lambda do 100 milisekund, w przeciwieństwie do aplikacji działających na instancjach EC2, które nie mają takiego opóźnienia. 100 ms to niewiele, ale w przypadku niektórych rodzajów aplikacji czas ten może mieć kluczowe znaczenie. Jeśli aplikacja musi pobrać dane z zasobnika Amazon S3, przed jej uruchomieniem może być potrzebne dodatkowe 1–3 sekundy. Należy pamiętać o tym opóźnieniu podczas planowania wykorzystania AWS Lambda do uruchamiania aplikacji.
Czas zimnego startu stanowi wadę funkcji Lambda. Opóźnienie występuje, gdy funkcja nie była uruchamiana przez dłuższy czas, a uruchomienie kontenera i funkcji w Amazon Cloud wymaga czasu. Wykorzystanie AWS Lambda do uruchamiania aplikacji może być dobrym rozwiązaniem w przypadku nierównomiernego obciążenia, gdy aplikacje muszą być uruchamiane o różnych porach dnia z długimi przerwami między kolejnymi uruchomieniami.
AWS Lambda a EC2: model cenowy
Zarówno usługa chmurowa EC2, jak i Lambda działają na zasadzie płatności zgodnie z rzeczywistym zużyciem. Przyjrzyjmy się jednak szczegółom i różnicom.
EC2 . Płacisz za czas, w którym instancja AWS EC2 jest uruchomiona, niezależnie od tego, czy funkcja/aplikacja jest wykonywana, czy nie. Cena za godzinę zależy od wydajności Procesora, ilości pamięci, wydajności karty graficznej oraz pojemności pamięci masowej wykorzystywanej przez instancję EC2. Jeśli Twoja funkcja lub aplikacja musi być zawsze dostępna ze względu na dużą liczbę regularnych żądań, korzystanie z instancji AWS EC2 może być bardziej opłacalne finansowo.
Lambda . Płacisz za liczbę uruchomień aplikacji oraz czas potrzebny do zakończenia ich wykonywania. Cena za każdą sekundę działania aplikacji zależy od ilości pamięci przydzielonej dla aplikacji i wynosi 0,00001667 USD za każdy gigabajt-sekundę. Czas wykonywania aplikacji liczy się od momentu jej uruchomienia do zwrócenia wyniku lub do zatrzymania po upływie limitu czasu. Czas jest zaokrąglany w górę do najbliższej liczby będącej wielokrotnością 100 ms. Jeśli potrzebujesz dostępności na żądanie, cena za korzystanie z AWS Lambda do uruchamiania funkcji/aplikacji może być korzystniejsza.
Wnioski
AWS EC2 to usługa reprezentująca tradycyjną infrastrukturę chmurową (IaaS), która pozwala na uruchamianie instancji EC2 jako maszyn wirtualnych, konfigurowanie środowisk oraz uruchamianie niestandardowych aplikacji.
AWS Lambda to wdrożona przez Amazon usługa typu „Function as a Service”, która pozwala uruchamiać aplikacje bez konieczności martwienia się o infrastrukturę bazową. AWS Lambda zapewnia architekturę bezserwerową i umożliwia uruchamianie fragmentu kodu w chmurze po aktywacji wyzwalacza zdarzenia. Korzystając z AWS Lambda, zyskujesz skalowalną, niewielką i niedrogą funkcję z kontrolą wersji. Możesz skupić się na pisaniu kodu, a nie na konfigurowaniu infrastruktury.
Jeśli obliczyłeś, że Twoja aplikacja ma dużo czasu bezczynności na instancji EC2, która działa nieprzerwanie, rozważ użycie AWS Lambda, dzięki czemu nie musisz płacić za czas bezczynności, jeśli nie ma żądań uruchomienia aplikacji. Jeśli występuje duża liczba regularnych żądań uruchomienia aplikacji, lepszym rozwiązaniem może być wdrażanie aplikacji na instancji EC2, która działa nieprzerwanie.
Korzystanie z AWS EC2 sprawdza się w przypadku aplikacji o wysokiej wydajności, aplikacji długotrwałych oraz takich, które nie mogą mieć opóźnień przy uruchamianiu. Jeśli korzystasz z instancji AWS EC2, nie zapomnij wykonać ich kopii zapasowej, aby uniknąć utraty danych. NAKIVO Backup & Replication to kompleksowe rozwiązanie do ochrony danych, które oprócz maszyn wirtualnych VMware vSphere, Hyper-V i serwerów fizycznych może chronić również instancje EC2.
