Wprowadzenie do Serverless w chmurze Amazon Web Services
Piotr Grzesik
Agenda
- Amazon Web Services
 - Co definiujemy jako "serverless"?
 - AWS Lambda
 - API Gateway
 - SQS
 - EventBridge
 - SNS
 - DynamoDB
 - Cognito
 - 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
- 166