Amazon Web Services (AWS) jest niemal wszystkim już znanym zbiorem usług typu -as-a-service. Usługi wdrażane przez AWS charakteryzują się tym, iż stosunkowo łatwo możemy korzystać z funkcjonalności których własnoręczna implementacja byłaby bardzo trudna i czasochłonna. Machine Learning, IoT, AR/VR, CI/CD, Blockchain – to tylko nieliczne technologie które możemy poznać i wykorzystać nie posiadając specjalistycznej wiedzy czy doświadczenia. Jeżeli pierwszy raz słyszysz o tej platformie – w poniższej części artykułu czeka na ciebie wprowadzenie do AWS.
Wiele z oferowanych serwisów dotyczy szeroko pojętego programowania. W tej serii artykułów chciałbym nieco przybliżyć te serwisy, które moim zdaniem mogą zainteresować osoby skupione głównie na frontendzie.
Backend-as-a-service – to w sumie jest to co lubimy najbardziej!
Free Tier
Przez pierwsze 12 miesięcy korzystania z AWS dostajemy od Amazonu tzw. free tier, dzięki któremu możemy wypróbować niemal wszystkie serwisy za darmo w ramach przyznanych limitów. Limity te bywają naprawdę "hojne" więc bardzo zachęcam do skorzystania z tej opcji.
S3 / S3 Glacier
Wprowadzenie do AWS zaczniemy od klasycznego produktu – S3 (Simple Storage Service). S3 najłatwiej można opisać jako dysk w chmurze. Nie chcę tutaj rozwodzić się na temat wszystkich możliwości oferowanych przez S3, gdyż cloud storage można wykorzystać na miliony różnych sposobów. Jest jedna rzecz na którą chciałbym zwrócić szczególną uwagę – Static website hosting. Dzięki temu każdy folder (bucket w nomenklaturze AWS) możemy w kilka kliknięć zamienić w hosting dla statycznych stron. Automatycznie wygenerowany link pozwoli nam od razu na przetestowanie aplikacji.
Przykładowy link: http://frontstack-aws.s3-website-eu-west-1.amazonaws.com
Oczywiście możemy również podpiąć swoje własne domeny – to i dużo więcej do znalezienia w dokumentacji.
Jeszcze dodam słówko na temat S3 Glacier. Glacier również jest miejscem do magazynowania danych w chmurze, jednak przeznaczony jest on do magazynowania danych archiwalnych bądź back-upów. Ten storage jest dużo wolniejszy od zwykłego S3 jednak jest również dużo tańszy. Cena wynosi ok $0.004 za GB/miesiąc w zależności od wybranego regionu.
EC2 / Lightsail
Większość front-endów pracujących w 2020 roku prawdopodobnie rzadko będzie musiało dotykać konfiguracji web serwerów (chyba, ze kogoś interesują również tematy DevOps-owe). Nie sposób jednak ominąć kolejnej kluczowej usługi AWS jaką jest EC2 (Elastic Compute Cloud). EC2 umożliwia nam uruchomienie wirtualnej maszyny działającej na Linuxie lub Windows Serverze. Następnie sami decydujemy co chcemy na takiej maszynie instalować – może to być LAMP Stack, Node.js, .NET Core, itp. Możemy również korzystać z gotowych „paczek”, dzięki czemu możemy od razu wraz z systemem operacyjnym zainstalować od razu cały interesujących nas stos technologiczny i bez tracenia czasu na konfigurację od razu zacząć z niego korzystać. Sami decydujemy o mocy obliczeniowej maszyny, rodzaju i pojemności dysków, ilości interfejsów sieciowych oraz przypisywanych im adresów IP, etc. Jednym słowem mamy pełną kontrolę nad naszą maszyną. Rozwiązanie świetnie sprawdzi się również w przypadku, gdy rzadko potrzebujemy naprawdę bardzo dużej mocy obliczeniowej. Wtedy taką potężną maszynę możemy uruchamiać sporadycznie – płacimy tylko za czas w którym rzeczywiście używamy instancji EC2.
Amazon Lightsail jest bardzo uproszczoną wersją EC2. Skierowany jest do początkujących użytkowników, którzy nie chcą zajmować się konfigurowaniem parametrów maszyny i wolą skorzystać z gotowych konfiguracji. W tym przypadku wybieramy jedynie interesujący nas system operacyjny, zainstalowane aplikacje i jeden z kilku gotowych wariantów konfiguracyjnych (CPU + RAM + SSD). W ciągu kilku chwil dostajemy gotowe skonfigurowane środowisko gotowe do pracy.
DynamoDB / DocumentDB
Wprowadzenie do AWS nie może odbyć się bez przedstawienia opcji bazodanowych. Aplikacje frontendowe zazwyczaj korzystają z gotowych już endpointów API: REST czy też GraphQL. W naszym obowiązku leży poprawne pobranie danych oraz dostarczenie ich użytkownikowi oraz ewentualne przesłanie danych dostarczonych przez użytkownika do API. W ogóle nie ingerujemy w bazę danych – zajmują się tym dedykowane osoby.
Samodzielne postawienie serwera bazodanowego wymaga sporo pracy i doświadczenia. Nie będzie niespodzianką, gdy napiszę iż również w tym przypadku Amazon wyciąga do nas pomocną dłoń. Ponownie – zakładamy, że pracujemy na front-endzie i nie czujemy się najlepiej w SQL. Nie ma problemu – stwórzmy bazę danych typu noSQL. Czym jest nierelacyjna baza danych to temat na zupełnie inny wpis, ale w dużym skrócie wszystkie rekordy w tabelach bazy danych zapisujemy w takiej formie jak obiekty w JavaScript, czyli klucz – wartość.
Amazon DynamoDB jest serwisem który umożliwia nam utworzenie w/w bazy danych poprzez (a jakże) kilka kliknięć. Taka baza danych jest od razu gotowa do pracy i będzie się automatycznie rozrastała wraz z przybywającymi rekordami. My płacimy jedynie za to co mamy aktualnie w tabelach.
Osoby zaznajomione z tematyką noSQL na pewno słyszały o takim produkcie jak MongoDB. Zasada działania jest dokładnie taka sama jak DynamoDB. MongoDB jest świetną bazą danych… tak długo jak nie musimy zmierzyć się ze skalowaniem klastrów instancji MongoDB.
MongoDB jest na tyle popularnym rozwiązaniem, że Amazon postanowił zbudować jeden serwis poświęcony głównie tej technologi – DocumentDB. Dzięki temu możemy korzystać ze wszystkich możliwości oferowanych przez MongoDB oraz polegać na infrastrukturze AWS.
Lambda
Lambda – jeden z moich ulubionych serwisów oferowanych przez AWS i wprowadzenie do AWS nie byłoby kompletne bez omówienia tego serwisu. Pisanie o jej możliwościach jest dość trudne, ponieważ są one praktycznie nieograniczone. Lambda jest serwisem dzięki któremu możemy uruchamiać nasz kod bez konieczności myślenia o tym gdzie i jak ten kod zostanie uruchomiony. My tylko piszemy funkcje, przesyłamy ją do Lambdy (bądź piszemy ją bezpośrednio w edytorze dostarczonym przez AWS – tzw. Cloud9) i decydujemy jakie zdarzenia mają ten kod uruchamiać. Tymi zdarzeniami może być niemal dowolna akcja wykonana w innych usługach AWS bądź zapytanie do API.
Przykłady użycia – jest ich naprawdę sporo:
- stworzona przez nas aplikacja mobilna pozwala na robienie zdjęć ➡️ zrobione zdjęcie przesyłamy do S3 ➡️ S3 informuje Lambde o nowym pliku ➡️ Lambda pobiera plik i wykonuje na nim nasz kod (np. optymalizacja obrazu za pomocą sharp) ➡️ Lambda wysyła obrobiony obraz do określonego przez nas miejsca (np. jakiś serwer plików),
- w naszej aplikacji użytkownik dokonał zakupu butów i wybrał dostawę do paczkomatu ➡️ nowy zakup zostaje zapisany w bazie danych DynamoDB ➡️ DynamoDB informuje Lambdę o nowym zapisie ➡️ Lambda pobiera ten zapis i na podstawie otrzymanych danych tworzy przesyłkę/etykietę oraz wysyła do magazynu maila z informacją o konieczności przygotowania nowej paczki,
- obsługa zapytań od asystentów głosowych (np. Amazon Alexa),
- monitorowanie urządzeń IoT,
- itp, itd.
Wszystkie dostępne środowiska wykonawcze dla Lambdy dostępne są pod tym linkiem.
API Gateway
Mamy już gdzie hostować aplikacje (S3/EC2/Lightsail), wykonywać nasz kod (EC2/Lightsail/Lambda) i zapisywać dane (DynamoDB/DocumentDB). Fajnie byłoby to ze sobą jakoś skleić – np. poprzez API. API Gateway jest kolejnym bardzo popularnym serwisem i mieszczącym się w ramach wprowadzenia do AWS. Możemy dzięki niemu stworzyć API (REST albo WebSocket) które będzie „bramą wejściową” do naszej aplikacji. Dzieki niemu możemy odpytywać z naszej aplikacji stworzony przez nas endpoint i obsługiwać takie zapytanie np. przez Lambdę, która bazując na danych z zapytania pobierze odpowiednie rekordy z bazy danych i zwróci je na front aplikacji. W RESTowym API możemy korzystać z praktycznie wszystkich metod: DELETE, HEAD, OPTIONS, GET, PATCH, POST, PUT, ANY.
W kwestiach autoryzacyjnych mamy możliwość generowania kluczy API bądź przepuszczać tylko zapytania od zautoryzowanych użytkowników (używając usługi Cognito – o tym będzie później).
Podsumowanie
To tyle, jeżeli chodzi o wprowadzenie do AWS. Jesteśmy już w stanie zbudować i hostować pełną aplikację (Front + API + Baza danych). W następnej części przejdziemy między innymi do serwisu Elastic Beanstalk, który zautomatyzuje nam sporo ręcznej pracy. Omówimy sobie również narzędzia deweloperskie oraz narzędzia CI/CD z których możemy korzystać podczas rozwoju oprogramowania.
Masz uwagi lub sugestie do tego wpisu?
Przejdź na Discord