Azure VM Role 3

De VM Role is een IAAS (Infra structure as a Service) oplossing. In bijna alle presentaties die ik gezien heb, is bij IAAS het updaten van het OS soms wel je eigen verantwoording en soms niet. Bij een VM Role ben je zelf verantwoordelijk voor de updates. Dit zul je dan dus moeten doen via Differencing disks.

iaas

Nu ik er zo over nadenk, dan is dat ook wel logisch. De VM Role is bedoeld voor een Lift en Shift scenario. Je legacy applicatie draait in een afgepaste omgeving. Dus wil je ook je applicatie testen als er updates komen. Wellicht zitten er updates tussen die de juiste werking van je applicatie tegen gaan.

Maar wel een aandachtspunt voordat je kiest voor een VM role!

Azure VM Role 2

Zoals in mijn vorige blogpost heb ik laten zien, dat je een VM role kunt maken en dat je die moet uploaden naar Azure storage. De VM uit de vorige blogpost was min of meer zinloos. De legacy applicatie (een VB6 dll) was wel geinstalleerd, maar werd verder binnen mijn scenario niet gebruikt. Tja, dat geeft niet de kracht weer van de VM Role.

Daarom heb ik een andere toepassing bedacht. Ik heb een Azure webrole. Op deze Webrole staat een aspx met daarop een iFrame. Dit iFrame bevat een url naar een tweede webserver. Deze webserver draait op poort 8888. De webpagina maakt gebruik van een legacy VB6 component om 2 shorts op te tellen.

vmr2_01

De VM uit de vorige blogpost heb ik wel een beetje moeten aanpassen. Ten eerste moest ik de Webserver role toevoegen. Ik had al de Application Role, maar nu ook een Webserver role. Hierdoor heb ik de beschikking over IIS. Deze heb ik geconfigureerd op poort 8888 ipv 80. Daarna een webpagina toegevoegd met twee textboxen en een button. Achter de button zit functionaliteit om de methode op het VB6 component aan te roepen om de twee getallen op te tellen.

vmr2_05

Nadat ik deze nieuwe VHD (ruim 10 Gb) geupload had en de bijbehorende Azure solution gedeployed.

vmr2_02vmr2_03

Ging ik natuurlijk direct naar de URL op poort 8888. Tot mijn verbazing zag ik dat het niet werkte. Ik had het toch getest? Gelukkig kun je met RDP naar de server om te kijken wat er wellicht mis is. Daar op, op local host, werkte mijn website wel. Ik was vergeten om de FireWall aan te passen. Zoals jullie zien, ben ik niet een echte infra beheerder.

vmr2_06

Nadat ik de Firewall aangepast had, werkte mijn voorbeeld prima.

vmr2_04

Er is nu een nadeel. De aanpassing aan de FireWall zit niet in de VHD. Dus als de Azure Fabric bedankt dat mijn VM role reimaged moet worden, dan ben ik de aanpassingen weer kwijt.

Ik moet dus de VHD vervangen door eentje waar de FireWall wel goed is ingesteld. Maar om nu weer 10 Gb te uploaden is toch niet echt handig en prettig. Daarom is het mogelijk om een Differencing disk te maken, dat kost dan minder upload en is mijn FireWall probleem wel opgelost. Daarover later meer.

Kortom een VM Role kan goed werken voor een Lift en Shift solution!

Azure VM Role

Sinds de PDC van 2010 is ook de Windows Azure VM Role toegevoegd aan het rijtje van mogelijke rollen voor Windows Azure Applicatie. Met een VM Role kun je zelf een VM maken en deze naar de Cloud brengen. Dit zou interessant kunnen zijn om legacy applicaties in de Cloud te plaatsen.

Een VM voor de VM Role moet natuurlijk op een bepaalde manier opgebouwd zijn. Op deze site wordt dat keurig stap-voor-stap uitgelegd. http://msdn.microsoft.com/en-us/library/gg433125.aspx Via dit stappenplan heb ik ook een VM gemaakt op een Windows 2008 R2 server met Hyper-V. Op deze VM heb ik een “legacy” applicatie geinstalleerd (gemaakt door Bart Hoogeveen in Visual Basic 6). Dus als ik mijn VM in Azure heb, zal ik dit terug moeten zien.

In een van de stappen moet je Windows Azure VM Role Integration Components installeren. Deze software installeert ook iets om te connecten met de storage.

vmrole00

Als je de VM dan gesysprepd hebt, dan kun je deze uploaden naar Azure. (Deze stappen staan op bovenstaande site allemaal uitgelegd) Daarvoor moet je Azure Toolkit prompt in Administrator mode starten. Je moet eerst met CSUPLOAD de connectionstring vast leggen, dat zie je in het eerste deel. Daar kun je de werkelijk upload beginnen.

vmrole1

Zoals je ziet in het plaatje, begon het tool CSUPLOAD gewoon met preparing de feitelijke upload. Maar toen het feitelijk uploaden begon kreeg ik onderstaande foutmelding. In de cirkel zie je dat ik inderdaad “Anywhere Europe” gekozen had, dat is per definitie geen single location Winking smile

vmrole2

Gelukkig is het tool wel handig opgezet. Het hele preparing gedeeelte hoeft niet nog een keer te gebeuren, hij begint nu met het feitelijk uploaden. Dit duurt wel een tijdje.

vmrole3

Bij het preparen worden er twee tijdelijke bestanden aangemaakt. Eentje met de extensie .PREPED en eentje met de extensie .DIGEST.

vmrole4

Tijdens deze upload actie zie je dan op het Windows Azure portaal de volgende status.

vmrole5

Als de upload klaar is, dan zie je op de command line en op het Windows Azure portaal het volgende.

vmrole6

vmrole7

Tja en dan heb je hem geupload. Vreemd genoeg is er geen mogelijkheid om de VM dan te starten.

In Visual Studio kun je een Virtual Machine role toevoegen. Daarbij kies je dan de geuploade VHD. Zolang deze upload nog niet klaar is, kan je hem niet kiezen.

vmrole9

vmrole10

Tijdens deze actie liep ik wel tegen een probleem aan. Zoals je ziet, gebruik ik een solution die ik al gedeployed had. De locatie van deze solution was “Anywhere Europe”. Aangezien de VHD in North Europe staat, krijg je een foutmelding tijdens het deployen. Op zichzelf een beetje vreemd, want het is in de Cloud dus zou locatie niet echt uit moeten maken. Dat verdient nog wel wat uitzoekwerk.

vmrole10a

vmrole11

Nadat eea geinstalleerd was en ready, kon ik met een RDP sessie bij VM. Uiteraard stond mijn Legacy applicatie op de plaats waar ik hem gelaten had Winking smile

vmrole12

Erg leuk, nu ga ik mijn voorbeeld nog iets uitbreiden zodat ik mijn Legacy applicatie ook ga gebruiken vanuit mijn Azure app. Stay Tuned.

Azure ShutDown VM

In mijn vorige blogpost vertelde ik dat je een Web/WorkerRole kunt shutdownen als je via RDP er naar toe gaat. Ik dacht toen ook, dat de Role niet meer uit zichzelf zou opkomen. Maar dat leek mij eigenlijk niet logisch! Tenslotte is de belofte, dat de Azure fabric ook ‘zomaar’ zelf instanties kan stoppen en starten. Dan is het niet logisch, dat een geshutdownde instantie niet meer uit zichzelf opkomt.

Dus heb ik de proef maar eens op de som genomen. Via RDP de instance geshutdownd en gewacht. Mijn Azure Webrole was inderdaad niet meer bereikbaar. Maar de Azure portal toonde nog wel dat de Role ready was.

vm_shutdown0

Echter na enkele minuten, verscheen ineens onderstaande in de Portal.

vm_shutdown1

Vervolgt door de bekende statussen.

vm_shutdown2

vm_shutdown3

De Azure fabric zorgt er dus zelf voor dat de instance weer zelf online komt. Natuurlijk ontslaat dit je niet van de verplichting om zelf je applicatie te monitoren. Je dienstverlening ligt wel even op zijn gat en daar moet je als SAAS aanbieder iets mee.

Windows Azure – Data Sync

Hoewel er nog geen standaard manier voor Backup en Restore van SQL Azure is, zijn er inmiddels wel mogelijkheden om iets dergelijks op te zetten. Een discussie over Backup en Restore ga ik hier nu niet houden. Voor Azure storage zul je nog steeds iets zelf moeten bouwen.

Met Data Sync kun je je data van een SQL Server database geautomiseerd en gescheduled kopieren naar een andere database. Ik heb dat ook eens uitgeprobeerd.

Allereerst heb ik een nieuwe SQL Azure database aangemaakt op mijn Azure account.

sync1

Daarna ga je naar SQL Azure Data Sync site en daar moet je soort Wizard doorlopen. Tijdens deze Wizard geef je naam voor de Sync group, de credentials voor de SQL Azure en welke tabellen je wilt syncen.

sync2

In mijn voorbeeld heb ik gekozen voor de tabel met alle verjaardagen en gebeurtenissen in mijn familie en vriendenkring. Nadat je de Wizard hebt doorlopen, zul je zien dat in de SQL Azure database een aantal tabellen zijn toegevoegd.

sync3

Helaas verandert er op deze tabel niet zoveel, dus moest ik iets verzinnen om de Data Sync een beetje nut te geven. Op mijn test webpage van de vorige blogpost heb ik een button gemaakt waarmee je rijtje aan de tabel toevoegt. Met een Data Sync schedule wordt dan dagelijks een kopie van de data naar de andere database gezet.

sync4

Aangezien dit een background proces is, moet je dus op een of andere manier kunnen controleren of er daadwerkelijk een sync heeft plaats gevonden.

sync5

Bovenstaande plaatje is gemaakt voordat de Sync schedule is uitgevoerd. Uiteraard is er ook een Dashboard om zien welke Sync groups uitgevoerd zijn.

sync9

sync10

Bijvoorbeeld van de test schermen:

sync6

sync7

sync8

Zoals gezegd, ik kan mij verschillende scenario’s voorstellen waarbij Data Sync interessant is. Of dat perse ook voor een Backup en Restore scenario geldt, dat betwijfel ik.

Met deze CTP kun je binnen SQL Azure van de ene naar de andere database syncen. Met de volgende CTP kun je ook syncen naar een SQL Server on premise. Dat zou voor product tabellen etc erg interessant kunnen zijn.

Remote Desktop Azure Instance (2)

Nu je kunt RDP-en naar een WebRole of WorkerRole, krijg je wel meer inzicht in de opbouw van Azure VM’s.

Voor het instellen van RDP kijk dan op http://msdn.microsoft.com/en-us/library/gg433010.aspx en http://marcelmeijer.net/blogs/marcel/archive/2010/11/30/remote-desktop-azure-instance.aspx.

Punt 1:

Iedere VM bestaat uit 3 disks. Op:

  • Disk C: staat kennelijk allerlei soorten van logging etc.
  • Disk D: is de Windows systeem disk, daarop staat het OS met al zijn instellingen
  • Disk F: daarop staat de Applicatie. Dit is een uitgepakte versie van de package die je deployed.

vm1

vm2

Zoals je ziet, zou je nu de DEFAULT.ASPX kunnen aanpassen. Dit is niet geen best practice, want de Azure fabric zou kunnen verzinnen om een nieuwe instances te geven omdat er met deze instance iets mis is. Daarmee zijn alle lokale wijzigingen wel gepersisteerd op deze disk, maar niet onderdeel van de package. Voor de test heb ik mijn DEFAULT.ASPX aangepast, tot op heden is er nog niet gefailoverd.

(NB dat kun je zien aan de tekst op het scherm van Windows, Azure Connect voorbeeld uit de vorige blogpost. Als er staat “… is not on. Try …”, dan kijk je naar de aangepaste tekst. Anders staat er “… is not off. …”. Was een typo in mijn project Winking smile)

Punt 2:

Sinds de PDC2010 is er een nieuwe variant van een Virtual Machine size bijgekomen. We hadden al Small, Medium, Large, ExtraLarge, daar is bij gekomen ExtraSmall.

Virtual Machine Size CPU Cores Memory Disk
ExtraSmall Shared 768 MB 20 GB
Small 1 1.75 GB 225 GB
Medium 2 3.5 GB 490 GB
Large 4 7 GB 1000 GB
ExtraLarge 8 14 GB 2040 GB

Om kosten te besparen heb ik mijn WebRoles inmiddels omgezet naar ExtraSmall. Dat zie dan ook als je de properties van de VM opvraagt.

vm3

http://msdn.microsoft.com/en-us/library/ee814754.aspx

Punt 3:

Als je RDPt naar de VM en je wilt je sessie sluiten, dan heb je ook de mogelijkheid om de VM te shut downen. Dat lijkt mij niet niet gewenst, in de meeste productie organisaties is het start menu beperkt.

Vervelend is wel, dat als je per ongeluk kiest voor Shut Down, dan zie je dit niet in het Windows Azure portaal. Ook het refreshen van het portaal verandert de status niet.

vm4

Windows Azure Connect

Tijdens de afgelopen PDC 2010 werden er verschillende nieuwigheidjes voor Windows Azure aangekondigd. Een daarvan was de Windows Azure Connect functionaliteit.


Deze Connect technologie is bedoeld om het scenario met Cloud en een koppeling met on-premise software/servers of databases. Waarbij het niet of nog niet mogelijk is om de on-premise software te porten naar de Cloud. Met een VM role zou je legacy software natuurlijk ook naar de Cloud kunnen verplaatsen, maar dan moet deze software wel op een Windows 2008 R2 platform geinstalleerd kunnen worden.


Ik heb een kleine test opstelling gemaakt. Het gaat mij om de werking en niet direct om de zinnige toepassing in dit scenario. Het scenario ziet er als volgt uit, op mijn laptop (KRIMSON) heb ik een SQL Server database. In de Cloud heb ik een WebRole. Op de Webpagina van de WebRole connect ik naar de SQL Server op mijn Laptop. De opgehaalde data toon ik in het scherm.


azureconnect01


Het scherm ziet als volgt uit:


azureconnect11


Het zijn twee Read-only Textboxen en een button. Achter de button zit deze code. Zoals je ziet geen specifieke Azure code. Sterker nog in een normale Webapplicatie zou je deze code ook tegen kunnen komen. (RED: Oke, voldoet niet helemaal aan enige standaard)



   1: protected void Button1_Click(object sender, EventArgs e)
   2: {
   3:     TextBox1.Text = string.Empty;
   4:     TextBox2.Text = string.Empty;
   5:     Label1.Text = string.Empty;
   6:  
   7:     try
   8:     {
   9:         using (SqlConnection sqlc = 
  10:                     new SqlConnection(
  11:                           “Data Source=KRIMSON;
  12:                           Initial Catalog=TestDb;
  13:                           User Id=<user>;Password=<wachtwoord>”)
  14:               )
  15:         {
  16:             sqlc.Open();
  17:  
  18:             using (SqlCommand command = sqlc.CreateCommand())
  19:             {
  20:                 command.CommandText = “SELECT tekst FROM AzureConnectExampleDb”;
  21:                 string obj1 = (string)command.ExecuteScalar();
  22:  
  23:                 TextBox1.Text = obj1;
  24:  
  25:                 command.CommandText = “SELECT ‘Connected Server: ‘ + @@SERVERNAME”;
  26:                 string obj2 = (string)command.ExecuteScalar();
  27:  
  28:                 TextBox2.Text = obj2;
  29:             }
  30:         }
  31:     }
  32:     catch (Exception ex)
  33:     {
  34:         Label1.Text = ex.Message;
  35:     }
  36: }

Om de connectie met mijn Laptop mogelijk te maken moeten we wel een aantal dingen regelen. In de properties van de Webrole we de Activation token van de Endpoint nodig. Deze kun je opvragen op de portal.


azureconnect15


Op de Azure Management portal is linksonder een button met Virtual Network. Deze button brengt je naar de pagina met de instellingen van de Virtual Network settings.


azureconnect02azureconnect03


Ook het instellen van een locale Endpoint is hier mogelijk. Daarvoor wordt je naar een andere site door verwezen. (RED: Jammer dat de link geen echte link is.)


azureconnect05


Als je naar de URL gaat en de software installeert, krijg je in de Action center een nieuw icoon. Ook in de Eventviewer is er een aparte sectie voor de Logging van Windows Azure Connect.


azureconnect06azureconnect08


Na deze installatie en het overnemen van de Activation token in de properties van de WebRole kunnen we het Azure project deployen naar de Cloud. Deze deployment is niet anders dan gebruikelijk.


Op de Azure Managemet portal moeten we dan connectie tussen de lokale endpoint en de Webrole leggen. Anders is zijn het nog steeds twee losse en opzichzelf staande End-points. De combinatie van de twee maakt het spannend. Als de connectie niet gemaakt is, dan zie je een rood kruis in het Windows Azure Connect icoon in het Action center. Als de connectie tussen beide End-points tot stand gebracht is, dan is dat aan het icoon te zien.


azureconnect04


Als je naar de WebRole RDP-t kun je zien dat op de VM van de WebRole dezelfde software voor het opzetten van de verbinding is geinstalleerd.


azureconnect09


Maar nu terug naar mijn test opstelling. De WebRole was geinstalleerd op mijn Staging area en via de URL http://099837cc5ff64bfeb021794498f63cac.cloudapp.net/ kom ik op de webpagina van de WebRole. En na de klik op de button komt de informatie uit de Database inderdaad op mijn scherm.


azureconnect13


En als ik de SQL Server services op mijn Laptop stop, dan krijg je inderdaad een foutmelding dat de connectie niet gemaakt kan worden.


azureconnect14


Oke, het kostte nog wel wat hoofdbrekers om de Test opstelling ook inderdaad werkend te krijgen. Mijn SQL Server was op het lokale netwerk niet bereikbaar, daarvoor moest ik nog een paar gaten in mijn Firewall maken. Dit was ook nodig voor Windows Azure Connect.


Ik geloof dat er beslist toepassingen zijn voor deze manier van koppelen tussen de Cloud en on-premise servers/databases. Maar of dit ook de optimale oplossing betwijfel ik. Vooral voor overgangsituaties is het een handige toepassing.