Windows Azure a PHP

Potřebuje ve své aplikaci ukládat velké množství dat? A ta pak zobrazovat návětěvníkům? Jedna z používaných metod je uložení v cloudu, jako je Amazon AWS, Google AppEngine nebo třeba Azure. V článku si ukážeme, jak v PHP můžeme využít právě možností neomezeného úložiště ve Windows Azure.

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
not represent
any resource on the server
, tak je vše v pořádku.

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.win­dows.net/testo­vaci-container/azu­re.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/tes­tovaci-container/azu­re.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í.

Odkazy

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

Komentáře: 2

Přehled komentářů

VfB pouze win 7
Michal Prynych Amazon AWS je levnejsi
Zdroj: https://www.zdrojak.cz/?p=3271