S3: hostujeme statický web v cloudu během pěti minut

Amazon Web Services

Před časem jsme si na těchto stránkách ukazovali, jak začít používat Amazon S3, tedy „Simple Storage Service“. Minulý pátek Amazon nabídl novinku, díky níž je nyní možné použít S3 jako serverovou službu pro hostování webů, které nepotřebují dynamické generování stránek na straně serveru. Ukažme si, jak na to.

Seriál: Cloud computing prakticky (4 díly)

  1. Cloud hosting: Spouštíme vlastní virtuální server 5.6.2009
  2. Cloud computing: Jiný pohled na aplikace 3.7.2009
  3. S3: hostujeme statický web v cloudu během pěti minut 21.2.2011
  4. App Engine: statický web za deset minut i s hostingem u Google zdarma 23.5.2011

Pokud jste s Amazon S3 neměli zatím žádnou zkušenost, přečtěte si prosím nejprve článek Používáme datové úložiště Amazon S3. V něm je popsána základní terminologie, jejíž znalost bude v tomto textu nezbytná (Credentials, Bucket). Rovněž budeme předpokládat, že zájemce již má účet u služby S3 vytvořený a v textu nebudeme popisovat, jak jej založit.

Statický web

Ačkoli se zdá, že je dnes naprosto nezbytné mít web hostovaný na serveru, kde běží PHP, Java, Python či jiná technologie pro dynamické vytváření obsahu, je stále ještě velké množství situací, kdy se bez serverových technologií obejdeme. Ať už to jsou statické prezentace nebo některé webové služby, které si vystačí s prostředky HTML/JS na straně klienta.

Myšlenka hostovat takové weby v cloudových datových úložištích typu právě Amazon S3 je nabíledni: Taková úložiště jsou rychlá a levná, nemívají problémy s dostupností, a pokud využijete nadstavby v podobě nějakého CDN, budou vaše weby dostupné po celém světě s minimální latencí (díky redundantnímu ukládání v CDN po celém světě).

Amazon S3 sice dokáže (díky REST rozhraní) vracet soubory stejně jako webový server (včetně správného MIME typu), ale měl jednu zásadní nevýhodu, kvůli níž nebylo, až do minulého týdne, možné použít jej k hostování celého statického webu (hostovaly se např. pouze knihovny nebo obrázky). Nedokázal totiž nabídnout tzv. „root document“ – tedy známý „index.html“ soubor. Jeho REST rozhraní namísto toho vracelo XML soubor se seznamem uložených souborů. Od minulého týdne to však už možné je a my si v článku ukážeme, jak to udělat.

Prakticky…

Ukažme si, krok za krokem, vytvoření takového statického webu v prostředí Amazon S3. Autor bude postup demonstrovat na svém starším weblogu…

0. Statický obsah

Nejprve je potřeba mít vlastní obsah. Pro potřeby této ukázky jsem pomocí programu WinHTTrack stáhl jeden svůj starší blog; upravil jsem odkazy, vyházel formuláře pro psaní komentářů a další věci, které na statickém webu nemají smysl. – pozn.aut.

1. Vytvoříme bucket

Bucket, „kyblík“, je v terminologii Amazon S3 oblast, do níž jsou ukládána data. Bucket musí mít název jedinečný v rámci celého S3 – např. bucket s názvem „zdrojak“ bude dostupný přes URL  http://zdrojak.s3.amazonaws.com/.

Pro zálohu vlastního webu je podobné URL velmi nešikovné. Naštěstí lze pomocí CNAME záznamu v DNS vytvořit alias, ale je potřeba splnit jeden požadavek. V příkladu budeme vytvářet web na URL „ http://cina.maly.cz“ (to proto, že jde o weblog se zápisky z dovolené v Číně – pozn.aut.). Amazon S3 umí pracovat s CNAME aliasem, ale vyžaduje, aby jméno aliasu bylo součástí jména bucketu (což není problém, protože jméno bucketu může obsahovat i tečky).

Vytvoříme si tedy bucket s názvem „ cina.maly.cz“ (a použijeme k tomu webovou konzoli AWS): Tlačítkem Creatre Bucket vyvoláme formulář pro vytvoření bucketu:

Zadáme jméno (cina.maly.cz) a jako umístění ponecháme US Standard (pozor – některé geografické lokace mohou být dražší, podívejte se do ceníku).

Bucket máme vytvořen, a je prázdný.

2. Upload souborů

Připravené soubory můžeme nahrát na server. K nahrání můžeme použít opět AWS Console, nebo některý z programů, určených pro práci s úložištěm S3, např. Cloudberry Explorer. Při uploadu si můžeme všimnout možnosti „Use Reduced Redundancy Storage“. Pokud tuto volbu zaškrtnete, budou vaše data uložena „levněji“ – snížíte poplatek za uložený objem dat. Cenou za to je snížená garance jejich dostupnosti oproti plnohodnotnému S3 úložišti. Garance dostupnosti je zde 99,99% (plné S3 má těch devítek podstatně víc).

Soubory v bucketu jsou uloženy v jednom adresáří; S3 nezná „vnořené adresáře“. Názvy souborů ale smí obsahovat lomítka, takže soubor foo/bar.html můžeme nahrát s tímto názvem (ne tedy „do adresáře foo soubor bar.html“, ale „do kořenového adresáře soubor „foo/bar.html“). Výše zmiňované programy (jako Cloudberry Explorer) ale dokáží toto chování navenek simulovat a dát uživateli pocit, že pracuje s adresářovou strukturou. Vnitřně ale funguje tak, jak jsme si popsali.

3. Nastavení práv

Máme soubory nahrané, můžeme se na ně podívat. Použijeme zatím standardní přístup pomocí S3 URL a zadáme „ http://cina.maly.cz.s3.amazonaws.com/“ (jméno bucketu, následované .s3.amazonaws.com). Výsledkem bude chybové hlášení:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>EB561FBB40EE7367</RequestId>
−
<HostId>
w404IecvBzvCmtaRoYG1ysNiHVJwRySEQO5GGHU36ActWgbBbzabzfLnJjj2B2is
</HostId>
</Error>

Vidíme, že problém je s přístupovými právy. Je to proto, že nově vytvořený bucket a nahrané soubory jsou vždy „private“, pokud neurčíte jinak. Pokud chcete, aby soubory byly dostupné přes web, můžete u bucketu vybrat z menu Action volbu Properties:

a v těchto možnostech pak přidat právo „List“ pro „Everyone“. 

Pokud pak zopakujete svůj požadavek, získáte výpis souborů uložených v daném bucketu:

<ListBucketResult>
<Name>cina.maly.cz</Name>
<Prefix/>
<Marker/>
<MaxKeys>1000</MaxKeys>
<IsTruncated>false</IsTruncated>
−
<Contents>
<Key>0802archiv.html</Key>
<LastModified>2011-02-20T11:52:28.000Z</LastModified>
<ETag>"664d16bfe7fca40ab6d0041a5d043c87"</ETag>
<Size>6161</Size>
<StorageClass>REDUCED_REDUNDANCY</StorageClass>
</Contents>
−
<Contents>
<Key>659802-den-prvni.html</Key>
<LastModified>2011-02-20T11:52:27.000Z</LastModified>
<ETag>"5069fbfcab3c9da9f007031953f6d6c2"</ETag>
<Size>11049</Size>
<StorageClass>REDUCED_REDUNDANCY</StorageClass>
</Contents>

atd. Když se ale pokusíte otevřít nějaký soubor (http://cina.ma­ly.cz.s3.amazo­naws.com/index­.html), opět se dočkáte chyby s přístupovými právy. Je totiž potřeba nastavit ještě u všech souborů právo „číst“. Naštěstí nemusíte toto řešit pro každý soubor zvlášť:

Vyberte všechny soubory z bucketu (pomocí Shift a kliknutí) a z menu Actions zvolte položku „Make Public“. Tato volba u všech vybraných souborů přidá uživateli „Everyone“ právo „Open“. Jakmile změna proběhne, bude přístup na index.html bez problémů.

V tuto chvíli je náš statický web online a funkční – až na to, že přístup bez zadání index.html vrátí XML seznam souborů. Právě tento problém řeší nová funkce „website“.

3. Website mode

Bucket přepneme do módu „website“ jednoduše – z menu Actions (u seznamu bucketů, nikoli u seznamu souborů) vybereme opět Properties, a zde, v druhé záložce nazvané Website, tuto funkci povolíme, a zároveň oznámíme, jaký soubor má být ten „root document“, vrácený v případě, že žádný nebyl zadán.

Poslední řádek oznamuje, pod jakou adresou je naše statická website dostupná. Je to „ http://cina.maly.cz.s3-website-us-east-1.amazonaws.com/“ (Adresa se skládá z jména bucketu a z fyzického umístění, zde s3-website-us-east-1) .

4. DNS

Adresu website nastavíme jako hodnotu CNAME pro danou doménu 3. řádu – zde tedy jako:

cina IN CNAME cina.maly.cz.s3-website-us-east-1.amazonaws.com.

Po nezbytné době, potřebné k „probublání“ DNS záznamů, bude vše fungovat na námi vybrané doméně.

Náklady

Jak sami vidíte, použití S3 k vytvoření statického webu je velmi snadné a nekomplikované a lze jej zvládnout doslova během několika minut. Pojďme se ještě podívat na to, jaké budou náklady. Amazon k tomu nabízí jednoduchou kalkulačku.

Cena služby S3 se odvíjí od počtu požadavků, objemu přenesených dat a objemu uložených dat. Uvažujme malý web – 100MB souborů, měsíčně cca 30.000 návštěv, 350.000 požadavků na soubory, cca 3.3GB přenesených dat (čísla pochází z reálného webu). Pokud vybereme umístění US Standard a zvolíme „reduced redundancy“, bude přibližná cena za měsíc provozu 0.37 USD (počítáno 20.2.2011; cena se může změnit). Při dnešním kurzu dolaru zaplatíte tedy za měsíc zhruba 7 Kč. V případě uložení v EU bude přibližná cena 0.34 USD. (Autor může potvrdit, že opravdu podobné částky sám platí.)

Rychlost odezvy je, logicky, o něco nižší než u serverů, umístěných fyzicky v ČR (cca 170ms z US-East); zvýšení rychlosti odezvy je možné řešit buď přesunem do geograficky bližšího uzlu (z ČR vychází nejvýhodněji Irsko – dle měření je rychlost odezvy 80ms) nebo použitím CDN CloudFront (pokud vyžadujete co nejrychlejší odezvu po celém světě).

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: 6

Přehled komentářů

Petr Neexistující adresáře
Martin Malý Re: Neexistující adresáře
Jenda Re: Neexistující adresáře
Jindra S3 zdarma
Rackuniverse Re: S3 zdarma
marek-atlas Re: S3 zdarma
Zdroj: http://www.zdrojak.cz/?p=3438