Windows Azure WebSites je v zásadě klasický webhosting, na němž můžete provozovat aplikace napsané v ASP.NET, PHP, Node.js nebo Pythonu. Jsou velmi snadné na použití a jejich výhodou je podpora deploymentu aplikace pomocí technologie WebDeploy (kromě klasického FTP přístupu).
Pokud používáte některou ze služeb poskytujících správu verzí (např. GitHub, CodePlex, TFS v cloudu a další), WebSites podporují i automatický deployment přímo ze source control (tzv. continuous delivery). Například pokud použijete Team Foundation Service, přidá se vám do projektu Build Definition, kterou můžete spouštět buď automaticky, nebo ručně, a která umí stáhnout poslední verzi zdrojových kódů, zkompilovat je, spustit na nich testy (jsou-li jaké) a nakonec tuto verzi nasadit přímo na Azure WebSites.
Zakládáme účet na Azure
Stačí navštívit stránku www.windowsazure.com a proklikat průvodce. Pro registraci je vyžadováno zadat údaje k platební kartě, ale standardně je nastaven tzv. spending limit, to znamená, že pokud vyčerpáte kredit $150, který máte v rámci Trial verze přidělen, Microsoft pozastaví hned všechny služby, takže nebudete platit nic. V případě, že tedy na trial verzi zapomenete nějaké služby běžet, nestrhnou vám z karty nic, ale služby budou pozastaveny.
Jakmile vám kredit vyprší, zobrazí se vám na detailu předplatného hláška, že máte nastaven spending limit, a budete jej moci vypnout.
Kliknutím na tlačítko Portal na obrazovce detailu předplatného se dostanete do hlavního portálu Azure, kde vidíte všechny svoje služby.
Na boku v menu vidíme všechny služby, které je možné vytvořit. K ostatním funkcím přistupujeme přes menu v pravém horním rohu.
Vytváříme novou WebSite
Otevřeme sekci Web Sites a klikneme na Create a new website. Máme 3 možnosti – buď vytvoříme novou website s výchozími nastaveními, v takovém případě zvolíme Quick create. Nebo můžeme chtít nastavit všechny možné parametry, v tom případě zvolíme Custom create. Případně můžeme vytvořit website z galerie předpřipravených, to bychom použili v případě, že potřebujeme narychlo zprovoznit nějaké hotové CMS nebo e-shop, např. DotNetNuke, BlogEngine.NET, Joomla, MediaWiki apod.
My vytvoříme website včetně všech nastavení, zvolíme tedy možnost Custom create.
Zadáme nějaký unikátní název website, vybereme datacentrum, v němž má být aplikace umístěna, dále zvolíme databázi a název connection stringu (pokud používáme ASP.NET). Jako databázi můžeme použít MS SQL Server (buď klasickou placenou databázi, nebo free databázi s max. velikostí 20 MB) nebo MySQL, což se hodí především pro PHP aplikace.
Na následující obrazovce zvolíme název databáze a vybereme server, na němž má být umístěna. Vzhledem k tomu, že žádný server ještě nemáme, založíme si nový (v budoucnu pak na tomto serveru můžete mít třeba 5 databází – z hlediska ceny to žádný význam nemá, databáze na jednom serveru mají společný přihlašovací účet, takže se nedoporučuje sdílet jeden server pro více aplikací, které spolu nesouvisí).
Na další obrazovce můžeme ještě určit některé parametry databáze, jako např. výchozí collation. Poté se již začne vytvářet website, což chvíli trvá. Jakmile je vytvořena, kliknutím na název otevřeme její detail.
Detail WebSite
Na záložce Dashboard vidíme základní informace o website, graf, na němž se časem zobrazí informace o vytíženosti aplikace. V sekci Web Endpoint Status můžeme nastavit monitoring funkčnosti a následně sledovat dostupnost aplikace. V sekci Autoscale Status je možné nastavit automatické škálování, které při větší zátěži aplikaci rozběhne na více serverech, a jakmile zátěž pomine, vrátí se na jeden server.
V pravé části si můžeme zobrazit connection string k databázi (View connection strings), stáhnout publish profil do Visual Studia pro nasazení aplikace (Download the publish profile), dále nastavit jméno a heslo pro FTP přístup (Set up deployment credentials), restartovat heslo v případě zcizení publish profilu (Reset your publish profile credentials) a nakonec nastavit automatické nasazení ze systému pro správu verzí.
V panelu dole jsou potom tlačítka pro zastavení, restart, smazání website a asi nejdůležitější je Manage domains, pomocí kterého je možné nastavit, aby webová aplikace běžela např. na doméně 2. řádu. Toto tlačítko je nyní zakázané, jelikož website běží ve Free módu, kde tato funkce není dostupná.
Na záložce Monitor můžeme podrobněji sledovat zatížení a chování aplikace, na záložce Configure je možné měnit nastavení aplikace, např. verzi .NET Frameworku a PHP, SSL certifikáty, úroveň logování a monitoringu aplikace, connection stringy a názvy souborů, které se použijí jako výchozí (např. index.html). Některá z těchto nastavení je možné specifikovat i pomocí souboru web.config.
WebSites mají aktuálně 3 režimy, ve kterých mohou fungovat.
- Free. Nelze provozovat na vlastní doméně, pouze na doméně něco.azurewebsites.net. Tento režim má mnoho omezení, a pokud se jedná o navštěvovanější aplikaci, pak brzy narazíte na limit přenášených dat – je omezen na 165MB denně. Nepodporuje škálování. Zdarma je jen 20MB SQL databáze, větší už se platí.
- Shared. Podobný model jako free, ale podporuje vlastní domény (bez HTTPS) a škálování. Datové přenosy jsou již placené a tudíž neomezené.
- Standard. Plnohodnotný režim, aplikace má vyčleněnou jednu nebo více Small, Medium nebo Large instancí. Vhodné pro větší a často navštěvované aplikace, lepší než 1 Medium instance budou 2 Small instance, pokud je aplikace napsána dobře a podporuje škálování.
Dále je zde možné nastavit i variantu použité databáze, kromě 20MB free databáze existují Web a Business edice, které se liší především maximálními možnými velikostmi databáze. Web má max. velikost 5GB, Business až 150GB. Každá databáze je k dispozici ve 3 replikách - v případě, že jedna selže, okamžitě přijde na řadu druhá.
Nedávno byla spuštěna ještě edice Premium (aktuálně v betaverzi), která nabízí vyšší výkon.
Na poslední obrazovce Linked Resources je možné přidat další databáze a zdroje, které aplikace používá. Jedná se čistě o logické propojení zdrojů, které spolu souvisí – např. kdybyste chtěli smazat databázi, která je přilinkovaná k website, tak vás portál upozorní, že databáze je zřejmě používána. Každopádně webová aplikace se může připojit i k databázi, která nalinkovaná není.
Nasazujeme aplikaci
Jakmile máme webovou aplikaci hotovou, zbývá ji nasadit. Máme v zásadě dvě možnosti – na stránce Dashboard si vytvoříme heslo pro FTP a připojíme se pomocí standardního FTP klienta, nahrajeme soubory, upravíme web.config atd. Druhou a praktičtější možností je stáhnout si publish profil, nahrát ho do Visual Studia a provést nasazení pomocí kliknutí na tlačítko Publish v kontextovém menu projektu v okně Solution Explorer.
Prohlížeč nám vrátí soubor s příponou .publishsettings, který uložíme na disk. Ve Visual Studiu klikneme pravým tlačítkem na naši ASP.NET aplikaci a vybereme možnost Publish. Objeví se průvodce pro nasazení aplikací.
Na první obrazovce klikneme na tlačítko Import a v dialogovém okně vybereme cestu k souboru .publishsettings. Na další obrazovce vidíme údaje, které Visual Studio použije pro nasazení. Používáme protokol WebDeploy.
Na třetí obrazovce můžeme vybrat build konfiguraci (Debug nebo Release), která se má nasadit (podle toho se provedou Web Config transformace, takže uvedeme-li např. v souboru Web.Release.config následující kód, upraví se connection string na výše uvedený). Více informací o Web Config transformacích najdete na MSDN.
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="DefaultDatabase"
connectionString="Data Source=tcp:kcd7i7xcqm.database.windows.net,1433;Initial Catalog=dnp_demo;User Id=dnp_demo@kcd7i7xcqm;Password=#####;"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
Správný connection string pro použití v cloudu najdete na záložce Dashboard po kliknutí na View connection strings.
Po dokončení procesu je webová aplikace nasazena a běží na výchozí adrese website.
Kromě protokolu WebDeploy bývá občas praktické nastavit i FTP přístup, občas se hodí mít možnost urgentně opravit nějakou drobnou chybičku v jednom souboru aniž byste museli pracně a zdlouhavě spouštět Visual Studio, otevírat projekt a nasazovat celou aplikaci. Nehledě na to, že aplikace může ukládat nějaké soubory třeba do složky App_Data, k níž se jinak nedostanete.
Škálovatelnost a omezení
V případě, že hodláte provozovat aplikaci pouze na 1 instanci, není potřeba prakticky nic řešit a aplikaci lze nasadit prakticky beze změny (pokud tedy neděláte nějaké šílenosti typu používání COM objektů, přístup na disk mimo adresář webové aplikace atd.). U Azure WebSites ale nevadí, když si aplikace zapisuje do vlastního adresáře, data se ani nikam neztratí.
V případě, že chcete aplikaci škálovat, je nutné si uvědomit, že aplikace běží na dvou různých serverech a load balancing probíhá na úrovni HTTP požadavků, i včetně situace, že první požadavek je nasměrován na první instanci, ale postback na tu samou stránku je odeslán na jinou instanci. Aplikace by si tedy neměla držet žádná důležitá data v paměti (cacheování nevadí, pokud jsou data při změnách vždy propsána ihned do databáze). Neměla by ani zapisovat na disk nic kromě dočasných souborů. Také použití session je problematické, jelikož ve standardním nastavení se session uchovává v paměti – doporučuji session nepoužívat vůbec, protože mimo tohoto problému přináší 100 problémů dalších i bez škálování, a pokud už ji použít musíte, pak ji ukládejte do databáze, aby na ni viděly všechny instance.
V případě, že potřebujete ukládat nějaké soubory, není možné je ukládat do filesystému, protože není kontrola nad tím, na jakou instanci se uloží (nevíte, která instance ten požadavek zrovna zpracovávala). Zde je vhodné použít prostředky Windows Azure, například Blob Storage, o němž si budeme povídat v některém z dalších dílů.
Pokud škálujete, je třeba si uvědomit, že nikdy nevíte, na jakém konkrétním serveru se požadavek provede. Proto je nutné tomu celou aplikaci přizpůsobit a vyhnout se praktikám, které by mohly dělat problémy, jako například již zmíněná session, ukládání souborů s daty na disk nebo držení dat v paměti.
Nastavení DNS
Pokud se jedná o reálnou aplikaci, asi málokdo ji chce provozovat na adrese něco.azurewebsites.net. Proto je vhodné na záložce Dashboard dole kliknout na tlačítko Manage Domains. Předtím je nutné website přepnout alespoň do režimu Shared, ve Free módu vlastní domény podporovány nejsou.
Dejme tomu, že jste vlastníky domény www.contoso.com a chcete tuto doménu nasměrovat na vytvořenou WebSite. Musíte nejprve správně nastavit DNS záznamy, aby tuto doménu směrovaly na Azure. Konfigurace DNS se provádí u každé domény jinak, záleží, kde jste doménu registrovali a hlavně kdo spravuje vaše DNS záznamy (často to bývá přímo registrátor, ale není tomu tak vždy).
Typicky je potřeba nastavit jak A záznam pro samotnou doménu contoso.com (na IP adresu, která je uvedena v dialogovém okně), tak i CNAME záznam pro subdoménu www.contoso.com – ten by měl vést na něco.azurewebsites.com.
Po nastavení DNS je třeba počkat, než se změna zpropaguje (typicky to trvá pár desítek minut, ale může to trvat i několik hodin, v určitých případech i několik dní), ale jakmile se změna zpropaguje, pak lze přidat doménu v dialogovém okně na obrázku. Po potvrzení začne aplikace fungovat i na zadané doméně.
No a to je pro tento díl vše. Příště si budeme povídat o SQL Azure, ukážeme si, jak dostat databázi do cloudu a zpět, jak se připojit k databázi přímo ze svého SQL Management Studia atd.