LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
2. O mnie
- Starszy Programista Node.js @
The Software House
- ostatnimi czasy: serverless
framework, aws, terraform
- w wolnym czasie również:
python, react, react-native
- po godzinach motocyklista
3. Agenda
1. Czym jest LocalStack?
2. Krótko o Serverless Boilerplate by TSH
3. Konfiguracja projektu
4. Przykład testów integracyjnych: API Gateway, Lambda, DynamoDB,
StepFunctions
5. CI z LocalStack
6. Wady / Zalety LocalStack
7. Kiedy używać LocalStack?
8. Kiedy nie używać LocalStack?
9. Przemyślenia
4. Czym jest LocalStack?
- framework do testowania i mockowania
serwisów chmury AWS
- udostępnia funkcjonalności i API serwisów
- możliwa komunikacja przez aws-cli, aws-sdk
- łatwe lokalne deployowanie aplikacji w
Dockerze
- usługi tworzone w oparciu o definicję
CloudFormation
- integrowalne z serverless, terraform, aws-cdk,
sam
https://localstack.cloud
5. Czym jest LocalStack?
dostępne w trzech wariantach:
- Community Edition - wsparcie dla większości serwisów: Lambda,
APIGateway, StepFunctions, CloudFormation, SNS, SQS, DynamoDB ...
- Pro Edition + wsparcie: Multi-Region, Lambda Layers, dodatkowe i
rozszerzone usługi AWS, np: RDS, IAM, Cognito, ElastiCache, XRay, Web UI,
Analityka kosztów / oszczędności
- Enterprise Edition + dedykowane wsparcie techniczne, funkcjonalności na
życzenie
6. Krótko o Serverless Boilerplate by TSH
https://github.com/TheSoftwareHouse/serverless-boilerplate
Zawiera wstępną konfigurację projektu:
- Serverless Framework
- StepFunctions plugin
- Node.js
- TypeScript
- Mocha + Supertest
- StepFunctions
- PostgreSQL
12. Przykłady testów: API Gateway + Lambda
- w wariancie PRO
Edition wsparcie dla
Lambda Layers
- brak wsparcia dla
walidacji requestów
13. Przykłady testów: DynamoDB
przekazując zmienną
DYNAMODB_ERROR_PROBABILITY
możemy sterować losowym
wstrzykiwaniem błędów
(ProvisionedThroughputExceededException)
w odpowiedziach z API
18. Wady i Zalety LocalStack
zalety:
- umożliwia zapoznanie się z API
wspieranych serwisów
- uruchamianie testów
integracyjnych w izolacji
- zmniejszenie generowanych
kosztów
- każdy deweloper ma prywatne
lokalne środowisko do testów
wady:
- dodatkowa konfiguracja do
utrzymania
- występują niezgodności między
prawdziwym serwisem a
mockowanym
- brak wsparcia dla wszystkich
funkcjonalności
19. Kiedy używać LocalStack?
- testy integracyjne są pracochłonne
- każdy dodatkowy test ma wyraźny wpływ na wydłużenie czasu kroku CI
- testujemy krytyczne funkcjonalności naszej aplikacji
- testujemy to co niemożliwe do pokrycia testami jednostkowymi
- nie testujemy szczegółów aplikacji
20. Kiedy nie używać LocalStack?
- rozwijamy proste RESTowe API,
przykładowo z użyciem usług
(APIGateway, Lambda, DynamoDB) =>
dynamodb-local
- myślimy bardziej o niezależnym workflow
testowym e2e => aws-cli / aws-sdk
21. Przemyślenia
- doświadczenie zespołu w technologiach aws
- użycie narzędzi jak dynamoose/dynamodb-toolbox
- etap projektu
- stopień skomplikowania architektury, handlerów etc.