Spis treści
- Przetwarzanie w chmurze. Wstęp do AWS
- Modele Cloud Computingu
- Czym jest AWS?
- Usługi Compute
- Usługi Storage
- Usługi Database
- Bezpieczeństwo i identyfikacja
- Integracja z aplikacją
- AZ vs Region
- Zakończenie
Podziel się wpisem ze znajomymi!
Przetwarzanie w chmurze. Wstęp do AWS
Przetwarzanie w chmurze (ang. cloud computing) jest niezwykle dynamicznie rozwijającym się rozwiązaniem, dającym użytkownikom i programistom coraz więcej możliwości i perspektyw. Rozwiązanie to opiera się bowiem na posiadaniu własnej infrastruktury lub zbiorów danych na serwerach Cloud Service. Obecnie prym wiedzie trzech głównych providerów takiej technologii: Google, Amazon i Microsoft.
Po co w ogóle korzystać z CC? Główną zaletą jest przede wszystkim możliwość ograniczenia kosztów i złożoności rozwiązań opartych na infrastrukturze “on premise”, czyli takiej, gdzie użytkownik bazuje na lokalnym sprzęcie i zasobach. Może on bowiem zmigrować wszystko do chmury i od tej pory nie zaprzątać sobie głowy utrzymaniem, konserwacją i skalowaniem lokalnej infrastruktury. Główne korzyści płynące z wykorzystania przetwarzania w chmurze, możemy wyszczególnić w następujących punktach: Niższe koszty utrzymania rozwiązań dzięki braku konieczności instalacji, konfigurowania i pełnego zarządzania on-premisową infrastrukturą.
Łatwiejsze skalowanie i rozwijanie rozwiązań - chmura charakteryzuje się dużą elastycznością, np. możemy łatwo skalować (zarówno horyzontalnie jak i wertykalnie) nasze rozwiązania bez konieczności dogłębnej analizy infrastuktury.
Przykładami głównymi cloud providerów są Google (GCP), Amazon (AWS) oraz Microsoft (Azure). My skupimy się na AWS. Przedstawimy Ci główne zagadnienia związane z domeną omawianej infrastruktury oraz nauczymy deployować i zarządzać własnymi aplikacjami w chmurze.
Modele Cloud Computingu
Możemy wyróżnić kilka modeli przetwarzania w chmurze. Są to głównie:
- On Premise;
- Infrastructure-as-a-Service (IaaS)
- Platform-as-a-Service (PaaS)
- Software-as-a-Service (SaaS)
- Business-Process-as-a-Service (BPaaS)
- Communication-as-a-Service (CaaS)
Głównymi różnicami wynikającymi z wykorzystania jednego rozwiązania nad drugim jest: poziom kontroli, elastyczność, łatwość zarządzania oraz uzależenienie od vendora.
On-Premise
Opcja ta jest świetna w przypadku firm, które chcą mieć pełną kontrolę nad swoimi danymi, a także pełną elastyczność w konfigurowaniu swojej infrastruktury. W ten sposób możliwa jest kontrola nad całym sprzętem, siecią, środowiskiem. Nie bazujemy wówczas na zewnętrznych rozwiązaniach. Rozwiązanie on-premise może być jednak najdroższą opcją, ponieważ utrudniony jest proces skalowania oraz wymagane jest nieustanne utrzymanie naszej infrastruktury. Chcąc ulepszać nasze lokalne rozwiązanie, musimy dokładać kolejne klastry sprzętowe i posiadać specjalistyczną wiedzę w zarządzaniu architekturą.
Podsumowanie:
Elastyczność: Wysoka
Kontrola: Wysoka
Prostota zarządzania: Niska
Ograniczenia dostawcy: Niskie
IaaS (Infrastructure-as-a-Service)
Umożliwia wykorzystanie, np. usług AWS-owych, zamiast wykorzystywania własnych zasobów sprzętowych. Dzięki temu możemy “wynająć” dostęp do VMs (maszyn wirtualnych) lub fizycznych serwerów AWS. I choć nie mamy bezpośrednio dostępu do hardware-u, to często mamy możliwość instalowania i zarządzania własnym OS i aplikacjami uruchomionymi na infrastrukturze.
Podsumowanie:
Elastyczność: Średnia
Kontrola: Średnia
Prostota zarządzania: Średnia
Ograniczenia dostawcy: Średnie
PaaS (Platform-as-a-Service)
Umożliwia nam hostowanie aplikacji, gdzie provider automatycznie zarządza cyklem życia Twojego rozwiązania, z pominięciem zarządzania danymi. Mamy dostarczaną całą infrastrukturę, OS i usługi niezbędne do działania aplikacji. PaaS redukuje do minimum konieczność zarządzania hardware, siecią czy OS. Możemy w pełni skupić się na developmentcie naszej aplikacji i jej skalowaniu przez dodawanie kolejnych zasobów.
PaaS vs IaaS
Zasadniczą różnicą między PaaS a IaaS jest to, iż w przypadku pierwszego rozwiązania, użytkownik otrzymuje dostęp do środowiska dedykowanego tworzeniu i wdrażaniu aplikacji. Nie musi on posiadać wiedzy z zakresu administrowania systemami czy obsługi infrastruktury, ponieważ za te obszary odpowiada dostawca.
Podsumowanie:
Elastyczność: Niska
Kontrola: Niska
Prostota zarządzania: Wysoka
Ograniczenia dostawcy: Wysokie
SaaS (Software-as-a-Service)
To przykład gotowej już aplikacji, do której użytkownik może wykupić dostęp, np. w formie cyklicznie odnawianego abonamentu. Przykładami SaaS jest Google Drive, Spotify, Dropbox. Użytkownik więc może wykorzystywać aplikacje tylko w zakresie udostępnionych przez providera możliwości.
Podsumowanie:
Elastyczność: Bardzo niska
Kontrola: Bardzo niska
Prostota zarządzania: Bardzo wysoka
Blokada dostawcy: Wysoka
BPaaS (Business-Process-as-a-Service)
To rodzaj usługi chmurowej, w której dostawca, stosując narzędzia IT, w formie świadczonej klientowi usługi, przejmuje realizację określonych procesów biznesowych. Przeważnie usługa BPaaS jest dostarczana łącznie z usługami IaaS, PaaS oraz SaaS.
CaaS (Containers-as-a-Service)
Jest to usługa polegająca na udostępnieniu na bazie sieci Internet, platformy komunikacyjnej dla odbiorcy. Może to dotyczyć prostych usług czat lub video-czat, ale także zaawansowanych systemów contact center, takich jak np. SAP BCM (system do zarzadzania bankowością).
Czym jest AWS?
Przejdźmy teraz do kluczowego zagadnienia - omówienie Amazonowej Cloud Infrastruktury - AWS. Udostępnia ona zarówno usługi Iaas oraz PaaS. Korzystając z AWSa, możemy łatwo wynajmować VM-ki lub fizyczne serwery. PaaS (którym jest, np. Elastic Beanstalk) umożliwia nam łatwe zarządzanie aplikacją, bazą danych czy storagem plikowym.
Tak jak już wiesz, dzięki temu możemy znacząco podnieść efektywność pracy naszej organizacji i nie musimy skupiać się nad takimi czynnikami jak organizacja zasobów, utrzymanie oprogramowania.
Infrastruktura AWS bazuje na 4 głównych obszarach, które są połączeniem PaaS oraz IaaS:
- Compute (np. EC2, LightSail, ECS, Lambda, Batch)
- Storage (np. EBS, EFS, S3, Glacier, Storage Gateway, Storage Migration Services)
- Database (np. RDS, Redshift)
- Network (np. CloudFront, VPC, Direct Connect, Load Balancing, Route 53)
Usług jest naprawdę wiele, dlatego nie przerażaj się jej ilością. Każdą z nich omówimy oddzielnie w dalszych częściach szkolenia. Z doświadczenia wiem, że kursanci uczą się najszybciej, działając z wymienionymi usługami w praktyce, dlatego po przedstawieniu Ci suchej teorii, będę chciał pokazać, jak zdeployować własną aplikację połączoną z kilkoma z wymienionych usług (np. RDS, EC2, Elastic Beanstalk).
Dostępne usługi AWS
Compute
EC2: Umożliwia tworzenie/deployowanie własnej wirtualnej maszyny. AWS udostępnia nam szeroki wybór instancji, z których możemy korzystać. Możemy na każdej z nich wybrać dowolny OS, ilość przydzielonego RAMu czy rodzaj CPU.
Przykładowymi AMIs (Amazon Machine Images), na których może bazować będzie tworzona instancja EC2 to: Amazon Linux 2 AMI, macOS Big Sur, macOS Catalina, Microsoft Windows Server i wiele więcej.
ECS: Wykorzystywany, aby móc uruchamiać i zarządzać Dockerowymi kontenerami. Usługę tę możesz sobie wyobrażać jak Kubernetesowy serwis.
Light Sail (VPS Service – Virtual Private service): Umożliwia uruchamianie prywatnych wirtualnych serwerów, które są VM-kami z indywidualnymi systemami operacyjnymi, ale ograniczonym dostępem do fizycznych zasobów.
Lambda: To usługa, gdzie uploadujesz swoją funkcję na AWS i płacisz za każdym razem, gdy taka funkcja jest wykonywana czy też wywoływana. Dzięki temu nie musimy zarządzać OS czy VM. Lambda realizuje to samoczynnie. W związku z powyższym, jest to usługa serverlessowa.
Przykładowo:
Wyobraź sobie aplikację pełniącą rolę kalkulatora podatków. W tradycyjnym modelu, napisałbyś kod, które zdeployowałbyś na wirtualnej maszynie. Następnie musiałbym zarządzać i utrzymywać takie rozwiązanie. Z wykorzystaniem Lambda nie musisz płacić ani zarządzać uruchomioną VM. AWS robi to za Ciebie, a Ty płacisz jedynie “za efekt”, czyli za to, ile razy wykorzystałeś w praktyce swoje rozwiązanie.
Batch: Batch wykorzystywany jest do Batch processingu.
Batch processing to przetwarzanie wielu operacji (transakcji) w tym samym czasie. Takie podejście sprawdza się przy pracy z dużą ilością danych i potrzebie ich efektywnego processowania (przykładowo podczas konieczności stworzenia raportu z miliona różnych transakcji internetowych danego serwisu).
AWS Batch dynamicznie przydziela optymalną ilość i typ zasobów (np. pamięć dla instancji), bazując na specyficznych wymaganiach dla batch jobów. Usługa ta zarządza również “batch przetwarzaniem” - automatycznym restartowanie i schedulowanie jobów, przez co nie musimy ręcznie zarządzać wykonywanymi operacjami.
Storage
Simple Storage Service (S3) - to internetowy nośnik danych, ma prosty w obsłudze interfejs WWW, który umożliwia dostęp do przechowywanych danych i zarządzanie nimi. Ilość możliwych do umieszczenia na nim danych jest praktycznie nielimitowana.
Network Attached Storage (EFS): To system plików, który umożliwia uploadowanie plików i mountowanie ich na wielu wirtualnych maszynach.
Glacier: Serwis storage-owy używany do archiwizacji danych. Wykorzystywany głównie do przechowywania danych, z których nie chcemy korzystać w danym momencie. Koszty wykorzystania Glacier są stosunkowo niskie. Przykładowo, koszt przechowywania danych w Glacier to $0.01 na GB, miesięcznie.
Snow Ball: Wykorzystywany, aby transportować ogromne ilości danych na AWS-a lub pobierać je na własny data center.
AWS dostarcza hardware, który możesz połączyć ze swoim data center i następnie uploadować enkryptowane informacje do snowballa (AWS-owe urządzenie). Następnie shipujemy takie urządzenie do AWSa i bezpośrednio uploadujemy dane. Dzięki temu nie musimy wysyłać danych przez internet, co może zająć miesiące przy wysyłaniu petabajtów informacji.
Storage Gateway: Usługa wykorzystywana, kiedy mamy on-premise-owy data-center i naszym celem jest replikacja informacji na AWS. W momencie, gdy mamy skonfigurowany Storage Gateway, możemy łatwo replikować S3 na AWS.
Database
Relational Database Service (RDS): Usługa ta daje nam dostęp do wielu silników bazodanowych jak: Amazon Aurora, MySQL, PostgreSQL, MariaDB, Oracle czy SQL Server. Oznacza to, że możemy łatwo przenosić konfigurację lokalną aplikacji (połączenie z bazą danych) do chmury.
RDS automatycznie patchuje oprogramowanie z bazą danych, tworzy back-upy i umożliwia łatwe recovery na wypadek awarii.
Aurora jest AWS-ową relacyjną bazą danych, która jest kompatybilna z MySQL i PostgreSQL.
DynamoDB serwis obsługujący nierelacyjne bazy danych. Automatycznie zarządzany, wspiera struktury klucz-wartość (np. Redis) oraz dokumentowe struktury danych (np. MongoDB).
ElasticCache oferuje w pełni zarządzalny Redis oraz Memcached. Daje możliwość łatwego deployowania, tworzenia i skalowania popularnych open source-owych, tzw. in-memory data stores.
Tego typu bazy danych umożliwiają przeprowadzanie nowoczesnego i efektywnego data managementu, gdzie dane przechowujemy głównie w pamięci RAM (w przeciwieństwie do standardowego rozwiązania, gdzie informacje przechowywane są na dyskach czy też innych device storage-ach).
Bezpieczeństwo i identyfikacja
Powyżej omówiliśmy z grubsza, jakie wyróżniamy usługi z zakresu Compute/Storage/Database. Teraz nadeszła pora na zapoznanie się z głównymi pojęciami dotyczącymi bezpieczeństwa i identyfikacji AWS-owych użytkowników.
Nie chcę zanudzać Cię kolejną suchą teorią, dlatego omówię najważniejsze zagadnienia związane z tak rozpoczętą sekcją, a pozostałe pojęcia jedynie zahighlightuję.
IAM (Identity and Access Management): umożliwia zarządzanie użytkownikami i ich poziomami dostępowymi z poziomu AWS.
Cognito: używany do autoryzacji urządzeń / serwisów OAuth. Umożliwia użytkownikom chwilowy dostęp do AWS-owych zasobów. Aby lepiej to zobrazować - wyobraź sobie, że masz do dyspozycji aplikację, która ma umożliwiać użytkownikowi uploadowanie zdjęć na S3 (np. podczas edytowania swojego profilu na bloga). Możesz to realizować właśnie przy użyciu Cognito.
Guard Duty: służy do monitorowania podejrzanej aktywności na koncie AWS.
Pozostałymi, równie ważnymi usługami w kontekście AWS security są:
- Inspector
- Macie
- Certificate Manager
- Cloud HSMHardware Security Module
- Directory Services
- WAF
- Shield:
- Advance Shield
- Artifact
Integracja z aplikacją
To nie wszystko w kontekście usług i fundamentalnych pojęć związanych z AWS. Powinniśmy również poznać takie hasła jak:
Step function: to workflow serwis (czyli taki, który porzadkuje wykonanie różnych procesów) umożliwiający łatwe zarządzanie pozostałymi serwisami, automatyzację procesów biznesowych i budowanie serverlessowych procesów. Dzięki takim workflow, mamy umożliwione łatwe zarządzanie błędami, re-połączeniami, zrównolegleniem.
Amazon MQ: to jeden z dostępnym message brokerów. Umożliwia łatwe tworzenie i konfigurowanie brokera w chmurze.
Message brokers mogą umożliwiać systemom używanie różnych języków programowania czy łatwą komunikację i wymianę danych między różnymi platformami czy aplikacjami.
Jeżeli zastanawiasz się, kiedy mógłbyś wykorzystać własnego brokera - wyobraź sobie program, który odpowiada za eksportowanie złożonych requestów (np. wysyłanie obrazów multimedialnych) na serwer API. Problemem takiego rozwiązania jest fakt, iż wysyłanie tego typów payloadów jest bardzo czasochłonne (ze względu na ich niemał rozmiar). Użytkownik po wysłaniu danego requestu, będzie więc zmuszony oczekiwać pewien okres czasu, zanim zostanie zwrócony rezultat (zacznie to być nie lada problemem w momencie, gdy user będzie chciał wysłać wiele różnych pakietów informacji na serwer, jeden po drugim).
W takiej sytuacji, możemy wprowadzić message brokera, który będzie kolejkował dane requesty i w ten sposób mógł przetwarzać je asynchronicznie. W ten sposób możemy znacząco poprawić wydajność działania naszej aplikacji.
SNS (Simple Notification Service): Dostarcza niskokosztową infrastruktruę dla masowego dostarczania wiadomości kierowanych mobilnych użytkowników (możemy przykładowo wysyłać wiadomości SMS do użytkowników z ponad 200 krajów, wysyłać wiadomości email z użyciem SMTP).
SQS (Simple Queue Service): Serwis kolejkujący, umożliwia łatwe skalowanie i rozdzielanie zależności między mikroserwisami czy serverlessowymi rozwiązaniami.
Korzystając z SQS, możemy wysyłać, przechowywać i odbierać wiadomości między komponentami aplikacji bez ryzyka utraty żadnej z wiadomości (np. w wyniku błędu) czy konieczności oczekiwania aż wszystkie z serwisów będą w pełni działające.
SWF (Simple Workflow Service): wykorzystywany do triggerowania odpowiedniego workflow. Wyobraź sobie, że musisz wytworzyć złożony raport, który będzie konieczny do zatwierdzenia przez wielu członków z Twojego zespołu.
Aby efektywnie handlować ten problem w swojej aplikacji, możemy stworzyć workflow, który będzie uruchamiany po uploadowaniu raportu i będzie on śledził, czy został zatwierdzony przez odpowiednią ilość osób.
Availability Zone vs Region
I na zakończenie - jeszcze jedno, kluczowe zagadnienie. Mianowicie - Availability Zones (AZ) oraz Regions. Czyli wyjaśnienie, jakie kryje się przesłanie za każdym z tych pojęć oraz jakie niesie ze sobą konsekwencje ich wykorzystywanie.
Usługa AWS rozproszona jest wokół 80 stref dostępności (Availability Zones) w obrębie 25 geograficznych regionów.
Region to geograficznie wydzielony obszar, np. zachodnie wybrzeże USA.
Availability Zones to natomiast centra danych w obszarze regionu. Każde z nich jest niezależne od siebie, ale takie strefy mogą bez problemu się ze sobą komunikować (zakładając, że znajdują się w obrębie tej samej VPC).
Dlatego też, projektując złożone rozwiązania, powinniśmy zadbać o to, aby nasza aplikacja uruchamiana było na kilku AZ. A to dlatego, że jeżeli jedna z Zones ulegnie awarii, inne będą wciąż działały, a nasza aplikacja wraz z danymi nie ulegnie całkowitej awarii (wprowadzamy przez to High Availability oraz Continuous Delivery do naszego rozwiązania).
Źródło: DigitalCloud
Zakończenie
To tyle, jeśli chodzi o podstawowe informacje o cloud computingu, AWS i jego usługach. Zaznajomienie się z powyższymi aspektami jest niezbędne do tego, abyś mógł skutecznie i w pełni świadomie poznawać kolejne zagadnienia związane z przetwarzaniem chmurowym i deployowaniem własnej aplikacji na AWS.
Rozpocznij pracę ze swoim mentorem, aby projektować i deployować własne złożone rozwiązania z wykorzystaniem AWS.