Windows Azure Platform je cloud platforma od Microsoftu, která poskytuje zázemí pro kompletní běh webových aplikací. Vývoji pro tuto platformu se věnujeme i zde na Zdrojáku (Azure).
Základem je Windows Azure, které obsahuje Data Storage – úložiště pro ukládání Blobů (Blobs), Tabulek (Tables) a Front (Queue). Dále máme k dispozici SQL Azure, což je vlastně MS SQL hostovaná v cloudu, a AppFabric, které slouží k vlastnímu hostování aplikací.
Výhody a nevýhody využití cloudu
Kompletní popis výhod a nevýhod využití cloudu by byl spíše na samostatný článek (zabývá se jí například Cloudcomputing: trend, nebo další buzzword? na Lupě). Z pohledu vývojáře je výhodou cloudu spolehlivost úložiště (data jsou uložena několikrát, na různých místech) a snadná škálovatelnost. Nevýhodou je bezpečnost dat (data nemáte pod kontrolou, ale jsou uložena „někde v cloudu“).
V tomto článku se zaměříme na to, jak můžete využít výhody Windows Azure cloudu ve své aplikaci v PHP.
Potřebný software
Základem je Windows Azure Software Development Kit (June 2010), který umožňuje vyvíjet aplikace s využitím lokální Storage a Developement Fabric, což je obdoba AppFabric. Dále obsahuje nástroje ke kompilaci aplikace pro spuštění na AppFabric (potřebujete Windows Vista SP1 a vyšší, .NET Framework 3.5 SP1 a další – detaily najdete přímo na stránce s downloadem).
To, že vám lokální cloud storage funguje, si můžete ověřit zadáním adresy http://127.0.0.1:10000/ do prohlížeče. Pokud dostanete XML odpověď, která mj. obsahuje The requested URI does
, tak je vše v pořádku.
not represent
any resource on the server
Ještě budeme potřebovat REST rozhraní pro přístup k Azure. Použijeme knihovnu WindowsAzure SDK for PHP Developers. Buď si stáhneme nejnovější verzi z webu (vpravo nahoře Download), anebo provedeme export z SVN. Podpora pro Windows Azure je sice zahrnuta i v Zend Frameworku, ale je zastaralá, a proto ji nedoporučuji používat.
Uložení souboru do cloudu jako blob
Jednotlivé bloby (z angl. Binary Large OBject – soubory s binárními daty) jsou uloženy v tzv. containerech (složkách). Struktura má jen jednu úroveň, containery nelze zanořovat do sebe. Nic nám ovšem nebrání použít v názvu blobu lomítko a tím si vytvořit virtuální adresářovou strukturu (podobně jako je tomu např. u Amazon S3).
Začneme vytvořením instance třídy Blob. Pokud konstruktoru nepředáme v parametrech naše přihlašovací údaje, nastaví se automaticky na naši lokální storage.
require_once 'Microsoft/WindowsAzure/Storage/Blob.php'; $storage = new Microsoft_WindowsAzure_Storage_Blob();
Dalším krokem je vytvoření containeru, který pojmenujeme testovaci-container
(lze použít jen malá písmena, číslice a pomlčku – viz MSDN). Hned po vytvoření containeru ho nastavíme jako veřejně přístupný, protože do něj budeme ukládat obrázky, které budou součástí webové stránky. Pokud budeme bloby používat například k ukládání záloh, tak ho samozřejmě necháme private
.
$storage->createContainer('testovaci-container'); $storage->setContainerAcl('testovaci-container', Microsoft_WindowsAzure_Storage_Blob::ACL_PUBLIC_CONTAINER);
Posledním krokem je nahrání souboru, které vypadá následovně:
$result = $storage->putBlob( 'testovaci-container', 'azure.png', 'C:UsersMartinDesktopazure.png', array(), null, array( 'x-ms-blob-content-type' => 'image/png', ) ); echo $result->url;
Prvním parametrem je container, ve kterém chceme blob vytvořit, druhýparametr je název blobu a třetí parametr je název lokálního souboru, který tam ukládáme. Důležitý je ještě poslední parametr, kterým nastavíme správný Content-Type. Výsledkem je objekt, který obsahuje informace o vytvořeném blobu. Nás zajímá především url
, pod kterou je náš obrázek přístupný. Na lokálním storage bude vypadat takto: http://127.0.0.1:10000/devstoreaccount1/testovaci-container/azure.png
. Tuto URL můžeme použít přímo jako atribut src
u obrázku ve webové stránce.
PHP stream wrapper
WindowsAzure třídy také umožňují aktivovat file stream wrapper, který dovoluje používat pro práci s bloby stejné funkce jako pro práci s normálními soubory:
$storage->registerStreamWrapper(); copy('C:UsersMartinDesktopazure.png', 'azure://testovaci-container/azure2.png');
Je možné zadat i název neexistujícího containeru, který bude automaticky vytvořen, ale poté bude nutné povolit veřejný přístup. Vytvořenému blobu pak také musíme nastavit správný Content-Type, jinak se použije výchozí application/octet-stream
$storage->setBlobProperties( 'testovaci-container', 'azure2.png', null, array( 'x-ms-blob-content-type' => 'image/png', ) );
Vytvoření storage na živém Azure serveru
Pro testování reálného použití je možné si aktivovat tzv. Introductory Special, kde je k dispozici omezené množství kapacity a výkonu zdarma.
Po aktivaci účtu si vytvoříme projekt a do něj přidáme novou Service
Vybereme Storage Account:
A vyplníme nějaký smysluplný název a popis. Oboje se bude zobrazovat jen v administraci.
V dalším kroku si zvolíme, pod jakou subdoménou bude náš blob přístupný. Jako region zvolíme „Anywhere Europe“
Naše úložiště se vytvořilo. Vidíme adresy, pod kterými je přístupné, a přístupový klíč.
Úprava kódu pro živý Azure storage
Do konstruktoru adaptéru pro blob přidáme přístupové údaje
$storage = new Microsoft_WindowsAzure_Storage_Blob( 'blob.core.windows.net', 'zdrojak', 'l6SWXR2HGm(...)Q==' /* přístupový klíč */ );
Při uložení blobu se nám vrátí URL http://zdrojak.blob.core.windows.net/testovaci-container/azure.png
A co jiná URL? Tahle je ošklivá…
Pokud nechcete ze své stránky linkovat externí adresy, je možné si nastavit vlastní URL:
Vyplníme vlastní URL – já jsem zvolil zdrojak.martinhujer.cz
. Dostaneme vygenerovanou speciální subdoménu, kterou musíme pomocí CNAME záznamu nasměrovat na verify.azure.com
a naši zvolenou doménu, kterou CNAME záznamem nasměrujeme na zdrojak.blob.core.windows.net
. Pak už jen chvíli (několik hodin) počkáme, aby se záznamy v DNS zpropagovaly a klikneme na Validate.
Náš soubor teď bude přístupný i z adresy http://zdrojak.martinhujer.cz/testovaci-container/azure.png.
Závěrem
V článku jsme si ukázali, jak můžeme využít cloud pro ukládání a distribuci obrázků z naší webové aplikace. Nedávno se objevil i plugin do WordPressu, který umožňuje Windows Azure používat jako storage pro uploadovaná data. Samozřejmě, že to nemá smysl u blogu s pár stovkami návštěv denně, ale pro aplikaci nabízející webová alba pro tisíce lidí už to stojí za zvážení.
Přehled komentářů