Amazon S3 - magazyn na wszystko
Jeśli EC2 to serce AWS, to Amazon S3 (Simple Storage Service) to jego kręgosłup. S3 jest wszędzie. Przechowuje pliki stron internetowych, backupy baz danych, logi, dane machine learning, archiwa. Praktycznie każda architektura w AWS w jakiś sposób używa S3.
S3 został uruchomiony w 2006 roku jako jedna z pierwszych usług AWS i do dziś jest jedną z najczęściej używanych. Amazon twierdzi, że S3 przechowuje ponad 100 bilionów obiektów. To liczba z 14 zerami.
Object storage vs inne typy
Zanim wejdziemy w szczegóły S3, ważne rozróżnienie:
- Block storage (EBS) - dane podzielone na bloki, jak tradycyjny dysk twardy. Do baz danych i systemów operacyjnych
- File storage (EFS) - hierarchia plików i folderów. Współdzielony dostęp
- Object storage (S3) - pliki (obiekty) przechowywane z metadanymi w płaskiej strukturze. Skalowalność praktycznie bez limitu
Anatomia S3
Bucket (kubełek)
Bucket to kontener na obiekty. Kilka kluczowych zasad:
- Nazwa bucketa musi być globalnie unikalna (na całym świecie, we wszystkich kontach AWS!)
- Bucket jest tworzony w konkretnym regionie
- Nazwy: 3-63 znaki, małe litery, cyfry, myślniki. Bez wielkich liter i podkreśleń
- Nie ma limitu na liczbę obiektów w buckecie
Object (obiekt)
Obiekt to plik przechowywany w S3. Składa się z:
- Key - pełna „ścieżka" do obiektu (np.
photos/2024/vacation.jpg) - Value - zawartość pliku (dane binarne). Max rozmiar: 5 TB na obiekt!
- Metadata - para klucz-wartość (content-type, data utworzenia, custom metadata)
- Version ID - jeśli versioning jest włączony
photos/2024/vacation.jpg to jeden ciągły string. AWS Console WYŚWIETLA to jako foldery dla wygody, ale technicznie to płaska struktura. Jeden obiekt = jeden klucz.Operacje na S3
- PUT - upload obiektu do bucketa
- GET - pobranie obiektu
- DELETE - usunięcie obiektu
- LIST - listowanie obiektów w buckecie
- HEAD - pobranie metadanych bez pobierania obiektu
Dla plików większych niż 100 MB AWS rekomenduje Multipart Upload. Dla plików powyżej 5 GB jest to wymagane. Plik jest dzielony na części, uploadowane równolegle.
Bezpieczeństwo S3
S3 ma wiele warstw bezpieczeństwa:
- Bucket Policy - JSON policy na poziomie bucketa (kto ma dostęp i do czego)
- IAM Policies - uprawnienia użytkownika/roli do S3
- ACL (Access Control List) - starszy mechanizm, AWS zaleca wyłączenie
- Block Public Access - domyślnie włączone! Zabezpieczenie przed przypadkowym upublicznieniem
- Encryption - szyfrowanie server-side (SSE-S3, SSE-KMS, SSE-C) lub client-side
S3 Versioning
Włączenie Versioning sprawia, że S3 przechowuje każdą wersję każdego obiektu. Nadpisałeś plik? Stara wersja nadal istnieje. Usunąłeś plik? S3 dodaje „delete marker", ale dane nadal są dostępne.
- Ochrona przed przypadkowym usunięciem lub nadpisaniem
- Możliwość przywrócenia dowolnej poprzedniej wersji
- Raz włączony, nie może być wyłączony (tylko „suspended")
- Starsze wersje zajmują storage i kosztują!
Przypadki użycia S3
Aplikacja mobilna pozwala użytkownikom uploadować zdjęcia. Backend (Lambda + API Gateway) generuje pre-signed URL, który pozwala userowi uploadować bezpośrednio do S3, bez przechodzenia przez serwer. Po uploadzie, trigger S3 uruchamia Lambda, która tworzy thumbnail i zapisuje go w innym buckecie. CloudFront serwuje zdjęcia globalnie z niską latencją.
Koszt storage dla 100 000 zdjęć (średnio 2 MB każde) = ~$4.60/miesiąc. Spróbuj to osiągnąć z własnym serwerem!
Pre-signed URL to tymczasowy URL z wbudowanymi uprawnieniami. Generujesz go programistycznie i dajesz komuś, kto normalnie nie ma dostępu do S3. URL wygasa po określonym czasie (domyślnie 1h).
Użycie: udostępnianie prywatnych plików, bezpośredni upload z frontendu, tymczasowy dostęp dla partnerów.
S3 Transfer Acceleration przyspiesza upload/download przez CloudFront Edge Locations. Zamiast uploadować z Europy bezpośrednio do bucketa w us-east-1, Twoje dane trafiają do najbliższego Edge Location i są przesyłane po zoptymalizowanej sieci AWS.
- S3 = object storage o praktycznie nieograniczonej skalowalności
- Bucket = kontener (globalnie unikalna nazwa, tworzony w regionie)
- Object = Key + Value + Metadata (max 5 TB na obiekt)
- Brak prawdziwych folderów - płaska struktura z prefiksami
- Versioning = przechowywanie wszystkich wersji obiektów
- Domyślne szyfrowanie SSE-S3, Block Public Access włączone
- Pre-signed URLs = tymczasowy dostęp do prywatnych obiektów
Jaki jest maksymalny rozmiar pojedynczego obiektu w S3?
Nazwa bucketa S3 musi być unikalna w jakimś zakresie. W jakim?
Versioning w S3 jest włączony. Usuwasz obiekt. Co się dzieje?