Azure App Sevice: úvod do platformy pro vaše webové a API aplikace

Nainstalovat webovou aplikaci třeba na IIS server se zdá velmi jednoduché a ono vlastně je. Něco takového je ale jen drobným úkolem v rámci vývoje a provozu webově orientovaných aplikací a API. Patchování serveru, automatizace release, tvorba CI/CD pipeline, balancing, autoscaling, SSL akcelerace, zálohování, troubleshooting, logování a debugging, monitoring aplikace, autentizace uživatelů, vývojová prostředí, zátěžové testy - to všechno patří k úspěšnému vývoji a provozu aplikace. Azure App Service je platforma, která má přesně všechny tyto úkony dobře rozmyšlené a dostupné jako službu. To je důvod, proč jsou App Services nejpopulárnější platformní (PaaS) službou v Azure.

Jak vypadá svět bez PaaS

Nejprve si zvědomíme co znamená provozovat webovou aplikaci nebo API tradičním způsobem ve VM.

Vývojáři a testeři potřebují přístup do různých prostředí (Dev, Test, QA, pre-prod apod.) a ta musí někdo udržovat z pohledu verze OS a knihoven, protože configuration drift (rozdílnost těchto prostředí od produkce) vede často k selhání v produkci. Často to pro ně znamená instalovat nebo udržovat si VM s web serverem, v případě nutnosti vytvořit nový nebo k získání prostupu na firewallu musí čekat na někoho jiného. Deployment je často ruční a vývojář tak musí nejprve vytvořit balíček (např. WebDeploy) a ten se instaluje na příslušný server, chybí provázanost s version control systémem (například VSTS Git nebo GitHub apod.) a Continous Integration (Jenkins má pevně dané agent VM, neprovádí přímo deployment). Vývojář typicky musí zajistit autentizaci a autorizaci uživatelů.

Nasazování aplikace vyžaduje ruční vytvoření příslušného počtu nodů a zajištění balancování na úrovni hardwarového balanceru, který zárověň slouží jako SSL akcelerátor.  Toto vyžaduje koordinaci aplikačního, síťového a bezpečnostního týmu a řeší se zadáním servisního ticketu. Konfigurace je statická a nepodporuje automatické škálování, tedy snížení výkonu přes noc, standardní výkon přes den a schopnost navýšit výkon v případě detekce špičky v požadavcích. Testování je z velké části ruční a výkonnostní test se dělá jen několikrát za rok, protože získat příslušné testovací zdroje je zdlouhavé a nákladné. Provoz se stará o patchování OS, instalaci nových nodů a to buď ručně nebo s nasazením nástrojů jako je Chef či Ansible. Musí také provádět zálohování a recovery. Logy jsou zapisovány lokálně do serverů a IT často nasazuje další řešení pro centralizaci logů. Vedle toho se instalují nástroje na monitoring aplikace (APM). V případě potíží v produkci dostanou vývojáři pouze logy, nemají přístup k debuggeru, snapshot debuggingu nebo možnost připojit se přímo do instance a provádět troubleshooting state (například zkontrolovat, že byly nainstalovány všechny potřebné součásti). Typicky neexistuje možnost si produkční prostředí rychle naklonovat do testovacího ani provést bezpečný a rychlý rollback či rollforward  mezi pre-prod (staging) a produkcí. Typicky, z důvodu manuálního řízení, není k dispozici testování nových verzí přímo v produkci (A/B testing) na malém vzorku uživatelů (schopnost poslat definovanou část uživatelů do staging verze).

Azure App Services

Nejoblíbenější PaaS služba v Azure, App Services, se zaměřuje právě na všechny zmíněné nevýhody tradičního přístupu. Systém je samoobslužný a lze v něm dobře definovat role různých správců (Dev, Ops, monitoring, ...). Vývojáři mohou na kliknutí v portálu či z Visual Studio, z příkazové řádky, napojením na version control systém nebo integrovanou CI/CD pipeline třeba s Microsoft VSTS nebo Jenkins provést deployment aplikace do požadovaného prostředí (Dev, Test, Prod, ...). Stačí vzít zdrojový kód s potřebnými předpisy a Azure se postará o instalaci a zajištění všech potřebných dependencies ať už jde o .NET, Java, Node.JS, PHP či další z podporovaných jazyků. Preferujete Linuxový svět a balení aplikace do Docker kontejneru místo použití přímo kódu? Žádný problém s Web Apps for Linux - místo kódu použijete kontejner, všechno ostatní je stejné.

Vaše aplikace běží na dedikovaném worker node, tedy na pozadí je jedna a více VM. Ty jsou ovšem plně ve správě Azure (takže je ani nevidíte), který zajišťuje jejich patchování, upgrady, redundanci, instalaci vašich aplikačních prostředí a aplikací samotných. Na tyto nody také Azure balancuje zátěž a umožňuje jejich automatické škálování podle kalendáře či v reakci na metriku, například délku HTTP fronty. Počet nodů (a tím i celková cena) je tak plně dynamický a můžete v noci šetřit a přes den mít víc výkonu a jednoduše pokrýt hlavní špičky třeba desetinásobkem kapacity, protože za použité zdroje platíte za minuty použití. Tyto worker nody jsou v klasickém App Service postaveny na Windows (licenování neřešíte, je součástí platformní služby) a IIS technologii s podporou .NET, Java, PHP, Node.js nebo Python. V Preview jsou k dispozici také Linux nody s podporou Node.js, .NET Core, PHP a Ruby, ale také s využitím vlastních Docker kontejnerů, tedy s libovolným frameworkem (třeba i aplikace v Go apod.).

App Services pro vás spravují balancer a firewall jako službu a to včetně SSL akcelerace. Pokud automaticky škálujete (přidáváte a ubíráte nody) platforma automaticky zajišťuje rozdělování zátěže, terminaci SSL a samozřejmě automatickou a konzistentní instalaci aplikací na nově přidané nody. Kromě toho v rámci jedné aplikace můžete vytvořit několik prostředí, tzv. Deployment Slot. Vedle sebe tak může konzistentně běžet Dev prostředí pro vývojáře (snadno si spustí aplikaci pro ověření funkčnosti), Test (základní zkoušení funkčnosti, integračních návazností, výkonu), QA a Staging (komplexní testování) apod. Navíc prostředí můžete mezi sebou prohazovat a rychle tak například provést release z pre-prod do prod (a případně zpět, pokud potřebujete rollback). Dokonce můžete provádět A/B testování, tedy například říci, že 5% uživatelů směřuje na staging slot a 95% na produkční slot - testovat na reálném provozu a procento průběžně zvyšovat až nakonec provést kompletní překlopení celé produkce. App Services centrálně sbírají všechny logy a díky integraci s Application Insights můžete nad nimi vyhledávat velmi mocným query jazykem v reálném čase, analyzovat výkon a odezvu aplikace historicky (včetně machine learning pro detekci anomálních situací) i real-time, přehled za jednotlivá volání a části aplikace i chování uživatelů na stránce (jak vaši aplikaci využívají). Autentizaci a autorizaci uživatelů lze vyřešit bez nutnosti psát kód, tedy přímo platformní službou. V neposlední řadě má provoz i vývojáři řadu daších nástrojů na troubleshooting a to včetně remote debuggeru a snapshot debuggingu (tedy schopnost hlubokého debuggingu bez ovlivnění provozu). To všechno s řízením přístupu (RBAC) k těmto funkcím a prostředím podle role administrátora či vývojáře v organizaci na základě (Azure) Active Directory.

App Services kromě klasických webových aplikací velmi dobře podporují i tvorbu moderních API aplikací a mají specifickou podporu pro mobilní aplikace. Velmi vhodně pak můžete App Services kombinovat se serverless platformou v Azure. Konkrétně Azure Functions, které umožní spuštění kódu v reakci na nějakou událost nebo pravidelně (CRON), a které kromě serverless varianty (platíte za jednotlivá spuštění) můžete hostovat i ve svých App Services zdrojích. Pro napojení na byznys aplikace se stovkami hotových kontektorů a grafickým designerem lze využít Azure Logic Apps. Aplikační služby se pak často kombinují s Azure Redis pro cache, Azure CDN pro distribuci statického obsahu, databázové platformy jako služba (Cosmos DB včetně režimu kompatibilního s MongoDB, SQL, MySQL, Postgres), Service Bus pro messaging, Notification Hub pro notifikace mobilních zařízení, API Management pro řízení komplexních API a mnohé další.

A to zdaleka není všechno...

 

Na těchto stránkách můžete očekávat celou sérii článků zaměřenou na nejpopulárnější platformní službu v Azure - App Services.



Privátní leč cenově dostupná WebApp díky Private Link pro App Service v Azure AppService
Postupné nasazování a testování aplikací na lidech - kanárci, A/B, green/blue na příkladu kadeřníka AppService
Azure Stack: platformní služby pro webové aplikace s Application Services z pohledu uživatele AppService
Azure Stack: platformní služby pro webové aplikace s Application Services z pohledu administrátora AppService
Předávání tajností do App Service (WebApp) přes Azure Key Vault AppService