Jeśli posiadasz własną stronę WWW czy też aplikację webową z dużym prawdopodobieństwem posiadasz jakieś zasoby statyczne, które serwujesz swoim użytkownikom. To mogą być takie pliki jak zdjęcia, filmy, muzyka albo po prostu skrypty (.css, .js). Standardowe podejście budowy aplikacji, które było wykorzystywane przez wiele lat, zakładało, że takie zasoby statyczne umieścilibyśmy na zwykłym serwerze, skąd następnie byłyby serwowane dla użytkowników z całego świata. Okazuje się jednak, że w erze ‘chmurowej’, istnieje lepsze podejście. W tym poście przyjrzymy się jak można wykorzystać usługę Amazon Simple Storage Service (S3) oraz Amazon CloudFront, aby przechowywać i dostarczać zasoby w sposób lepszy, szybszy i bezpieczniejszy niż w tradycyjnym podejściu. Aby dodatkowo uprościć cały proces, przygotowaliśmy szablon CloudFormation, który pozwoli wam przetestować samodzielnie to podejście budowy aplikacji w zaledwie kilka minut!
Po pierwsze, musimy gdzieś przechowywać nasze dane statyczne (pliki, filmy, skrypty itp.) – musi to być bezpieczna lokalizacja i wysoce skalowalna. Tutaj sprawa ma się prosto, zasada jest jedna, dane statyczne w chmurze, które będziemy chcieli oferować użytkownikom przez Internet należy umieścić w S3 – czyli Simple Storage Service. S3 to usługa, która dostarcza przestrzeń, gdzie możemy przechowywać dane a następnie udostępniać je za pomocą protokołu HTTPS. S3 ma wiele interesujących charakterystyk, jedną z nich jest to, że automatycznie replikuje dane do wielu serwerowni, dzięki czemu charakteryzuje się bardzo dużą dostępnością i niezawodnością.
Samo użycie S3 jest bajecznie proste, tworzymy bowiem najpierw tzw. bucket – czyli wiaderko, do którego następnie będziemy wrzucać nasze dane. Co istotne, nie musimy również deklarować jak duże będzie to wiadro (ile MB, GB itp.) – bowiem kolejną charakterystyką tej usługi jest to, że automatycznie skaluje się do wymaganej przez nas pojemności. S3 to również przykład usługi typu serverless – czyli takiej, gdzie użytkownik nie musi myśleć o serwerach, które są wykorzystywane w ramach usługi – przykładowo, to dostawca chmurowy zajmuje się bowiem ich aktualizacją – a my skupiamy się na naszych danych, które bezpiecznie przechowujemy w S3.
Warto również dodać, że oczywiście może się okazać, że i tak gdzieś obok będziemy potrzebowali zwykłego serwera – skąd będziemy udostępniali zawartość dynamiczną strony – ale nawet wówczas, poprawna architektura zakłada, że S3 wykorzystamy, ponieważ S3 „odciąży” nasze serwery (ponieważ zawartość statyczna nie będzie z nich udostępniana) – a mniej obciążony serwer to możliwie mniejszy serwer, a mniejszy serwer to tańszy serwer.
Co prawda moglibyśmy na tym zakończyć usprawnianie naszej aplikacji (strony), ale tak naprawdę historia tutaj się nie kończy. Kolejnym krokiem, aby zwiększyć szybkość ładowania strony oraz jej bezpieczeństwo jest uruchomienie usługi Amazon CloudFront przez naszym bucketem S3.
CloudFront jest przykładem technologii CDN (ang. Content Delivery Network), która służy do przyśpieszenia dostarczania zawartości stron (statycznych i dynamicznych) dla użytkowników końcowych. W celu zapewnienia swojej funkcjonalności CloudFront wykorzystuje sieć tzw. punktów brzegowych – czyli serwerowni, które będą uczestniczyły w dostarczaniu zawartości strony dla użytkowników końcowych. W chwili pisania tego postu, na świecie jest ponad 110 takich lokalizacji (dalej określanych również jako POPy – ang. Point of Presence), zlokalizowany w 56 miastach, w 24 krajach na świecie (w tym w Polsce!).
Poniższa mapa prezentuje aktualną infrastrukturę CloudFront na świecie.