Migrace aplikací na platformu Azure–materiály ke 2. dílu ke stažení

Ve středu 11.1. se uskutečnil LiveMeeting na téma migrace aplikací na Azure platformu.  Po prvním dílu věnovaném migraci relační databáze, se druhý díl soustředil na migraci aplikační vrstvy. Zde jsou kompletní materiály a odpovědi na položené otázky ke druhému dílu. Pokud se chcete zúčastnit dalších dílů a nejste dosud přihlášeni, můžete tak učinit zde.

Otázky

Otázky jsem si dovolil stylisticky i jazykově upravit.

Platí se i za instanci virtuálu pokud je ve stavu "Stopped"?
Účtuje se za jakýkoliv nasazený virtuál, neboť to znamená závaznou alokaci hardwarových prostředků, tedy náklady na straně provozovatele – ať už je zastavený anebo běží. Na portále na to svítí červené upozornění.

Je možné zkombinovat v jedné aplikaci jednu webovou aplikaci a jednu WCF službu, obě běžící v IIS a přístupné přes HTTP zvenku?
Pokud jsou ve stejném IIS web site, tak je to zcela triviální a nemusíte dělat nic. Pokud by byly v různých web sitech, je možné je rovněž provozovat v rámci jedné role, ale vyžaduje to určitou práci s konfiguračním souborem, více zde.

Jak je to do budoucna s podporou aplikací běžících na Linuxu?
Tyto spekulace se příležitostně objevují, nicméně žádné oficiální ohlášení tohoto záměru v tuto chvíli neexistuje.

Jaká je řádově průměrná doba života jednoho virtuálu (dokud není např. při havárii nahrazen jiným)?
Těžko to takto říct, ale pokud máte nastavenou automatickou náhradu operačního systému při vydání nové verze (což většina lidí má), bude tato doba shodná s periodou jeho vydávání, tedy cca 1 měsíc.

Jak se nasadí vlastní certifikáty pro HTTPS?
Není to nic složitého. Certifikát včetně privátního klíče uploadujete prostřednictvím Azure portálu. V aplikaci se pak na certifikát odkazujete pomocí thumbprintu (certifikát není z bezpečnostních důvodů součástí aplikačního balíčku). Více např. zde.

Jak je to s možností přiřazení vlastní domény 2. řádu a tím přidělení statické IP adresy?
Služba v cloudu nemá statickou IP adresu. Má trvalé DNS jméno (např. mojeaplikace.cloudapp.net). IP adresa se pro nasazenou aplikaci nemění, nicméně její stálost není nijak smluvně zaručena. Zrušením nasazené aplikace se IP adresa vrátí někam do poolu, při dalším nasazení aplikace může dostat IP adresu jinou. Doporučeným postupem je udělat CNAME záznam v doméně www.mojefirma.cz mířící na mojeaplikace.cloudapp.net

Pokud se při re-deploymentu mění IP, jak je nastaveno TTL u DNS záznamu - po dobu TTL tedy moje aplikace nemusí byt dostupná?
Předně je nutno říct, že pokud se provádí standardní upgrade, IP adresa se zachová a není žádná nedostupnost. Vámi popsaná situace nastává pouze tehdy, pokud službu nejprve smažete a pak nasazujete novou (čímž tam sám vnesete celkem dlouhou nedostupnost). TTL jsem nenašel nikde oficiálně publikované, ale z experimentů se mi zdá, že je to pouze 10s.

Pokud worker role zpracovává úlohy z fronty (Azure queue), jak zjistit, že byla vložena nová úloha do fronty, aniž bych se periodicky ptal? Existuje možnost to odchytit jako nějakou událost?
O žádné takové možnosti nevím, je nutno se periodicky dotazovat. Azure Storage a Azure Compute jsou zcela oddělené služby, jejich provázání nějakým podobným mechanismem by bylo z architektonického hlediska problematické.

Jak provést upgrade aplikace s worker rolí, pokud chci počkat, než dopočte nějakou dílčí část úlohy?
Obecně to není úplně snadné, protože restart role může být způsoben řadou různých okolností, ať už iniciovaných vámi anebo infrastrukturou. K dispozici máte metodu RoleEntryPoint.OnStop, kde můžete nějaké věci dokončit, poklidit, případně čistě přerušit. Je ale třeba vzít v úvahu, že vše musí být provedeno rychle (řekněme v horizontu sekund), jinak bude role násilně ukončena.

Existuje podpora pro Web role pro SSO, jak proti AD tak proti Facebook, Twitter, nebo Google?
K tomuto účelu slouží služba Access Control Service, která odstíní váš web od jednotlivých poskytovatelů identity. Bližší popis a seznam podporovaných poskytovatelů najdete zde.

Co potřebuji znát, nebo jak se můžu k virtuálu připojit přes Remote Desktop?
Při vytváření aplikace zadáte jméno, heslo a datum expirace účtu. Připojíte se pomocí spojení definovaného v .rdp souboru, který si můžete stáhnout z Azure portálu. Více informací zde (uživatelské rozhraní je dnes již mírně jiné).

Pokud mám WCF službu (apl. server pro win-klienta) a zastavím thread (např. pomocí Suspend nebo pomocí WaitOne), následně pošlu IIS Extensionu, pro zobrazení dialogového okna na klientu (po dobu otevření okna na klientu Managed-thread stále čeká na odpověď), po odkliknutí kód pokračuje v závislosti na odpovědi z klienta). Je toto v cloudu možné?
Nejsem si jistý, zda zrovna toto je recept na škálovatelnou aplikaci... Nicméně pokud to opravdu takto chcete, pak není v principu žádná odlišnost od on-premises řešení. Jenom pozor na jednu věc, pokud aplikace běží ve farmě více instancí, jsou servery load-balancovány a není vůbec žádná záruka, že se odpověď dostane zpátky ke stejnému serveru, který na ni čeká.

Michael