Windows Azure Startup Tasks im Emulatorbetrieb unterbinden

Azure LogoAuf der Suche nach einer Möglichkeit regelmäßige SQL Azure Backups als "Hintergrundprozess" durchführen zu lassen, bin ich über einen netten Blog Post von Steve Marx gestolpert:
Skipping Windows Azure Startup Tasks When Running in the Emulator
Dieser beschreibt, wie man die Ausführung von Startup Tasks, während des Betriebs im Compute Emulator, unterbindet.

 

Anpassen der Service Definition

Das, mit dem Windows Azure SDK 1.5 hinzugekommene, Feature "xPath Values in Windows Azure" erlaubt es, Umgebungsvariablen mit Werten aus der Azure Laufzeitumgebung zu befüllen.
Somit kann man zum Beispiel eine Umgebungsvariablen TestIsEmulated erzeugen, die den Wert aus der RoleEnvironment.IsEmulated Eigenschaft enthält.

Auszug aus der ServiceDefinition.csdef:

<ServiceDefinition name="StartupTasksUnterbinden" 
  xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="DummyRole" vmsize="ExtraSmall">
    <Startup>
      <Task commandLine="Startup.cmd"
            executionContext="elevated"
            taskType="background">
        <Environment>
          <Variable name="TestIsEmulated">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated"/>
          </Variable>
        </Environment>
      </Task>
    </Startup>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WorkerRole>
</ServiceDefinition>

 

 

Anpassen der Startup Skripte

Anschließend lässt sich dieser Wert im Startup Skript abfragen, um so die Ausführung zu unterbinden.
Hierzu fügt man zu Beginn des Skriptes folgende Zeile hinzu:

if "%TestIsEmulated%"=="true" goto :EOF

 

Beispielanwendung

Hierzu ein kleines Beispiel:

Ich habe ein Cloud Projekt mit einer Worker Rolle erstellt.
Diese Worker Rolle enthält folgendes Skript (Startup.cmd):

@echo off
del Ergebnis.txt
if "%TestIsEmulated%"=="true" goto :EOF
echo Startup Task wurde ausgefuehrt. > Ergebnis.txt

 

Wenn also das Startup Task ausgeführt wird, wird eine Text Datei mit dem Inhalt "Startup Task wurde ausgefuehrt." erstellt.

In der Run Methode des Worker Role Entry Points prüfe ich nun, ob diese Datei exisiert und gebe die entsprechene Trace Meldung aus:

Auszug aus dem Worker Role Entry Point:

public class WorkerRole : RoleEntryPoint
{
  public override void Run()
  {
    while (true)
    {
      Thread.Sleep(10000);
      if (File.Exists(@"Ergebnis.txt"))
        Trace.WriteLine(File.ReadAllText(@"Ergebnis.txt"));
      else
        Trace.WriteLine("Startup Task wurde NICHT ausgeführt.");
    }
  }
  // ...	
}

 

Bei Ausführung im Compute Emulator sieht das Ergebnis wie folgt aus:

Compute Emulator - Worker Role Trace

 


Download Download der Beispielanwendung:

Weitere Informationen unter:


Check Also

Time Machine Backups nach Microsoft Azure

Seit einigen Jahren verwende ich eine Apple Time Capsule, um meine Time Machine Backups an einem zentralen Ort speichern zu können. Bislang hatte das für mich auch vollkommen ausgereicht. Seitdem ich jedoch immer mehr unterwegs bin, habe ich nach einer Lösung gesucht, die ich auch von unterwegs nutzen kann. In diesem Blog Post zeige ich deshalb, wie man Time Machine Backups nach Microsoft Azure machen kann.