Migracja polskiej firmy carsharingowej do AWS
Firma świadcząca usługi wypożyczania samochodów (carsharing). Firma dysponuje flotą ponad 2 000 samochodów w 60 punktach wynajmu na terenie całej Polski oraz przedstawicielstwami na wszystkich polskich lotniskach i na terenie Litwy.
Wyzwanie:
Firma poprosiła nas o pomoc w migracji całej swojej infrastruktury do środowiska chmurowego i jednoczenie stworzeniu całkowicie nowej infrastruktury pod rozwój kolejnej wersji aplikacji.
Do tej pory cała infrastruktura była przechowywana na serwerach on-premise. Firmie zależało na optymalizacji wydajności i optymalizacji kosztów, które generuje środowisko.
Realizacja:
Zaczęliśmy od warsztatów z deweloperami – zaplanowaliśmy krok po kroku strategię maksymalnego wykorzystania obecnego środowiska i zaplanowania nowego od podstaw. Tworząc strategię skupiliśmy się na wykorzystaniu najbardziej up-to-date technologii przy jednoczesnej maksymalnej wydajości kosztowej.
Pierwszym etapem naszych prac było uporządkowanie tego, co zastaliśmy, czyli: zasoby, procesy a dokładniej, przygotowaliśmy bezpieczne podsieci, ukryliśmy elementy z publicznych podsieci, wszystko tak, żeby dział techniczny firmy mógł spać spokojnie.
Kolejnym etapem było stworzenie infrastruktury deweloperskiej z wykorzystaniem Terraform workspaces, tak żeby łatwo i szybko tworzyć nowe środowiska.
Następnie “zdockeryzowaliśmy” tę aplikację i wtedy przyszedł czas na stworzenie orchestracji. Do tego wykorzystaliśmy Amazon Elastic Container Service (ECS).
Stworzyliśmy infrastrukturę, która w automatyczny sposób się skaluje, jest ukryta wewnątrz prywatnych podsieci za VPN-em, czyli nikt z zewnątrz nie ma do niej dostępu. Poprawne działanie wszystkich mikroserwisów sprawdzane jest w zautomatyzowany oraz wieloetapowy sposób.
Napisaliśmy proces testowania, budowania aplikacji i uruchomiliśmy 2 środowiska developerskie oraz preprodukcyjne. Na wszystkich kontach wdrożyliśmy audyt SecurityHub dający możliwość jeszcze lepszego zabezpieczenia tych środowisk. Wdrażamy najlepsze praktyki AWS na każdym kroku, dbając o wydajność kosztową i przeciwdziałanie powstawania długu technologicznego.
Wyniki:
Zaprojektowaliśmy nową infrastrukturę w chmurze AWS. Zastosowaliśmy wszystkie sprawdzone rozwiązania skalowalności i wydajności.
Wprowadziliśmy tzw. zarządzanie kontami (AWS Organizations). Polega to na stworzeniu konta głównego ze skonsolidowanym bilingiem oraz przyporządkowanych podkont.
To rozwiązanie zapewniło, że wszystkie zmiany są na bieżąco synchronizowane i zapisywane w razie awarii lub włamania.
Opotymalizacja kosztowa:
Opensearch
W przygotowanej infrastrukturze znajdują się 2 klastry OpenSearch: do zbierania logów oraz do ramek z samochodów. W przypadku pierwszego utworzyliśmy indeksy per serwis co pozwoliło na określenie logujących największe ilości danych i ograniczenie ich na poziomie aplikacji, to zmniejszyło ilość wykorzystanego miejsca i zmniejszenie wielkości dysków, a co za tym idzie także typu instancji. W drugim przypadku analiza metryk pokazała że klaster przy mniejszym rozmiarze instancji wytrzyma obecne obciążenie. Udało się zejść z kosztów o ok. połowę (100$ do 54$ dziennie). Kolejnym krokiem będą testy i zmiana na instancje z ARM, które są bardziej optymalne kosztowo i także potencjalnie wydajnościowo.
DynamoDB
Jedna z tabel miała włączony tryb on-demand, wynikało to z tego że przed migracją nie był znany ruch i zasoby. Analiza ruchu po go-live pozwoliła na oszacowanie potrzebnych zasobów WCU i RCU, co pozwoliło na obniżkę miesięcznych kosztów z 670$ na 128$.
RDS
Wdrażamy działania, które w dłuższej perspektywie przyczynią się do znaczącego obniżenia kosztów.
Fargate ECS
W tym przypadku koszty się bardzo zmieniały, przeprowadziliśmy optymalizację kosztową, co przełożyło sie na wymierne korzyści w postaci zaoszczędzonej gotówki.
Monitorowanie i zarządzanie operacyjne:
W tym projekcie kluczowymi elementami procesu migracji i optymalizacji było monitorowanie i zarządzanie operacyjne.
Monitorowanie:
Aby zapewnić solidną obserwowalność, wdrożono następujące środki:
Każde zadanie ma dodatkowy kontener Fluentd z niestandardowymi skryptami do szczegółowego monitorowania stanu zdrowia zadania, wizualizowanego w samodzielnie hostowanej Grafanie.
Zbieramy dwie główne grupy logów:
Logi aplikacji są agregowane w klastrze OpenSearch z rozszerzonymi pulpitami nawigacyjnymi ułatwiającymi analizę, z odpowiednio skonfigurowanymi indeksami na usługę i automatycznym przechowywaniem kopii zapasowych przy użyciu natywnych funkcji OpenSearch.
Dla logów usług AWS, takich jak Lambdy, API Gateway lub WAF, używamy CloudWatch Logs Insights, a dla logów ALB agregowanych w S3 wykorzystujemy zapytania Athena.
Szczegółowe monitorowanie każdego komponentu aplikacji, w tym konkretnych błędów na poszczególnych punktach końcowych lub usługach oraz standardowych metryk, takich jak CPU i pamięć, dostępne dzięki AWS CloudWatch i Telegraf.
Audytowanie za pomocą SecurityHub:
SecurityHub zostało zintegrowane we wszystkich kontach, aby zwiększyć środki bezpieczeństwa, ułatwiając wykrywanie nowych problemów i rozwiązywanie już istniejących. Audytowanie to obejmowało najlepsze praktyki AWS, przyczyniając się do efektywności kosztowej i zapobiegając gromadzeniu się długu technicznego.
AWS Organizations:
Na początkowym etapie projekt zakładano jako znacznie mniejszy. Zarządzanie kontami zostało wprowadzone za pomocą AWS Organizations, tworząc główne konto z konsolidowanym rozliczaniem oraz kilka wyznaczonych subkont. W miarę wzrostu projektu nie widzieliśmy potrzeby zmiany podejścia, ponieważ AWS Organizations spełniało nasze potrzeby. Nowe konta były i są rzadko dodawane, a jeśli są, łatwo radzimy sobie z ich konfiguracją za pomocą gotowych modułów Terraform i koncepcji workspaces, stosowanych za pośrednictwem procesów GitLab CI/CD, więc nie widzieliśmy konieczności migracji do Control Tower.
Terraform i Git:
Infrastruktura została utworzona przy użyciu Terraform, skonfigurowanego przy użyciu workspaces dla wielośrodowiskowej konfiguracji z wersjonowaną konfiguracją. Była wdrażana za pomocą procesów GitLab CI/CD, z odpowiednim testowaniem na środowiskach deweloperskich przed zastosowaniem w produkcji. To podejście zapewniało, że infrastruktura mogła być łatwo replikowana i zarządzana oraz umożliwiało szybkie i efektywne tworzenie środowisk.
CloudTrail:
Użyliśmy CloudTrail z konfiguracją wieloregionową do śledzenia aktywności na koncie. Pozwalało nam to weryfikować różne podejrzane działania na kontach użytkowników i usług AWS oraz ogólnie pomagało w debugowaniu różnych zdarzeń.