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

Zdroják » Různé » S3: hostujeme statický web v cloudu během pěti minut

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

Články Různé

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.

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ě).

Komentáře

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

Dobrý popis, jen doplním, že v S3 neexistují adresáře, ale soubory mohou v názvu obsahovat znak lomítko, což to kompenzuje. Soubory v bucketu jsou nicméně v jediném adresáři.

Jenda

Nevím jestli jsem to jenom špatně pochopil, ale přímo v AWS Management Consoli vidím tlačítko Create Folder a i uvnitř adresáře můžu vytvářet další podadresáře. Takže mohli byste mi prosím blíže vysvětlit jak jste to mysleli tím, že v S3 neexistují adresáře?

petr

Nevím jak ti bylo tehdy. Ale teď je možné mít složky do libovolné hloubky

Jindra

Nevim jak ted, ale kdyz jsem se registroval do S3 na podzim, tak mi nabidli zdarma na rok celkem slusny balik sluzeb – tusim 10 GB storage, podobne prenosu, dokonce i instanci serveru atd.

Na vyzkouseni idealni.

Rackuniverse

Pořád ale musíte uvést informace o své platební kartě, cohož se třeba já štítím jako čert kříže. A podobných Čechů jistě bude spousta.

marek-atlas

Ja vyuzivam EC2, a co sa týka tej napojenej karty, je to skratka riesim tak že mám 2 účty a kartu ktorej čísla dávam takto firmám, „nabíjam“ len vtedy ked idem nieco platit, inač tam nemám skoro nič,,

a btw Amazon si pri regitracii strhol u mna 2€

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.