dinsdag 6 augustus 2013

Visual Studio in Azure

Wie aan Windows Azure denkt, denkt in eerste instantie aan schaalbare hostingvormen waarin je een webapplicaties kunt draaien en nagenoeg onbegrenste opslagmogelijkheden hebt. Windows Azure heeft echter veel meer te bieden. In eerdere blogs heb je al kennis kunnen maken met Cloud Services, Windows Azure Sql Database, Access Control Service, Windows Azure Service Bus en gedistribueerde cache.
Het basisprincipe blijft dat je een virtuele omgeving draait in één van de datacentra van Microsoft. Zo'n virtuele omgeving is niets anders dan een enorm bestand dat een compleet besturingssysteem bevat. Het is alsof je jouw harde schijf met Windows en alles erop en eraan in een computer van Microsoft plugt. Zo'n omgeving kun je direct uit de bibliotheek van Windows Azure trekken, maar je kunt ook jouw eigen omgeving samenstellen en deze in Windows Azure hangen. Dit gaat via Windows Azure Virtual Machines.

In het kader van "de schoorsteen moet ook roken" heeft Microsoft ook hierin nogal wat werk uit handen genomen. Zo kun je complete basisomgevingen uit de bibliotheek trekken waarop reeds geïnstalleerde producten staan en deze naar believen uitbreiden. Natuurlijk met een prijs. We gaan eens bekijken hoe dat in zijn werk gaat.

Alleereerst log je in op de Azure Portaal. Van daaruit ga je naar de sectie "Virtual Machines" (afbeelding 1). Van hieruit is het allemaal vrij vanzelfsprekend. Klik op "Create A Virtual Machine" hetgeen leidt naar het scherm in afbeelding  2.


Afbeelding 1. De "Virtual Machines" groep.
Afbeelding 2. Selecteerd "from gallery" om een omgeving te selecteren met een specifieke toepassing.
Met de optie "Quick Create" kun je snel een omgeving opzetten en met "From Gallery" kun je hetzelfde bewerkstelligen, maar dan met iets meer werk. We kiezen "From Gallery" en komen bij de wizard in afbeelding 3.


Afbeelding 3. De voorgefabriceerde omgevingen.
Uit dit lijstje selecteer je welke applicatie je op de omgeving wilt hebben. Zoals je ziet, is er een grote hoeveelheid omgevingen met daarop geïnstalleerde toepassingen. Zo zijn er omgevingen met SqlServer (2008 t/m 2014 in alle soorten en maten), BizTalk servers, SharePoint Servers en zowaar een aantal Linux distributies (waarom ook niet), zoals SUSE, Ubuntu en CentOS. De omgeving met Visual Studio Ultimate 2013 trok echter mijn aandacht omdat zo'n Ultimate editie knetterduur (meer dat 10.000,-) is. Vervolgens moet je de omgeving configureren (afbeelding 4). 


Afbeelding 4. Vrij riante omgeving. Specificeer hier ook de credentials die je nodig hebt om in te loggen op de omgeving.
Voor deze omgeving wordt "Large" aanbevolen, dus 4 processoren en 7 GB ram. OK, dat gaat al in de papieren lopen. Zo'n omgeving kost toch al gauw €200,- per maand. Als je de omgeving, na gebruik, netjes uitzet, kun je de kosten reduceren to €0,27 per uur. Dat valt dan weer mee, maar reken je niet rijk. Dit zijn slechts de hostingskosten. De licentiekosten, die op dit moment nog onbekend zijn, komen hier nog bij.
Daarna moet je aangeven in welke cloud service de omgeving komt te draaien (afbeelding 5). Let op! Dit is geen machine. Het is een cluster van omgevingen waarbinnen meerdere virtuele machines kunnen draaien. Handig voor load balancers. Daarnaast zul je nog het datacentrum, waarin de machine komt te draaien, moeten opgeven (region), de storage account waarin de VHD (het bestand dat de harde schijf met daarop de omgeving representeert) wordt opgeslagen. Eventueel kun je nog een Availability Set opgeven. Hiermee ben je niet zo afhankelijk van hinderlijke storingen in het datacentrum.


Afbeelding 5. Configuratie van de service, region, storage en availability.
Tenslotte nog wat endpoints opgeven om te kunnen communiceren met de omgeving. Een remote desktop endpoint en een endpoint om via PowerShel met de omgeving te kunnen interacteren zijn hierbij wel handig. Vandaar dat deze standaard al zijn ingevuld (afbeeldig 6). 


Afbeelding 6. Endpoints definieren.
In nog geen 10 minuten wordt nu een omgeving met Visual Studio Ultimate 2013 in elkaar gedraaid. Wanneer dit gelukt is, kun je aan de slag. In de Windows Azure Portal kun je de zojuist aangemaakte omgeving bewonderen en bedienden (afbeelding 7).


Afbeelding 7. De omgeving is in gereedheid.
Onderin het scherm vind je een aantal bedieningsfuncties:
  1. Connect. Hiermee leg je een remote desktop verbinding met de omgeving. Het downloadt een .rdp bestand dat je kunt activeren waarmee de remote desktop sessie start.
  2. Restart. Om de omgeving te herstarten (reboot)
  3. Shut Down. Om de omgeving uit te zetten. Belangrijk omdat hiermee de kosten stoppen.
  4. Attach. Hiermee kun je een extra vhd aan jouw omgeving hangen. Het komt erop neer dat je een extra "harde schijf" aan jouw omgeving hangt.
  5. Detach Disk. Verwijder de extra harde schijf weer.
  6. Capture. Maak een copie van de huidige image die je vervolgens weer als een basistemplate inzet.
  7. Delete. Verwijder de virtual machine. (Verwijdert niet de .vhd blob in de store!)
Wanneer je de "Connect" knop kiest, wordt de remote desktop verbinding tot stand gebracht en kom je op de virtuele omgeving (afbeelding 8). Van hieruit kun je dan Visual Studio starten (afbeelding 9).


Afbeelding 8. Server 2012 met Visual Studio Ultimate 2013.
Afbeelding 9. Visual Studio draaiende vanuit de cloudomgeving.
Visual Studio op een virtuele omgeving lijkt mij een interessante optie in Windows Azure. Temeer daar Visual Studio Ultimate erg duur is. Tot dusver betaal je nog de hostingskosten (€0,27 per uur), maar daarbij zullen nog de licentiekosten bij komen (geen idee wat die gaan worden). Je hebt dan wel de mogelijkheid om waar dan ook op jouw ontwikkelomgeving te kunnen werken, mits er een internet verbinding is, natuurlijk. Het trekt ook niet zo'n zware wissel op de gewenste hardware die bij iedere Visual Studio release veeleisender lijkt te worden. Voor de Microsoft trainingen zou dit wel eens een handige oplossing kunnen zijn in plaats van die zware omgevingen die nu worden aangeboden. Ik zie het nog wel een keer gebeurden dat de MOC-trainingen op deze manier worden aangeboden. 

donderdag 1 augustus 2013

Windows Azure Sql Database backup

Een heet hangijzer in Windows Azure Sql Database was de beperking om backups te maken van jouw database in de cloud. Er waren allerlei kunstgrepen nodig om toch maar een geldige kopie van de database te krijgen. In een eerdere blog heb ik een aantal van die kunstgrepen beschreven. De beste oplossing was om een kopie van de database te maken en deze naar een backup package (bacpac) te exporteren. Sinds een week is het mogelijk om dit proces door Windows Azure te laten uitvoeren.

Om een backup te maken van de database, ga je eerst naar de Portal van Windows Azure. Van daaruit ga je naar de database groep en selecteer je de database die je wilt exporteren. In het menu van de database is nu een tab erbij gekomen: Configuration. Je komt dan uit op het venster van afbeelding 1.

Afbeelding 1. Het exportscherm om de Windows Azure Sql Database te exporteren.
De inhoud van dit venster spreekt redelijk voor zich. De "Export Status" zet je op automatic. Vervolgens specificeer je een storage account waarin de backup package (bacpac) wordt opgeslagen. Daarnaast zul je moeten aangeven om de hoeveel dagen deze export moet worden uitgevoerd en hoe laat. Dit is even een lastig gegoochel met de UTC tijd. In Nederland moet je één of twee uur van de huidige tijd aftrekken afhankelijk van de winter- of zomertijd. Bij Retention geef je aan  hoe lang je de bacpac wilt bewaren. Ofschoon schijfruimte in overvloed aanwezig is, is het niet gratis. Met deze automatische weggooiactie voorkom je onverwachte kosten. Zorg wel dat je ten minste één bacpac bewaard. Dat kun je bewerkstelligen door de checkbox "Always keep at least one export" aan te vinken. Tenslotte specificeer je de loginnaam en het wachtwoord voor de database server. De automated export zal namelijk een tijdelijke kopie van de database op de server maken waarvan de bacpac wordt gegenereerd. Vergeet niet op de "Save" knop onderin beeld te klikken. 
Let ook even op de setting "Allowed Services" in afbeelding 2. Je vindt hem bij de configuratie van de database server (waar je ook de toegestane ip-adressen opgeeft). Zorg dat die op "Yes" staat, anders kan de automated export geen verbinding maken met de server.


Afbeelding 2. Zorg ervoor dat Windows Azure Services op "Yes" staat.

Wanneer de export geslaagd is, zie je in de storage de volgende container staan (afbeelding 3) met daarin de gegenereerde bacpac


Afbeelding 3. De door de Automated Export aangemaakte container waarin de bacpac staat.

Als eenmaal zo'n bacpac aanwezig is, kun je vrij eenvoudig een database hiervan maken. Ga hiervoor naar de "Databases" in de Azure Portal en selecteer "Import" (onderin beeld). Het leidt tot het importvenster uit afbeelding 4.


Afbeelding 4. Een oude bekende. Het importvenster om bacpacs te importeren.
Hier selecteer je de bacpac, naam van de database en de database server, waarop hij komt te draaien. Vergeet niet de "Advanced Settings" te selecteren als je meer wilt dan die standaard 1GB Web database.

Het is ook mogelijk om de bacpac op een on premise SQL Server te importeren. In Sql Server Managment Studio activeer het het contextmenu op de "databases" node en selecteer je "Import Data-tier application...". Je wordt dan door de wizard uit afbeelding 5 geleid (introductiescherm achterwege gelaten).


Afbeelding 5. De import van de bacpac in SSMS.
Aanvankelijk gaf deze import de volgende fout:

Internal Error.  The internal target platform type SqlAzureDatabaseSchemaProvider does not support schema file version '2.5'.

Dit probleem werd verholpen door de laatste versie van SQL Server Data Tools te installeren.

Automated Export is wederom een welkome aanwinst in Windows Azure. Je kunt nu eenvoudig, op gezette tijden, een backup van de database maken. Hij is vrij lomp in die zin dat het alles of niets is, maar het is in ieder geval een begin. Een groot nadeel vind ik het afhandelen van triggers in de database. In tenminste één geval bleek de import niet te slagen door een lastige trigger. Omdat een bacpac eigenlijk gewoon een .zip bestand is, kun je nog wel wat morrelen aan de inhoud, maar het zou beter zijn als de activering van triggers bij import optioneel zou zijn.
Voor het besteproduct is de huidige oplossing echter redelijk werkbaar.