Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

AWS

Uwagi ogólne

Chmura Amazona (Amazon Web Services, AWS) jest typu IaaS. Własne konto zakładamy na stronie aws.amazon.com. Uwaga: Konto Amazon Web Services może, ale nie musi być związane z kontem Amazona na którym kupujemy książki — można i zaleca się utworzyć zupełnie nowe na potrzeby AWS.

Dane które trzeba podać to adres email (na który przyjdzie prośba o zatwierdzenie rejestracji poprzez kliknięcie w link), numer telefonu (na który przyjdzie sms z kodem do wpisania w przeglądarce) oraz numer karty kredytowej.

Przez rok po założeniu konta obowiązują darmowe limity pozwalające bezpłatnie zapoznać się z podstawowymi usługami, w szczególności można mieć przez cały rok za darmo uruchomioną najtańszą maszynę wirtualną.

Wybierając usługę Amazonu zwykle określamy region w którym ona ma fizycznie działać (USA, Brazylia, Azja, Europa), różnice cen między regionami zwykle wahają się w okolicach 10%. Każdy region jest podzielony na osobno zasilane i rozrzucone geograficznie strefy dostępności (ang. availability zones, AZ). Niektóre usługi (np. EBS – dysk sieciowy, patrz niżej, czy instancja EC2 – maszyna wirtualna) wymagają podania również strefy dostępności. Amazon ma dedykowane, szybkie połączenia sieciowe między strefami dostępności w obrębie tego samego regionu. W 2014 roku chmura Amazona liczyła sobie 1,4 mln serwerów w 11 regionach i 28 strefach dostępności.

Przesyłanie danych między instancjami w obrębie regionu jest bezpłatne, pomiędzy regionami tanie ($0.02 za każdy GB), natomiast jeśli chodzi o komunikację instancji AWS ze światem zewnętrznym to transfer do instancji (inbound) jest bezpłatny, a z instancji na zewnątrz (outbound) kosztuje $0.09 za GB, przy czym pierwszy GB jest za darmo, a przy przesyłaniu dużych ilości (10TB miesięcznie i więcej) można liczyć na zniżki. Ceny spadają: kilka lat temu komunikacja między regionami kosztowała tak jak komunikacja ze światem zewnętrznym, a transfer outbound na zewnątrz kosztował $0.12. [Cennik]

Sklep Amazona sam korzysta z chmury — w 2010 roku wszystkie usługi webowe sklepu zostały przeniesione do AWS.

Z AWS korzystają m.in.: NASA, CIA, Netflix, Dropbox, Pinterest, Reddit, NASDAQ (aplikacja FINQLOUD).

Storage

Propozycje Amazonu w zakresie przechowywania danych:

  • Instance storage: w wynajętej maszynie wirtualnej może być podłączony dysk SSD lub HDD o żądanej pojemności, np. instancja typu c3.8xlarge ma 2 dyski SSD po 320 GB każdy
  • Elastic Block Storage (EBS) [Cennik]: odpowiednik NASa, czyli dysk sieciowy z dostępem takim samym jak dysk lokalny; jego standardowa wydajność jest słaba i wynosi ok. 100 IOPS (I/O operations per second), ale można zażyczyć sobie opcję Provisioned IOPS pozwalającą zwiększyć wydajność nawet 40-krotnie poprzez zarezerwowanie przepustowości sieci w obrębie strefy dostępności, co oczywiście dodatkowo kosztuje.
    Inne cechy EBS:
    • rozmiar jednego wolumenu waha się między 1GB a 1TB; na jednym koncie AWS można mieć max. 20 wolumentów EBS
    • cykl życia wolumenu EBS jest niezależny od instancji EC2 — można go przepinać między różnymi maszynami wirtualnymi,
    • funkcjonalność migawek (ang. snapshots) pozwala wykonać (spakowaną) migawkę zawartości dysku w postaci obiektu S3 (patrz dalej) a kolejne migawki mogą być przyrostowe (uwzględniają tylko zmiany od poprzedniej migawki); nowy wolumen EBS można wypełnić migawką,
    • Amazon twierdzi że każdy wolumin EBS jest duplikowany dla uchronienia się przed awarią dysku
  • Simple Storage Service (S3) [Cennik]: bodaj najpopularniejsza usługa Amazonu, mówi się o niej że jest magazynem Internetu (ang. the filing cabinet of the Internet), bazują na niej firmy takie jak Dropbox, Netflix czy Medcommons (ta ostatnia przechowuje w chmurze dane medyczne pacjentów). Szacuje się że 25% dużych aplikacji enterprise korzysta z S3. W ciągu ostatnich 2 lat ceny przechowywania 1 GB spadły 3-krotnie.
    • każdy obiekt ma swój klucz (łańcuch) i wartość (ciąg bajtów o wielkości od 1B do 5TB),
    • obiekty są przechowywane w wiadrach (ang. bucket, odpowiednik tabeli), jedno konto AWS może mieć max. 100 wiader; wiadro jest umiejscowione w konkretnym regionie
    • każdy obiekt S3 ma swojego URLa postaci http://s3.amazonaws.com/bucket/key, np. http://s3-us-west-1.amazonaws.com/aws4dummies/Cat+Photo.JPG i jest dostępny poprzez interfejs REST (czyli np. z przeglądarki internetowej, curl-em, itp.) o ile nadamy mu odpowiednie uprawnienia,
    • nie obsługuje modyfikacji, np. poprzez dołączenie czegoś na końcu; można tylko nadpisać obiekt nowym obiektem (można włączyć wersjonowanie, czyli dostęp do poprzednich wersji obiektu) – jest to bardzo duża różnica w porównaniu z plikiem w typowym systemie plików,
    • uprawnienia mają postać listy ACL określającej kto może wykonywać jakie operacje, klasy użytkowników to: właściciel, wskazani użytkownicy lub grupy, autoryzowani użytkownicy AWS, każdy.
    • obiekt może mieć datę ważności, po upływie której jest usuwany (stosowane np. przy wypożyczaniu filmów na określony czas), lub przenoszony do archiwum (usługa Glacier, patrz niżej),
    • obiekty mogą być szyfrowane,
    • można logować dostęp do obiektów,
    • w celu zapobiegania awariom i zwiększenia dostępności każdy obiekt jest duplikowany na kilku maszynach; można zrezygnować z tej możliwości aby zmniejszyć koszty usługi.
  • DynamoDB [Cennik]: NoSQLowa baza typu key-value, odpowiednik opisanej wcześniej na blogu bazy danych Riak; korzysta z dysków SSD, dane są duplikowane w różnych strefach dostępności regionu; dostęp jest poprzez REST, lub z poziomu języków Java, .NET, Python i PHP.
  • Glacier [Cennik]: usługa backupu oparta na S3; pojedynczy plik archiwum może mieć do 40TB, dane są szyfrowane i przesyłane po SSL; zamiast wysyłać zawartość dysku po sieci, można pocztą zwykłą wysłać do Amazona fizyczny dysk – jego zawartość zostanie wrzucona do Glaciera przez pracownika Amazonu.
  • RDS [Cennik]: relacyjna baza danych (Oracle, MySQL, PostgreSQL, SQL Server, Aurora),
  • EFS (w przygotowaniu):
    • implementuje protokół NFS4,
    • w przeciwieństwie do dysku sieciowego (EBS) można podłączać jedną usługę EFS jednocześnie do wielu naraz działających instancji EC2,
    • automatycznie się skaluje (nie określamy wielkości potrzebnego miejsca), płacimy za faktycznie zużywane miejsce na dysku.

Zwraca się uwagę, że usługi przechowywania danych oferowane przez Amazona: DynamoDB a zwłaszcza sztandarowa S3, są świetnie przystosowane do ery BigData: nie trzeba deklarować ani rezerwować wymaganej przestrzeni dyskowej ponieważ ten sposób przechowywania danych jest wybitnie skalowalny i nie ogranicza się do pojedynczej maszyny. Redundancja w celu zapewnienia odporności na awarie pozwala nie martwić się o backupy.

Powstaje pytanie czym różni się w praktyce usługa S3 od DynamoDB. Odpowiedź na to pytanie znajdziemy w DynamoDB FAQ:

Q: When should I use Amazon DynamoDB vs Amazon S3?

A: Amazon DynamoDB stores structured data, indexed by primary key, and allows low latency read and write access to items ranging from 1 byte up to 400KB. Amazon S3 stores unstructured blobs and suited for storing large objects up to 5 TB. In order to optimize your costs across AWS services, large objects or infrequently accessed data sets should be stored in Amazon S3, while smaller data elements or file pointers (possibly to Amazon S3 objects) are best saved in Amazon DynamoDB.

Instancje (EC2)

Obrazy (Amazon Machine Image, AMI) systemów operacyjnych (Linux, Windows) mogą pochodzić z kilku źródeł: publiczne, własne, komercyjne (z AWS Marketplace). Każde AMI ma swój unikalny ID, opis (np. system operacyjny, zainstalowane komponenty), właściciela i uprawnienia (kto może skorzystać z obrazu). Z konsoli administracyjnej w przeglądarce możemy łatwo wykonać obraz AMI na zatrzymanej instancji przy pomocy menu kontekstowego.

Instancję po odpaleniu (ang. launch) można wstrzymywać (ang. stop) i wznawiać (ang. start). Wstrzymana instancja zachowuje swój stan i nie generuje kosztów takich jak chodząca instancja. Instancję można wstrzymać i wznowić na mocniejszym sprzęcie. Instancję w końcu można zamknąć (ang. terminate). Zamknięta instancja traci swój stan i dane wygenerowane podczas działania, o ile nie zostały zapisane np. na woluminie EBS czy magazynie S3. Każda instancja ma zarówno publiczny, jak i prywatny (widoczny wyłącznie w obrębie sieci AWS) adres IP i nazwy domenowe.

Domyślnie można uruchomić tylko 20 instancji na jednym koncie AWS, ale to ograniczenie jest tylko po to aby przez pomyłkę nie wygenerować sobie za dużo kosztów. Łatwo zwiększyć ten limit kontaktując się z personelem Amazonu.

Nie wszystkie rodzaje instancji są dostępne we wszystkich regionach. Zwykle nowe rodzaje instancji są uruchamiane w regionie US-East, a w pozostałych regionach sukcesywnie, z paromiesięcznym opóźnieniem.

Opłaty

W ciągu ostatnich paru lat ceny za godzinę pracy instancji znacząco spadły i są to obniżki rzędu 40%.

Ponieważ zagadnienia związane z opłatami są dość skomplikowane, ktoś się zirytował na tyle że stworzył witrynę ec2.instances.info prezentującą dostępne opcje w bardziej przejrzysty sposób.

Zasadniczo są trzy rodzaje płatności za działające instancje:

  • On-demand instances: jest to opłata za każdą kolejną rozpoczętą godzinę pracy.
  • Reserved instances. Rezerwuje się instancję na rok lub na 3 lata wpłacając pewną kwotę, a następnie w tym okresie koszt godziny pracy instancji jest znacząco niższy w porównaniu z opcją on-demand (np. o 60%). Jest to sensowna opcja dla np. chodzącego 24 godziny na dobę serwera witryny WWW firmy. Szacuje się, że opłaca się zarezerwować instancję jeśli będzie się jej używało przynajmniej 8 godzin na dobę. W sytuacji gdy zarezerwowana instancja przestaje być nam potrzebna przed upływem terminu rezerwacji (bo np. decydujemy się przenieść na mocniejszy sprzęt), możemy sprzedać rezerwację na Amazon EC2 Reserved Instance Marketplace
  • Spot-priced instances. Czas pracy instancji możemy nabyć na aukcji, za cenę znacznie (50-60%) niższą niż w opcji on-demand. Oferujemy określoną kwotę, np. 2 centy za godzinę, i jeśli aktualna cena godziny na aukcji (tzw. spot-price) jest niższa lub równa to dostajemy zasoby (uwaga: płacimy za godzinę wartość spot-price, a nie oferowaną!). Jeśli w trakcie pracy naszych instancji oferowana przez nas cena okaże się zbyt niska, instancje są nam zabierane (zamykane, ang. terminate). Dość typowe jest mieszanie instancji typu reserved i spot-priced w jednej aplikacji rozproszonej — instancje spot-priced są wtedy uruchamiane doraźnie aby nadrobić zaległości (tak np. działa serwis Pinterest). Szacuje się, że w praktyce tylko 4% instancji typu spot-priced jest wywłaszczanych w ciągu swego życia.

Sieć

W wielu centrach danych oferujących usługi chmurowe dla każdego klienta wydziela się wirtualną sieć (Virtual LAN, VLAN), aby odseparować go od innych klientów. Amazon, co jest nieraz krytykowane, nie robi tego — jego sieć jest płaska, a adres IP nie zawiera żadnych danych „hierarchicznych”. Każda instancja po uruchomieniu (launch) otrzymuje dwa losowo wybrane IP z puli dostępnych w danym centrum: prywatne 10.X.X.X (widoczne w regionie) i publiczne (widoczne z zewnątrz). Po wyłączeniu instancji (terminate) IP wraca do puli i po ponownym uruchomieniu dostaje (praktycznie na pewno) inne IP. Ma to oczywiście swoje wady, bo utrudnia „odnalezienie się” różnych instancji rozproszonej aplikacji, a także serwera aplikacji przez klientów z zewnątrz. Aby ten problem rozwiązać, Amazon oferuje usługę Elastic IP: jest to publiczne IP przywiązane do użytkownika, a użytkownik może je skojarzyć ze wskazaną instancją — w rezultacie za każdym razem gdy instancja będzie uruchamiana będzie miała to samo publiczne IP. Jeden użytkownik domyślnie ma ograniczenie na maksymalnie 5 elastycznych IP na region (można negocjować więcej). Intrygujący jest sposób płacenia za usługę Elastic IP: kosztuje $0 gdy IP jest skojarzone z działającą instancją, i $0.005 za każdą godzinę nieużywania, co ma motywować do rezygnacji z usługi aby nie zużywać adresów IP ze skończonej puli jaką dysponuje Amazon.

Każda instancja, oprócz prywatnego i publicznego IP przydzielanego w chwili uruchomienia, ma również inne parametry (dla odmiany przeżywające restart), takie jak swój identyfikator (instance ID) czy dane użytkownika (dowolny tekst lub plik o wielkości do 16KB). Po uruchomieniu, instancja może poznać swoje środowisko wykonując polecenie HTTP GET na adresie 169.254.169.254. W przypadku dużych rozproszonych aplikacji może istnieć potrzeba zautomatyzowanej konfiguracji — warto do tego celu wykorzystać oferowaną przez Amazon NoSQLową bazę danych typu klucz-wartość: DynamoDB.

Inny problem wynikający z organizacji sieci w chmurach Amazonu polega na tym, że w standardowym przypadku przepustowość sieci lokalnej (między instancjami w strefie dostępności, jest to zwykle sieć 1Gbps) zależy od aktywności innych użytkowników. Praktyka pokazuje że średnio można liczyć na przepustowość rzędu 100 Mbps, ale okresowo może ona spadać nawet 10-krotnie. Jeśli komuś zależy na wyższej przepustowości, powinien wybrać odpowiedni typ instancji: High I/O, Cluster Compute lub Cluster GPU, które pracują w sieci 10 Gbps.

Bezpieczeństwo

Granica zaufania (ang. trust boundary) rozdziela obszar odpowiedzialności za bezpieczeństwo między użytkownika chmury i dostawcę usług chmurowych. W chmurze Amazona obszar odpowiedzialności dostawcy obejmuje warstwę fizyczną do hypervisora zajmującego się zarządzaniem maszynami wirtualnymi (włącznie). W praktyce należy jeszcze wspomnieć o oferowanych przez Amazona obrazach systemów operacyjnych — one również muszą być kontrolowane przez Amazona pod kątem bezpiecznego oprogramowania.

Użytkownik AWS sam odpowiada za bezpieczeństwo działających na jego instancjach aplikacji i może to robić wyłącznie na poziomie oprogramowania — nie może np. wpływać na architekturę sieci poprzez żądanie wpięcia własnych urządzeń sieciowych w centrach danych Amazona.

Podstawowy mechanizm zabezpieczeń sieciowych AWS opiera się o pojęcie grup zabezpieczeń (ang. security groups), które implementują prosty firewall. Każda instancja użytkownika należy do wskazanej grupy zabezpieczeń, użytkownik może zdefiniować maksymalnie 500 grup (nie wiąże się to z żadnym kosztem). Grupa zawiera reguły (maksymalnie 100), a każda reguła określa:

  • protokół którego dotyczy (TCP, UDP, ICMP),
  • skąd może przychodzić ruch (wszyscy, zakres IP, pojedyncze IP, inne instancje będące członkami wskazanej grupy),
  • na jaki zakres portów docelowych.

Uwaga: grupy zabezpieczeń pozwalają definiować reguły wyłącznie dla ruchu wchodzącego do instancji (ang. inbound), ruch wychodzący jest zawsze dozwolony.

Definiowanie grup, reguł i przydzielanie grup do instancji najwygodniej realizuje się poprzez AWS Management Console z poziomu przeglądarki. Domyślnie użytkownik posiada tylko jedną grupę (o nazwie default), która blokuje cały ruch wchodzący. Zaleca się utworzyć własne grupy zabezpieczeń zamiast modyfikować grupę default.

Można modyfikować reguły grup w trakcie działania instancji i znajdzie to swoje niemal natychmiastowe odzwierciedlenie w działaniu firewalla, natomiast dla działającej instancji nie można zmienić na inną grupy zabezpieczeń. Zasięg grupy zabezpieczeń obejmuje pojedynczy region.

Zaleca się, aby na każdej instancji instalować oprogramowanie HIDS (ang. Host-based Intrusion Detection Software).

Virtual Private Cloud (VPC)

Usługa VPC — wprowadzona przez Amazona w 2013 roku — pozwala organizować instancje w wirtualne sieci, logicznie oddzielone od pozostałej infrastruktury AWS (w tym instancji innych użytkowników), potencjalnie również zintegrowane z siecią firmową w siedzibie klienta poprzez VPN. Dostęp do Internetu, siedziby klienta, ale także usług Amazonu takich jak S3, jest kontrolowany za pomocą wyróżnionej instancji (bramy sieciowej, ang. gateway) z konfigurowalnymi regułami dostępu. Typowe jest utworzenie w chmurze Amazonu w ramach jednego konta użytkownika dwóch podsieci: publicznej zawierającej serwery WWW z ElasticIP i wyjściem na świat, i niedostępnej z zewnątrz (ukrytej za NAT-em) podsieci prywatnej z serwerami bazodanowymi.

W odróżnieniu od omówionych wcześniej reguł bezpieczeństwa, reguły zabezpieczające dostęp do instancji w VPC mogą kontrolować nie tylko ruch inbound, ale także outbound. Jedna instancja VPC, w odróżnieniu od klasycznej instancji EC2, może mieć wiele wirtualnych interfejsów sieciowych, a co za tym idzie wiele publicznych IP (ElasticIP) – każdy interfejs może być obsługiwany przez inne reguły.

VPC jest usługą bezpłatną i, jak większość usług Amazona, ma zasięg regionu (nie można zrobić jednej sieci VPC rozpiętej na instancjach zarówno w US jak i w Australii).

Core services

Najważniejsze usługi Amazona to te omówione do tej pory: EC2 (instancje), S3 (rozproszony zbiór plików), EBS (dysk sieciowy) i Glacier (backupy). Poniżej omawiane są usługi niskiego poziomu, mają one głównie na celu wyręczyć programistów z konieczności implementowania ich samemu (np. load balancer do równomiernego obciążania serwerów ruchem sieciowym) i administratorów z potrzeby doglądania.

Trzy istotne uwagi dotyczące większości usług Amazonu:

  • nie trzeba z nich korzystać (jest to duża różnica w porównaniu z chmurami typu PaaS),
  • jeśli korzystamy to pamiętajmy że utrudniają ewentualną przyszłą migrację naszych aplikacji do chmury innego dostawcy (zjawisko znane jako uzależnienie od dostawcy, ang. lock-in),
  • dobrze integrują się między sobą, bo pochodzą od tego samego producenta (Amazon).

Usługi są dostępne przez API. Początkowo Amazon preferował protokół SOAP, ale od jakiegoś czasu porzuca go na rzecz HTTP i REST. Praktycznie wszystkie operacje można wykonać z wiersza poleceń (Linux Bash, Windows Power Shell), z całej plejady języków programowania, a większość także z poziomu portalu użytkownika AWS w przeglądarce.

Identity and Access Management (IAM) [Darmowy|Dokumentacja]

Usługa ta jest ukłonem w stronę firm typu enterprise, w których z zasobów jednego konta AWS korzysta wiele osób o różnych uprawnieniach. IAM pozwala tworzyć użytkowników z własnymi hasłami/kluczami SSH i prawami dostępu ograniczonymi do wskazanych zasobów. Użytkowników można także grupować i przydzielać uprawnienia dla grup. IAM umożliwia również zarządzanie uprawnieniami dostępu z i do innych kont AWS.

Elastic Load Balancer (ELB) [Cennik|Dokumentacja]

W wyniku utworzenia ELB użytkownik dostaje nazwę DNS, np. LB1-26746260.us-east-1.elb.amazonaws.com. Ruch skierowany na tą domenę będzie równomiernie rozłożony między wszystkie instancje zarejestrowane w ELB.

Inne cechy ELB:

  • obsługuje SSL,
  • może obsługiwać wiele stref zarządzania (AZ) — wtedy zakłada się że w każdej obsługiwanej strefie jest tyle samo instancji,
  • można włączyć lepkie sesje, tzn. wszystkie zlecenia sesji użytkownika będą realizowane przez tą instancję która przyjęła pierwsze zlecenie nowej sesji,
  • pozwala na autoskalowanie — jest to mechanizm który obserwuje obciążenie i w miarę potrzeby uruchamia nowe instancje i rejestruje je w ELB, lub odwrotnie

Eksperci twierdzą, że nieprawidłowo skonfigurowane balansowanie obciążenia jest główną przyczyną powstawania wąskich gardeł.

Za ELB płaci się od godziny używania ($.025-$.034 w zależności od regionu) oraz za każdy przetworzony GB ($.008-$.011).

Route 53 [Cennik|Dokumentacja]

Jest to nazwa dla globalnej (a nie ograniczonej do regionu jak w przypadku większości pozostałych usług) rozproszonej usługi DNS. Dlaczego ktoś miałby chcieć korzystać z DNS akurat u Amazona zamiast u lokalnego dostawcy? Bo w przypadku popularnych witryn generujących duży ruch skalowalność DNS jest problemem, a w przypadku witryn obsługujących internautów na całym świecie dobrze żeby serwery nazw znajdowały się możliwie blisko klientów zadających zapytania DNS (ang. latency-based routing).

Koszt to $.50 za pierwsze milion zapytań w miesiącu i $.25 za każdy kolejny milion.

CloudFront [Cennik|Dokumentacja]

Jeśli dla generujących duży ruch aplikacji webowych/mobilnych problemem może być skalowanie DNS, to tym bardziej problemem jest serwowanie statycznych plików takich jak obrazki czy strumieniowane filmy. Można więc sobie wyobrazić że witryna będzie sama obsługiwała wszelkie akcje wymagające dostępu do bazy danych, ale serwowanie statycznych zasobów powierzy innemu dostawcy posiadającemu szybkie łącze i serwery rozsiane na całym świecie, czyli jak najbliżej klienta.

Tradycyjnie usługi takie znane były pod nazwą CDN (ang. Content Delivery Network), były kosztowne i dostępne tylko dla dużych firm które musiały podpisywać umowy terminowe. Amazon z usługą CloudFront cokolwiek zdemokratyzował ten segment i uczynił bardziej przystępnym.

Inne cechy usługi:

  • dostęp może być ograniczony do wskazanych IP,
  • udostępniane pliki mogą mieć okres ważności po którym stają się nieosiągalne (np. na czas trwania akcji reklamowej), lub wymagają sprawdzenia w oryginalnej lokalizacji czy się nie zmieniły,
  • dostęp może być logowany,
  • pliki mogą być serwowane z S3 lub EC2.

W wyniku aktywacji usługi dostajemy nazwę domenową w rodzaju d111111abcdef8.cloudfront.net. Teraz możemy serwować obrazki na swojej stronie z ustawionym URLem postaci http://d111111abcdef8.cloudfront.net/catimage.jpg, a użytkownik dostanie obrazek z najbliższego serwera Amazonu.

Podobnie jak Route 53, CloudFront jest usługą globalną. Zauważmy, że można korzystać z usługi Route 53 czy CloudFront bez wynajmowania instancji (EC2). Koszt za pierwszych 10TB transferu sieciowego za miesiąc waha się $.085 do $.25 w zależności od regionu, a dodatkowo za każde 10 tys. pobrań $.0075-$.016. Można zredukować koszt ograniczając zasięg usługi tylko do wskazanych regionów.

Relational Database Service (RDS) [Cennik|Dokumentacja]

Jest to usługa, która obudowuje znane wszystkim relacyjne bazy danych takie jak MySQL, Oracle czy PostgreSQL. W ramach usługi Amazon uruchamia instancję przeznaczoną na bazę danych, instaluje na niej bazę i udostępnia namiary (host/port) pozwalające naszej aplikacji komunikować się z bazą. Koszt działania takiej instancji jest wyższy o ok. 30% niż zwykłej instancji, a w zamian Amazon oferuje:

  • uaktualnianie (i patchowanie) oprogramowania bazy danych,
  • wykonywanie backupów zgodnie ze wskazanym harmonogramem,
  • możliwość bezkonfliktowego zwiększenia ilości wymaganej przez bazę przestrzeni dyskowej,
  • łatwą konfigurację klastra master/slave.

W przypadku Oracla wybieramy wersję w zależności od tego czy posiadamy własną licencję (tańsza opcja), czy nie (droższa opcja).

Podobnie jak w przypadku zwykłych instancji EC2, instancje RDS mogą być nie tylko on-demand, ale także reserved (nie mogą być spot-price). Opłaty są także za zużywaną przestrzeń dyskową (standardowe, wynikające z usługi EBS) i ruch sieciowy (standardowe).

ElastiCache [Cennik|Dokumentacja]

Jest to obudowane przez Amazona opensource’owe oprogramowanie Memcached do obsługi cache’a pamięci podręcznej dla baz danych, szeroko używane przez takie witryny jak Wikipedia, Twitter, Flickr czy Craiglist. Typowe zastosowanie to np. cacheowanie pierwszej strony bloga tak aby wejście na stronę główną bloga było bardzo szybkie. Amazon pozwala aby cache rozciągał się na więcej niż jedną instancję. Koszt jest zależny od typu instancji EC2 (im większa pamięć RAM, tym droższy).

Platform services

Platform services to usługi rozszerzające możliwości aplikacji. Są to usługi charakterystyczne dla chmur typu PaaS (np. Windows Azure, Google App Engine) i uzależniające od dostawcy bardziej niż usługi omawiane wcześniej.

CloudSearch [Cennik|Dokumentacja]

Usługa jest oparta na technologii którą Amazon rozwinął w ramach swojego sklepu internetowego. Początkowo skupiała się na wyszukiwaniu tekstowym, ale ostatnio zajmuje się także wyszukiwaniem obrazków i w sieciach społecznościowych.

Do bazy CloudSearch należy wrzucić dane w formacie SDF (ang. Search Data Format) — jest to XML lub JSON w którym każdy rekord jest zbiorem par klucz-wartość opisującym dane które można przeszukiwać. Niektóre formaty (np. Word, PDF) CloudSearch potrafi w locie przekonwertować do SDF, ale dla pozostałych trzeba SDF przygotować samemu. Usługa pozwala również zdefiniować reguły dostępu (access policies) ograniczające dostęp na potrzeby administracji lub wyszukiwania do określonych IP. Dostęp do usługi jest z języków programowania poprzez API lub z wiersza poleceń (CloudSearch CLI).

Indeksy przechowywane są w pamięci RAM instancji EC2, przy czym użytkownik AWS nie ma wpływu na ilość i typ instancji – zajmuje się tym Amazon. Koszty są uzależnione od liczby zapytań w ciągu godziny oraz dodatkowo od ilości transferowanych danych w miesiącu.

Elastic Transcoder [Cennik|Dokumentacja]

Ta usługa, uruchomiona w 2013 roku, zajmuje się konwersją plików wideo z jednego formatu na inne. Model finansowy pobiera opłaty za każdą rozpoczętą minutę: $.015 dla filmów standard-definition (SD) i $.030 dla filmów HD. W każdym miesiącu, pierwsze 20 minut transkodowania SD albo 10 minut transkodowania HD jest darmowe.

Simple Queue Service (SQS) [Cennik|Dokumentacja]

Usługa pozwala na asynchroniczną wymianę danych między procesami (w szczególności na różnych instancjach, w ramach aplikacji rozproszonej). Każda kolejka ma swój URL i kontrolowany dostęp. Może być wiele nadawców i wiele odbiorców. Amazon zapewnia stabilność usługi stosując redundancję, co jednak pociąga za sobą brak gwarancji że będzie to kolejka FIFO — jeśli komuś zależy na obsłudze komunikatów w kolejności to musi je numerować przy wysyłaniu i odpowiednio składać przy odbiorze. Mamy gwarancję, że każdy komunikat zostanie dostarczony przynajmniej raz. Gdy nie ma odbiorców, wstawione komunikaty czekają w kolejce (domyślnie przez 4 dni).

Odczyt komunikatu nie jest równoznaczny z jego usunięciem z kolejki — są to osobne operacje. Zwykle odbiorca nie tyle usuwa komunikat, co rezerwuje go (czyniąc niewidocznym dla pozostałych odbiorców) i zobowiązuje się go przetworzyć w określonym czasie, po którym komunikat usuwa z kolejki. Gdy mu się nie uda przetworzyć komunikatu w określonym czasie (np. proces padnie), komunikat znowu staje się widoczny dla wszystkich odbiorców (visibility time-out).

Maksymalny rozmiar komunikatu w kolejce wynosi 64 KB i można go zwiększyć do 256.

Koszt to $.50 za każdy milion komunikatów, pierwszy milion w miesiącu jest za darmo.

Simple Notification Service (SNS) [Cennik|Dokumentacja]

Ta usługa pozwala reagować na określone zdarzenia administracyjne (np. wyjątek w logach serwera bazy danych, niespodziewany krach instancji itp.) wysłaniem komunikatu SMS, e-mail, HTTP/HTTPS lub SQS. Nadawca (proces za pomocą API lub człowiek z konsoli w przeglądarce) wysyła komunikat nazwanym kanałem (topic). Komunikat dostaną wszyscy, którym uda się zarejestrować jako odbiorca kanału. Można definiować reguły dostępu określające kto może rejestrować się jako nadawca/odbiorca kanału.

Protokół wymaga, aby odbiorca (jednorazowo) potwierdził że jest zainteresowany otrzymywaniem komunikatów. Jest to zabezpieczenie przed wysyłaniem SMSów i maili ludziom, którzy sobie tego nie życzą.

Podobnie jak w przypadku SQS koszt usługi SNS wynosi $.50 za każdy milion komunikatów, a pierwszy milion w miesiącu jest za darmo. Dodatkowo jednak płaci się za każdą formę dostarczenia: HTTP $.06 za każde 100 tys. komunikatów, e-mail $2 za każde 100 tys. komunikatów, SMS $.75 za każde 100 komunikatów, SQS za darmo. Za komunikaty wysyłane do Internetu dodatkowo nalicza się standardowe koszty transferu.

Simple E-Mail Service (SES) [Cennik|Dokumentacja]

Jest to usługa wysyłania maili, w gruncie rzeczy ta sama z której korzysta sklep internetowy Amazon przy wysyłaniu maili klientom kupującym książki.

Ponieważ poważnym problemem jest spamowanie, a jedna czarna owca korzystająca z AWS może umieścić adresy publiczne IP chmury na czarnych listach dostawców internetowych, każdy kto chce za pomocą AWS wysyłać maile musi przejść przez długotrwałą procedurę której celem jest zdobycie zaufania Amazonu. Przede wszystkim konieczne jest zarejestrowanie własnej domeny z której będą wysyłane maile. Adres email nadawcy musi znajdować się w zarejestrowanej domenie i być zweryfikowany przez Amazona. Początkowo można wysyłać max. 200 maili dziennie tylko do innych adresów email własnej domeny. Nawet po zdobyciu zaufania, mamy ograniczenia na liczbę wysyłanych maili dziennie i w ciągu sekundy, które z czasem będą poluzowywane.

Amazon udostępnia statystyki na temat wysłanych maili (np. ile z nich zostało odbitych), a także filtruje maile pod kątem spamu.

Koszty usługi to $.10 za każde 1000 wysłanych wiadomości, a jeśli wysyłanie odbywa się z wynajętych w chmurze instancji EC2 to wysyłka pierwszych 2000 maili dziennie jest za darmo. Dodatkowo płaci się za wysyłane w mailach załączniki — $.12 za każdy gigabajt. Jeden email wysłany do 10 odbiorców jest liczony jako 10 emaili.

Simple Workflow Service (SWF) [Cennik|Dokumentacja]

Ta usługa również wyrosła z potrzeb księgarni internetowej Amazonu. SWF to uogólniony koordynator przepływu (ang. workflow engine), który pozwala zdefiniować zadania do wykonania i zależności między nimi (np. konieczność rozpoczęcia następnego po tym jak poprzednie zakończyło się z sukcesem, w określonych etapach zadania mogą też być wykonywane równolegle), a także określić timeouty i procedury wykonywane w razie błędów. Zadania nie muszą się wykonywać w chmurze Amazonu, mogą być nawet wykonywane ręcznie przez użytkownika który przez formatkę informuje o zakończeniu zadania i podaje wyniki. Przepływ może być sterowany parametrami i generować sygnały.

Elastic MapReduce (EMR) [Cennik|Dokumentacja]

EMR to aranżacja Hadoopa w wykonaniu Amazona. Zakłada się, że dane do przetworzenia początkowo znajdują się w S3 i mogą ich być nawet petabajty. Uruchamiając usługę należy określić zasoby do wykonania obliczeń (liczba i rodzaj instancji). Z chwilą uruchomienia maszynerii dane są przenoszone z S3 do zbioru instancji, gdzie wykonywane są obliczenia. Zwolnienie instancji oznacza utratę danych i konieczność ponownego ich zaciągania, więc niestety trzeba kalkulować co się bardziej opłaca w przerwach między obliczeniami: utrzymywać bezczynne instancje czy tracić czas na ponowne przebudowanie bazy. Obliczenia można wykonywać w trybie wsadowym (strumieniowym) lub interaktywnym (zadawanie zapytań np. za pomocą Hive, wyniki zapisywane w S3). EMR pozwala przeprowadzać obliczenia w językach Java, Ruby, Perl, Python, PHP, R, Bash i C++.

Koszty użycia EMR to zasadniczo koszty użycia instancji EC2 i przechowywania danych w S3, plus dodatek ok. 25%, co razem podobno i tak jest bardzo atrakcyjne w porównaniu z dotychczasowymi ofertami na rynku BigData.

Redshift [Cennik|Dokumentacja]

Redshift to Amazonowa propozycja w zakresie SQL-owej hurtowni danych, tzw. bit-mapped columnar database. Typowy sposób wyceny przetwarzania danych w świecie hurtowni danych to cena terabajta na rok. Patrząc na to w ten sposób, Amazon liczy sobie $3621 za terabajt na rok. Przy rezerwacji instancji na 3 lata, koszt spada poniżej $1000.

Management services

Typowy dla AWS sposób myślenia wyraźnie rozdziela instalację i zarządzanie komponentami aplikacji od używania tych komponentów. Amazon stara się zautomatyzować administrację infrastrukturą tak abyś mógł się skupić na funkcjonalności aplikacji. Poniżej prezentowane są najbardziej wyrafinowane usługi wysokiego poziomu, pozwalające zarządzać Twoimi aplikacjami w chmurze.

CloudWatch [Cennik|Dokumentacja]

Ta usługa pozwala monitorować używane zasoby AWS, usługi AWS i całą aplikację; generuje dane liczbowe (standardowo przechowywane 2 tygodnie), a w razie potrzeby alerty. Przykładem monitorowanego parametru jest obciążenie procesora instancji EC2. Zwykle dane są próbkowane w 5-minutowych interwałach. Do CloudWatch można też podłączać własne źródła danych. Dane można wyciągać za pomocą API, albo oglądać w konsoli (przeglądarka) np. w postaci wykresów.

Podstawowe statystyki dla usług EC2, EBS, ELB i RDS są darmowe, a spośród pozostałych darmowe są pewne ilości w miesiącu, np. 10 metryk własnych, 10 alarmów, milion żądań API. Jeśli chcemy próbkować instancje EC2 co minutę (a nie co standardowe 5 minut), to kosztuje to $3.50 od instancji, każda własna metryka to $.50 miesięcznie, każdy alarm to $0.10, a żądania API kosztują $0.01 za każde 1000.

AutoScaling [Cennik|Dokumentacja]

Autoskalowanie jest darmowe i pozwala automatycznie (bez udziału człowieka) reagować na zmianę obciążenia aplikacji rozproszonej uruchamiając dodatkowe instancje lub wstrzymując niepotrzebne. Definiując grupę autoskalowania można określić minimalną i maksymalną liczbę instancji oraz plan skalowania, który może być dynamiczny (reakcja na wartości wskazanych metryk) lub przewidywalny (np. uruchomienie 3 dodatkowych instancji na okres weekendu). Autoskalowanie często łączy się z usługą Elastic Load Balancer (ELB) aby rozkładać ruch sieciowy równomiernie między wszystkie działające instancje.

Kolejne 3 usługi przeznaczone są dla deweloperów aplikacji AWS i ułatwiają ich wdrożenie: instalację, konfigurację, uruchamianie i nadzorowanie.

Elastic BeanStalk [Darmowy|Dokumentacja]

Zapoczątkowany w 2011 roku, BeanStalk jest przeznaczony dla aplikacji webowych (baza danych + serwer WWW) pisanych w językach zawierających interpreter, a więc np. .NET, Java, Python, PHP, Ruby czy Node.js. Narzędzie pozwala szybko skopiować aplikację z laptopa w chmurę automatycznie uruchamiając potrzebne instancje i usługi takie jak S3, SNS, CloudWatch, AutoScaling i ELB. Każda wrzucana paczka jest traktowana jako kolejna wersja, mamy mechanizm zarządzania wersjami i możliwość uruchomienia dowolnej wersji, udostępniane są też pluginy do popularnych środowisk IDE (np. Eclipse, MS Visual Studio). BeanStalk dobrze współpracuje z Gitem.

CloudFormation [Darmowy|Dokumentacja]

CloudFormation jest odpowiednikiem BeanStalk dla bardziej zaawansowanych (wielowarstwowych, wielokomponentowych) aplikacji pisanych w dowolnym języku programowania. Kluczowym pojęciem jest tu parametryzowany szablon (ang. template, dokument JSON) definiujący wymagane komponenty aplikacji, ich koordynację przy uruchamianiu i reakcję na zmieniające się obciążenie. Amazon udostępnia ok. 20 predefiniowanych szablonów, które można modyfikować i dostosowywać do własnych potrzeb.

OpsWorks [Darmowy|Dokumentacja]

O ile poprzednie dwa narzędzia służyły do wdrażania gotowych aplikacji, OpsWorks wspiera cały iteracyjny proces tworzenia oprogramowania i jest w rzeczywistości opakowaniem dla rozbudowanego narzędzia konfiguracyjnego i monitorującego o nazwie Chef. Tutaj opis wdrożenia jest wyrażany w postaci tzw. przepisów (ang. recipes), czyli skryptów napisanych w języku Ruby — istnieje bogate repozytorium w którym ludzie dzielą się tego rodzaju przepisami.

Zarządzanie kosztami

Są firmy takie jak Cloudyn, które przeprowadzają analizę wykorzystania chmury AWS. Firma udostępniła zbiorcze statystyki pokazujące wzorce wykorzystania chmury Amazona w styczniu 2013 roku przez 400 swoich dużych klientów (enterprise customers).




Najwięcej kosztów (62%) generuje usługa EC2 (wynajem instancji), a ruch sieciowy (kategoria Inne, razem z pozostałymi rzadziej używanymi usługami) grubo poniżej 17%. Jeśli planuje się używać instancji krócej niż 3 miesiące, to bardziej opłaca się model on-demand niż reserved. Dobrze jest pisać aplikacje tak aby umiały wykorzystywać instancje spot-priced (aukcja) – wtedy staramy się wziąć spot-priced, a jak aktualnie nie ma, to on-demand. Zaleca się tworzyć aplikacje rozproszone i wykorzystywać usługę AutoScaling do automatycznego włączania/wyłączania instancji w miarę potrzeby (obciążenie użytkownikami).

Pinterest używał początkowo instancji on-demand, ale zredukował koszty wynajmu instancji o 60% po przejściu na używanie:

  • Heavy reserved instances do obługi obciążenia minimalnego,
  • Light reserved instances do przewidywalnego wzrostu obciążenia w ciągu dnia,
  • Spot-priced instances (aukcja) do obsługi niespodziewanych pików i wykonywania zaległych zadań.

Inne ciekawe linki – warto zajrzeć:

Share and Enjoy:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Śledzik
  • Blip
  • Blogger.com
  • Gadu-Gadu Live
  • LinkedIn
  • MySpace
  • Wykop

Zostaw komentarz

XHTML: Możesz użyć następujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>