Přejít k navigační liště

Zdroják » Různé » Používáme datové úložiště Amazon S3

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

Články Různé

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é)?

Komentáře

Subscribe
Upozornit na
guest
13 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Jan Kodera

Buďte velmi opatrní komu dovolujete nahrávat soubory na S3. Objeví-li se na vašem S3 učtu nějaký soubor který je v rozporu s politikou Amazonu, mažou vám konto bez pardonu.

koles

Extra zmínku si určitě zaslouží skvělý command-line nástroj s3cmd od Michala Ludwiga – http://s3tools.org/s3cmd

noname

AWS mě zajímá dlouho, už od jejich loňské přednášky v Praze, ale přiznám se, že jsem se tím neprookousal. Potřeboval bych někoho, aby to nastavil tak, abych tomu rozuměl a abych to mohl využívat pro to co potřebuji – tj. asi potřebuju sehnat někoho, kdo mi z toho udělal "úplně normální" webhosting, kde bych si mohl zakládat weby a databáze (třeba tam pak nahrát nějaký plesk či podobné rozhraní pro blbečky mého kalibru).
Vím že už takové webhostingy založené na S3 na světě existují, výhoda je, že se platí právě jen za ten objem a přenesená data, což bych právě pro některé projekty potřeboval, ale říkám si, že by bylo možná lepší to mít vlastní, než od nějaké cizí firmy, která tomu vlastně dala právě jen tu instalaci a nastavení.
Hlavně v tuto chvíli nejsem schopen rozklíčovat, kolik mě to pak bude stát, protože se musí sečíst čas za procesorový čas krát něco, objem přenášených dat krát něco a objem uskladněných dat krát něco a chci srovnat, jestli se mi to u mých projektů vyplatí dělat takto, nebo jestli by se mi vyplatil nějaký klasický hosting.
Každopádně jestli byste to někdo uměl nastavit, tak se mi ozvěte na tomas@kapler.cz a můžem to zkusit udělat

XTCH

Na tohle ti asi samotný S3 stačit nebude, to bys musel mít ještě EC2 na kterém by ti běžel webový+databázový server

XTCH

Zdravím,
mohu se zeptat jak funguje účtování při propojení služeb S3 a CloudFront?
Podle ceníku má CloudFront buď stejné/vyšší/nižší ceny než S3, takže co vlastně budu platit?
Teoreticky vypadá výhodněji než použít evropský S3 tak použít americký S3 a k tomu CloudFront. Nebo budu platit přenosy i za S3?

xurpha

to asi neumi, co?

Q

Zajímá mě, jestli je to dobré použití a jestli to už někdo řešil
jako zálohovací prostor pro zálohování HYPER-V Windows 2008 VPS?

Drink

Nechystáte avizovaný druhý díl?

oknas

Také se přimlouvám za další, zmiňovaný, díl. Děkuji

miso

Tiez by som rad druhy diel, dakujem

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.