Wprowadzenie do Serverless w chmurze Amazon Web Services

Piotr Grzesik

Agenda

  1. Amazon Web Services
  2. Co definiujemy jako "serverless"?
  3. AWS Lambda
  4. API Gateway
  5. SQS
  6. EventBridge
  7. SNS
  8. DynamoDB
  9. Cognito
  10. S3

Amazon Web Services

 

Amazon Web Services jest platformą oferującą usługi w modelu "Cloud Computing". Została udostępniona w roku 2006, początkowo oferując tylko trzy usługi (Amazon Simple Storage Service, Amazon Simple Queue Service, Amazon Elastic Compute Cloud), natomiast aktualnie oferuje ponad 300 różnych serwisów w kategoriach  jak Compute, Storage, Database, Migration, Network and Content Delivery, Management Tools, Messaging, Security, Identity & Compliance

Czym jest "serverless"?

 

Serverless jest modelem architektury chmurowej, w którym użytkownik może uruchamiać aplikacje czy usługi bez konieczności zarządzania infrastrukturą, najczęściej w modelu płatności "pay-per-use". 

Zalety serverless

 
  • Brak konieczności manualnego zarządzania infrastrukturą
  • "Nieskończona" skalowalność
  • Wysoka dostępność
  • Automatyczne dostosowywanie się środowiska do aktualnego ruchu
  • Większe skupienie się na logice biznesowej aplikacji
  • Rozliczenie w modelu "pay-per-use"

 

Wady serverless

 
  • Ograniczenia w wydajności pojedynczych instancji
  • Utrudnione testowanie, debuggowanie, monitorowanie
  • Złożoność rozwiązania związana z przetwarzaniem rozproszonym
  • Vendor lock-in
  • Rozliczenie w modelu "pay-per-use"

Przykłady wykorzystania

serverless

 
  • Przetwarzanie obrazów (np. w odpowiedzi na upload obrazka)
  • Reagowanie na zmiany w bazie danych (np. audyt zmian)
  • Przetwarzanie odczytów z sensorów IoT (np. przetwarzanie odczytów temperatury z czujników)
  • Przetwarzanie strumieniowe (np. przetwarzanie strumienia wiadomości pochodzących z różnych aplikacji)
  • Wykonywanie zaplanowanych akcji (np. wykonywanie backupów)
  • REST lub GraphQL APIs (e.g. aplikacji webowe)

Kiedy serverless

to niekoniecznie dobry wybór

 
  • Aplikacje wymagające bardzo niskich opóźnień (np. aplikacje tradingowe)
  • Aplikacje o wysokim, bardzo przewidywalnym ruchu (np. przetwarzanie wsadowe stałych zbiorów danych)
  • Aplikacje wymagające akceleracji sprzętowej (np. trenowanie modeli ML) 
  • Zadania długotrwające (np. zadanie które trwa ponad godzinę, którego nie możemy w łatwy sposób zdekomponować) 

AWS Lambda

 

 
  • Platforma obliczeniowa w modelu serverless
  • Wspiera natywnie środowiska takie jak Python, Node.js, .NET, czy Java, a także dowolny "custom runtime"
  • Rozliczenie w modelu "pay-per-use"
  • Limit czasu wykonywania - 15 minut
  • Maksymalna dostępna pamięć 10240 MB oraz 6 vCPU dla pojedynczej instancji
  • Łatwa integracja z innymi usługami AWS takimi jak SQS, API Gateway, czy S3

Model AWS Lambda

 

https://docs.aws.amazon.com/images/serverless/latest/devguide/images/s_lambda/lambda-arch-overview.png

Rodzaje zdarzeń wspieranych przez AWS Lambda

 
  • Amazon API Gateway
  • Amazon SQS
  • Amazon S3
  • Amazon SNS
  • Amazon EventBridge
  • Amazon DynamoDB
  • ... i wiele więcej

Live Demo

 

Amazon API Gateway

 
  • Usługa pozwalająca na tworzenie i zarządzanie API
  • Automatycznie skalowalna, wspiera tysiące jednoczesnych połączeń
  • Oferuje wsparcie dla autentykacji/autoryzacji API
  • Wspiera integracje z różnymi serwisami AWS, m.in. AWS Lambda
  • Pozwala na wersjonowanie oraz definicję "stages" dla API

Live Demo

 

Amazon S3

 
  • Usługa oferująca przestrzeń dyskową pozwalającą na przechowywanie plików (object storage)
  • Wspiera rożne klasy "storage", różniące się ceną, trwałością, oraz szybkością dostępu do danych
  • Wspiera automatyczne reguły zarządzania plikami (np. usuwanie po 30 dniach)
  • Może być wykorzystany jako źródło zdarzenia dla funkcji Lambda

Live Demo

 

Amazon SQS

 
  • Usługa kolejki pozwalającej na przesyłanie wiadomości między serwisami
  • Oferuje wsparcie dla kolejek w modelu FIFO (First In, First Out)
  • Nie wymaga zarządzania i manualnego skalowania
  • Pozwala na przechowywanie wiadomości w kolejce do 14 dni

Live Demo

 

Amazon EventBridge

 
  • Usługa oferująca "event bus" między serwisami 
  • Pozwala na reakcję na zdarzenie przez kilka aplikacji jednocześnie
  • Wspiera zaawansowane reguły dotyczące filtrowania wiadomości
  • Wspiera persystencję oraz możliwość ponownego odtworzenia zdarzeń
  • Wspiera wykonywanie zdarzeń w zadanym czasie (cron-like)
  • Nie zapewnia kolejności przetwarzania zdarzeń

Live Demo

 

Amazon SNS

 
  • Usługa pozwalająca na wymianę wiadomości między producentami a subskrybentami
  • Opiera się na asynchronicznej komunikacji poprzez "topics"
  • Wspiera model FIFO
  • Ograniczone możliwości filtrowania wiadomości
  • Wspiera bezpośrednie publikowanie mobilnych wiadomości push

Live Demo

 

Amazon DynamoDB

 
  • Baza danych NoSQL w modelu serverless, w pełni zarządzana i skalowana przez AWS
  • Wspiera operacje zapisu/odczytu z opoźnieniami rzędu kilku milisekund
  • Wspiera model rozliczeń "on demand" lub "provisioned"
  • Wspiera obsługę milionów zapytań na sekundę
  • Pozwala na reakcję na zmiany w tabelach poprzez DynamoDB Streams
  • Wspiera globalną replikację danych (poprzez global tables) 

Live Demo

 

Amazon Cognito

 
  • Usługa pozwalająca na zarządzanie użytkownikami, autoryzacją oraz autentykacją
  • Pozwala użytkownikom na tymczasowy dostęp do usług AWS
  • Oferuje integrację z Facebook, Google oraz innymi dostawcami zewnętrznymi
  • Wspiera SAML oraz OpenID Connect
  • Wspiera MFA (Multi-Factor Authentication)

Live Demo

 

Przykładowy diagram architektury serverless

 

Popularne frameworki do budowy aplikacji serverless

 
  • AWS SAM - https://aws.amazon.com/serverless/sam/
  • SST - https://sst.dev/
  • Serverless Framework - https://github.com/serverless/serverless
  • Serverless.TF - https://serverless.tf/
  • Architect - https://arc.codes/
  • AWS CDK - https://aws.amazon.com/cdk/

Q&A + Contact

@p_grzesik

contact@pgrzesik.com

Wprowadzenie do serverless w chmurze Amazon Web Services

By progressive

Wprowadzenie do serverless w chmurze Amazon Web Services

  • 30