In vielen Fällen decken die vorinstallierten Virtuellen Maschinen der Windows Azure Plattform alles ab, was das Entwicklerherz begehrt.
Doch was mache ich, wenn ich weitere Software in meiner Windows Azure Rolle benötige oder die Systemeinstellungen verändert werden müssen?
Hier kommen die Windows Azure Startup Tasks ins Spiel.
Dieser Blog Post gibt einen Überblick, welche Möglichkeiten die Windows Azure Startup Tasks bieten, um Problemstellungen, wie die oben genannten, zu lösen.
Wie funktionieren Windows Azure Startup Tasks
Mit Windows Azure Startup Tasks können Skripte bzw. Befehle, als Teil der Startroutine von Web- oder Worker-Rolle, ausgeführt werden.
Hierzu muss die ServiceDefinition.csdef angepasst werden:
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="WebRole1"> <Startup> <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" /> </Startup> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> </WebRole> </ServiceDefinition>
-
Innerhalb des <Startup> Elements können eine oder mehrere <Task> Elements eingefügt werden.
Mit der Reihenfolge der <Task> Elemente wird auch die Startreihenfolge der Startup Tasks festgelegt. - Der Wert des commandLine Attributes enthält den Namen des Programms oder Skriptes, welches ausgeführt werden soll (Relativer Pfad zum Stammverzeichnis der Applikation).
-
Der Wert des executionContext Attributs legt die Rechte des Startup Prozesses fest:
-
limited
Das Startup Task wird mit den gleichen Rechten, wie die der Windows Azure Rolle, ausgeführt. -
elevated
Das Startup Task wird mit den Rechten eines Administrators ausgeführt.
Das verwendete Benutzerkonto ist "NT AUTHORITYSYSTEM".
-
limited
-
Der Wert des taskType Attributes gibt die Art des Startup Prozesses an:
-
simple (Standardwert)
Die Ausführung des Startvorganges wird erst fortgesetzt, wenn das Startup Task beendet wurde. -
background
Die Ausführung des Startvorganges wird parallel mit dem Startup Task ausgeführt.
Diese Startup Task Art ist unter anderem dafür geeignet, Hintergrundprozesse zu initiieren. -
foreground
Ähnlich dem Background Startup Task.
Im Gegensatz zum Background Startup Task, kann die Windows Azure Rolle so lange nicht neu gestartet werden, bis der Startup Task beendet ist.
-
simple (Standardwert)
Hinweis
Die Startup Skripte bzw. Befehle sollten so gestaltet sein, dass sie auch mehrmals hintereinander gestartet werden können, ohne unerwünschte Seiteneffekte aufzuweisen.
Lebenszyklus einer Windows Azure Rolle
Zum besseren Verständnis möchte ich den Lebenszyklus einer Windows Azure Rolle kurz skizieren:
Nachdem die cspkg und cscfg Dateien in die Windows Azure Plattform hochgeladen wurden, sucht der Fabric Controller passenden Hosts für die Virtuellen Maschinen und erzeugt mehrere Differential VHD Dateien.
Mehr Informationen zu diesem Thema:
Inside Windows Azure, the Cloud Operating System with Mark Russinovich
Hinweis
Der Fabric Controller hat nichts mit der Windows Server AppFabric oder Windows Azure AppFabric zu tun, sondern ist die Basissoftware, die die Windows Azure Plattform steuert.
Sobald die VMs gestartet wurden, werden die Startup Tasks in der angegebenen Reihenfolge gestartet.
Die IISConfigurator.exe führt anschließend die Konfiguration der Internet Information Services (IIS) durch.
Hierzu werden die Einträge des <Sites> Elements, aus der ServiceDefinition.csdef, verwendet.
Außerdem werden die OnStart, Run und später OnStop Methoden, der von RoleEntryPoint abgeleiteten Klasse, ausgeführt.
Tips & Tricks
Anbei noch ein paar Tips & Tricks zu diesem Thema.
Erstellen von Startup Skripten in Visual Studio
Beim Erstellen der Skriptdateien mit Visual Studio, muss man sicher stellen, dass in den Eigenschaften die "Copy to Output Directory" Einstellung auf "Copy always" gesetzt ist.
Außerdem muss die Datei mit dem "Unicode (UTF-8 without signature) – Codepage 65001" Encoding gespeichert sein.
Remote Desktops Verbindung zum Debuggen nutzen
Um die Remote Desktop Verbindung zum Debuggen nutzen zu können, sollte man die Startup Tasks auf den taskType="Background" stellen. Somit steht RDP auch bei fehlgeschlagenen Startup Tasks zur Verfügung.
PowerShell Skripte
Die PowerShell ist standardmäßig bei den Windows Azure VMs vorinstalliert.
Allerdings erlaubt die ExecutionPolicy nicht, dass unsignierte Skripte ausgeführt werden können.
Je nach verwendeten Betriebssystem bzw. osFamily Einstellungen können folgende Befehle vor bzw. zum ausführen von PowerShell Skripten benutzt werden.
Windows Server 2008 SP1 bzw. osFamily="1"
reg add HKLMSoftwareMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell /v ExecutionPolicy /d Unrestricted /f
Windows Server 2008 R2 bzw. osFamily="2"
powershell -ExecutionPolicy Unrestricted ./MeinSkript.ps1