Používáme datové úložiště Amazon S3

Jedním ze základních stavebních kamenů moderních webových služeb typu IaaS (Infrastruktura jako služba) jsou datová úložiště. Datová úložiště slouží, jak název napovídá, k ukládání souborů dat, k nimž pak přistupují buď další součásti služby (servery apod.) nebo přímo uživatelé. V článku si ujasníme některé základní pojmy a postupy, které nás ve světě datových úložišť čekají.

V článku o cloud hostingu jsme si popsali některé známější cloud hostingy a jejich součásti. Pojďme se dnes podrobněji podívat na jednu z nich, na službu známou pod zkratkou S3. Amazon S3 (Simple Storage Service) je součástí Amazon Web Services, tedy služeb, které nabízí Amazon k pronájmu – kromě úložiště S3 jde např. i o cloud EC2, databázi SimpleDB, CDN CloudFront či správce front SQS. S3 má mezi těmito službami určité výsadní postavení – některé služby (typicky EC2) používají S3 jako úložiště např. pro zálohy či „obrazy systému“, další (jako CloudFront) jsou dokonce logickým rozšířením a nadstavbou (ovšem zvlášť placenou) nad S3. Pokud chcete zjistit, co AWS umí, je tedy logické začít právě od S3.

Amazon Web Services

Než začneme…

Před tím, než se pustíme do praktického testování S3, je potřeba udělat určité přípravné kroky. Jednak je potřeba být registrovaným uživatelem AWS – zde připomínám, že pro registraci je potřeba platební karta, na níž jsou účtovány měsíčně částky za služby. Není třeba se bát neočekávaných vydání, protože Amazon neúčtuje žádné „paušální částky“, ale pouze a jen poplatky za používání dle ceníku. Jako registrovaný uživatel získáte přístupové údaje (AWS Credentials), které se skládají z čísla účtu (account ID), přístupového klíče (access key) a tajného klíče (secret key).

Amazon má, jak jste možná zjistili v ceníku, různé ceny pro USA a Evropu. Ale v tomto případě nejde o tolik oblíbené „dvojí ceny“, kdy zákazník z Evropy zaplatí v eurech tu samou částku, co zákazník z USA v dolarech (klasickým příkladem je Steam a spousta e-shopů), ale o rozdíl mezi datovými úložišti. Amazon má totiž svá centra nejen v Americe, ale kvůli zrychlení odezvy pro evropské zákazníky i v Evropě. Uložení v evropském datovém centru pak vyjde o něco (3 centy za gigabajt měsíčně) dráž. Nezáleží tedy na tom, jestli máte sídlo v USA nebo v Evropě, ale je na vaší volbě, ve kterém datovém úložišti chcete data mít. Pokud je většina vašich klientů z USA, nebo pokud počítáte s tím, že budete S3 používat pouze pro své potřeby a že rychlost oželíte, použijte úložiště v USA, pokud ale máte klienty po Evropě, bude asi lepší využít evropských center.

Terminologie a organizace S3

S3 bucket

Úložiště S3 (a i další podobná) mají některé specifické vlastnosti, které je odlišují od běžného „disku na serveru“. Jednak je snadno škálovatelné – pro uživatele to znamená „nekonečný“ prostor, aniž by se musel starat, kde přesně se nové místo vzalo. Dále je trvalé – data jsou fyzicky ukládána redundantně na různých místech, takže ani výpadek, ani poškození HW by nemělo data nijak ohrozit. Je taky rychlé, jednoduché a levné.

Tyto vlastnosti s sebou nesou i některé méně obvyklé efekty – například když uložíte soubor do S3 a vzápětí požádáte o výpis uložených souborů, pravděpodobně v něm ten nově uložený nenajdete. Zrovna tak budou ve výpisu vidět i „čerstvě smazané“ soubory. Je to způsobeno tím, že změna musí nejprve „probublat“ systémem, na všechna místa, kde je (bude) soubor fyzicky uložen. S3 tedy rozhodně není vhodné místo pro ukládání pracovních souborů, do nichž se neustále zapisuje či které se často mění, mažou, vytváří… S3 je vhodné pro data s delší trvanlivostí.

Základní pojmy, s nimiž se u S3 setkáme, jsou object, bucket a key. Nejde o nic tajemného:

Object
je základní jednotka „uložené informace“ – skládá se z vlastních dat a z metadat. Odpovídá zhruba „souboru s atributy“. Data mohou mít velikost od jednoho bajtu až po 5GB. Metadata jsou tvořena dvojicemi „klíč = hodnota“. Mezi nimi jsou některé standardní údaje, známé z HTTP protokolu („Content-Type“ například), ale můžeme si specifikovat i vlastní atributy dle potřeby.
Bucket („kyblík“)
je místo, do něhož jsou objekty ukládány. Bucket má v rámci celého S3 jedinečné jméno, a každý soubor v něm uložený musí mít opět jedinečné jméno. Takových „kyblíků“ můžeme mít na jednom AWS účtu maximálně 100.
Key
je jednoznačná cesta k danému objektu v určitém „kyblíku“. Každý objekt, uložený v S3, má právě jeden unikátní klíč (key). Navíc existuje jednoznačné přiřazení mezi klíčem a dvojicí „bucket+object“. Například objekt s názvem „index.html“, uložený v bucketu „zdrojak“ bude mít klíč „http://zdrojak­.s3.amazonaws­.com/index.html“.

V S3 neexistuje možnost vytváření podadresářů či „zanořených bucketů“ – úložiště není hlouběji strukturované pod úroveň bucketu, je ploché. Přesto lze, alespoň navenek, podadresáře simulovat – pokud do bucketu „zdrojak“ uložím objekt, a ten pojmenuji „styles/defau­lt.css“ (ano, jména objektů mohou obsahovat lomítko), tak jeho klíč (a tedy i přístupová adresa) bude http://zdrojak­.s3.amazonaws­.com/styles/de­fault.css.

API

S3 je, jak už samotný název napovídá, jednoduchá služba. Pokud čekáte nějaké komplikované API a desítky funkcí s tisícem parametrů, budete překvapeni. S3 nabízí dvojí API, jednak klasické SOAP, jednak stále populárnější REST. Konkrétní podrobnosti naleznete v Developer Guide (PDF verze), základní přehled pak můžete získat z Getting Started Guide (začátečníkům jednoznačně doporučuji, v tomto průvodci jsou popsány všechny potřebné kroky, od založení účtu u AWS po základní operace s objekty).

Pokud nepoužíváte technologie, který usnadní použití SOAP (např. nástroje .NET), sáhnete pravděpodobně po REST API. Toto API lze použít téměř v libovolném jazyce, používaném ve světě webových aplikací, od Javy přes PHP po PERL. Naštěstí je k dispozici dostatek hotových knihoven a příkladů, které zapouzdřují vlastní API a umožní tak vývojáři soustředit se na vlastní úkol a neřešit záležitosti spojené s implementací komunikačního protokolu.

S3 nabízí několik základních operací: Vytvoření či smazání bucketu, získání seznamu objektů v bucketu, vytvoření, změnu či smazání objektu a získání informací o objektu. Kromě těchto operací lze např. zjistit umístění konkrétního bucketu (US nebo EU) či měnit a zjišťovat informace o tom, kdo platí datový přenos bucketu (zda vlastník, nebo ten, kdo požaduje data).

S3 ACL

Pokud uložíte objekt (soubor) do S3 a nespecifikujete přístupová práva (ACP – Access Controll Policy) pomocí speciálního příznaku, bude váš objekt uložen s příznakem private, tedy soukromý. Pokud chcete umožnit jiným uživatelům přístup k tomuto objektu, můžete nastavit oprávnění public-read (ostatní mohou číst), public-read-write (ostatní mohou číst i zapisovat) nebo authenticated-read (mohou číst pouze ověření uživatelé AWS).

Co umí S3 navíc?

S3 umožňuje vytvořit alias pro objekty, takže lze k nim přistupovat přes vlastní doménové jméno. Používá se k tomu jednoduchý trik – bucket je pojmenován stejně jako vlastní doména, a v DNS je pro tuto doménu vytvořen CNAME záznam. Příklad: Chceme vytvořit bucket, který bude přístupný na adrese http://data.zdro­jak.cz. Vytvoříme si tedy bucket, který pojmenujeme „data.zdrojak.cz“ a v DNS nastavíme data.zdrojak.cz CNAME data.zdrojak.cz­.s3.amazonaws­.com.

S3 dokáže pro objekt vytvořit torrent soubor – pokud tedy distribuujete větší soubory velkému počtu uživatelů (aktualizace, nové verze software apod.), můžete kromě přímého odkazu na soubor nabídnout uživatelům ke stahování i torrent soubor, čímž můžete významně snížit traffic.

Když se podíváte do dokumentace na popis REST metody POST, zjistíte i další příjemnou věc: S3 umožňuje přímý upload souborů HTML formulářem, při kterém nejde soubor nejprve na váš server a z něj do S3, ale putuje od klienta přímo do úložiště S3.

S3 ve spojení se službou CloudFront umožňuje rychlé šíření obsahu. CloudFront tvoří několik datových center v důležitých internetových uzlech, které zajišťují co nejrychlejší doručení obsahu uživatelům, podle toho, kde se nachází. Přenos dat ze S3 do uzlů CloudFront probíhá transparentně na pozadí, takže se nemusíme o nic starat, stačí jen oznámit, které objekty chceme šířit přes CloudFront (a, samozřejmě, si za tuto službu připlatit).

Závěr: Začínáme

V podtitulku nejde o překlep – konec tohoto stručného úvodu je opravdu možné brát jako začátek vlastní práce s Amazon S3. Vyberte si vhodný příklad podle nástrojů, které používáte, zaregistrujte se jako uživatel AWS a můžete si zkusit nahrát první soubor. Nebojte se, že by to nějak zásadně zatížilo váš rozpočet – základní vlastnosti S3 si otestujete během jednoho odpoledne, a pokud nebudete zrovna uploadovat grabovaná DVD, tak se jistě vejdete do pětikoruny za měsíc.

Pokud používáte PHP, začněte od S3 Example, nebo si stáhněte některou z AWS knihoven a zkuste si ukázkové příklady – já osobně jsem si vybral knihovnu Tarzan AWS, která poskytuje objektové rozhraní pro většinu AWS služeb, nejen pro S3.

Tarzan PHP Toolkit

Zkusme si třeba takové uložení souboru:

<?php
require_once('tarzan.class.php');

$s3 = new AmazonS3();

$file = $s3->create_object('data.zdrojak.cz',
  array(
    'filename' => 'index.html',
    'body' => '<h1>Funguje to, funguje to!</h1>',
    'contentType' => 'text/html',
    'acl' => S3_ACL_PUBLIC
  )
);

if ($file->isOK())
  { echo 'OK'; }
else
  { echo 'Chyba'; }
?> 

Soubor je ukládán do bucketu „data.zdrojak.cz“ (smysl tohoto názvu je vysvětlen výše), jmenuje se „index.html“ a jeho obsah je patrný z textu. K tomuto souboru bude možné přistupovat přes http://data.zdro­jak.cz.s3.ama­zonaws.com/in­dex.html, a pokud budou správně nastavené údaje v DNS, tak i přes http://data.zdro­jak.cz/index.html

S Tarzanem je, jak je vidět, práce s AWS snadná, navíc je dobře dokumentovaný a opravdu jednoduchý. Ostatně podívejte se na desetiminutový screencast, v němž je vytvářen jednoduchý prohlížeč objektů, uložených v S3 bucketu. Tarzan poskytuje pro práci se soubory v S3 sadu metod, které vnitřně „překládá“ na volání REST API.

Amazon S3 má opravdu obrovské možnosti použití, od ukládání osobních záloh za velmi příznivou cenu (málokdo nabízí 1GB za 10 centů) přes úložiště uživatelských dat až po nástroj k šíření velkých objemů dat (multimediálního obsahu) po celém světě.

Oblast moderních internetových služeb je pestrá a se snižováním cen jsou podobné technologie stále dostupnější i pro menší projekty. Proto se brzy podíváme na další služby z rodiny Amazon Web Services a ukážeme si praktické použití na konkrétním příkladu.

Používáte služby S3 (nebo podobné)?

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 13

Přehled komentářů

Jan Kodera jen bych doplnil
koles příkazová řádka
Martin Malý Re: příkazová řádka
noname zajímá mě, ale nevím jak na to
XTCH Re: zajímá mě, ale nevím jak na to
Martin Malý Re: zajímá mě, ale nevím jak na to
XTCH S3 + CloudFront
Martin Malý Re: S3 + CloudFront
xurpha webdav?
Q Zálohování serveru
Drink Druhý díl
oknas Re: Druhý díl
miso Re: Druhý díl
Zdroj: https://www.zdrojak.cz/?p=3016