Opstarttaken configureren en uitvoeren voor een Azure-cloudservice (klassiek)

Belangrijk

Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten buiten gebruik gesteld. Nieuwe implementaties moeten gebruikmaken van het nieuwe implementatiemodel op basis van Azure Resource Manager Azure Cloud Services (uitgebreide ondersteuning).

U kunt opstarttaken gebruiken om bewerkingen uit te voeren voordat een rol wordt gestart. Bewerkingen die u mogelijk wilt uitvoeren, zijn onder andere het installeren van een onderdeel, het registreren van COM-onderdelen, het instellen van registersleutels of het starten van een langlopend proces.

Notitie

Opstarttaken zijn niet van toepassing op Virtual Machines, alleen op cloudserviceweb- en werkrollen.

Hoe opstarttaken werken

Opstarttaken zijn acties die worden uitgevoerd voordat uw rollen beginnen en die worden gedefinieerd in het bestand ServiceDefinition.csdef met behulp van het element Taak in het element Opstarten . Opstarttaken zijn vaak batchbestanden, maar het kunnen ook consoletoepassingen of batchbestanden zijn waarmee PowerShell-scripts worden gestart.

Omgevingsvariabelen geven informatie door aan een opstarttaak en lokale opslag kan worden gebruikt om informatie uit een opstarttaak door te geven. Een omgevingsvariabele kan bijvoorbeeld het pad opgeven naar een programma dat u wilt installeren en bestanden kunnen worden geschreven naar de lokale opslag die vervolgens later door uw rollen kunnen worden gelezen.

Uw opstarttaak kan informatie en fouten registreren in de map die is opgegeven door de omgevingsvariabele TEMP . Tijdens de opstarttaak wordt de omgevingsvariabele TEMP omgezet in de C:\Resources\temp\[guid].[ rolename]\RoleTemp-map bij uitvoering in de cloud.

Opstarttaken kunnen ook verschillende keren worden uitgevoerd tussen het opnieuw opstarten. De opstarttaak wordt bijvoorbeeld uitgevoerd telkens wanneer de rol opnieuw wordt gebruikt, en bij het opnieuw gebruiken van rollen wordt niet altijd opnieuw opgestart. Opstarttaken moeten zodanig worden geschreven dat ze zonder problemen meerdere keren kunnen worden uitgevoerd.

Opstarttaken moeten eindigen met een foutniveau (of afsluitcode) van nul om het opstartproces te voltooien. Als een opstarttaak eindigt met een foutniveau dat niet nul is, wordt de rol niet gestart.

Opstartvolgorde van rol

Hieronder ziet u de opstartprocedure voor de rol in Azure:

  1. Het exemplaar is gemarkeerd als Starten en ontvangt geen verkeer.

  2. Alle opstarttaken worden uitgevoerd op basis van hun kenmerk taskType .

    • De eenvoudige taken worden synchroon uitgevoerd, één voor één.

    • De achtergrond - en voorgrondtaken worden asynchroon gestart, parallel aan de opstarttaak.

      Waarschuwing

      IIS is mogelijk niet volledig geconfigureerd tijdens de opstarttaakfase in het opstartproces, waardoor rolspecifieke gegevens mogelijk niet beschikbaar zijn. Opstarttaken waarvoor rolspecifieke gegevens zijn vereist, moeten Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart gebruiken.

  3. Het proces van de rolhost wordt gestart en de site wordt gemaakt in IIS.

  4. De methode Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart wordt aangeroepen.

  5. Het exemplaar is gemarkeerd als Gereed en verkeer wordt doorgestuurd naar het exemplaar.

  6. De methode Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run wordt aangeroepen.

Voorbeeld van een opstarttaak

Opstarttaken worden gedefinieerd in het bestand ServiceDefinition.csdef in het element Taak . Het kenmerk commandLine specificeert de naam en parameters van het opstartbatchbestand of de consoleopdracht, het kenmerk executionContext specificeert het bevoegdheidsniveau van de opstarttaak en het kenmerk taskType geeft aan hoe de taak wordt uitgevoerd.

In dit voorbeeld wordt een omgevingsvariabele, MyVersionNumber, gemaakt voor de opstarttaak en ingesteld op de waarde '1.0.0.0'.

ServiceDefinition.csdef:

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
        <Environment>
            <Variable name="MyVersionNumber" value="1.0.0.0" />
        </Environment>
    </Task>
</Startup>

In het volgende voorbeeld schrijft het batchbestand Startup.cmd de regel 'De huidige versie is 1.0.0.0' naar het bestand StartupLog.txt in de map die is opgegeven door de omgevingsvariabele TEMP. De EXIT /B 0 regel zorgt ervoor dat de opstarttaak eindigt met een foutniveau van nul.

ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0

Notitie

In Visual Studio moet de eigenschap Kopiëren naar uitvoermap voor het opstartbatchbestand worden ingesteld op Altijd kopiëren om er zeker van te zijn dat het opstartbatchbestand correct is geïmplementeerd in uw project in Azure (approot\bin voor webrollen en approot voor werkrollen).

Beschrijving van de taakkenmerken

Hieronder worden de kenmerken van het element Taak in het bestand ServiceDefinition.csdef beschreven:

commandLine : hiermee geeft u de opdrachtregel voor de opstarttaak op:

  • De opdracht, met optionele opdrachtregelparameters, waarmee de opstarttaak wordt gestart.
  • Dit is vaak de bestandsnaam van een .cmd- of .bat batchbestand.
  • De taak is relatief ten opzichte van de map AppRoot\Bin voor de implementatie. Omgevingsvariabelen worden niet uitgebreid bij het bepalen van het pad en bestand van de taak. Als omgevingsuitbreiding is vereist, kunt u een klein .cmd-script maken waarmee uw opstarttaak wordt aangeroepen.
  • Dit kan een consoletoepassing zijn of een batchbestand waarmee een PowerShell-script wordt gestart.

executionContext : hiermee geeft u het bevoegdheidsniveau voor de opstarttaak op. Het bevoegdheidsniveau kan worden beperkt of verhoogd:

  • Beperkt
    De opstarttaak wordt uitgevoerd met dezelfde bevoegdheden als de rol. Wanneer het executionContext-kenmerk voor het runtime-element ook wordt beperkt, worden gebruikersbevoegdheden gebruikt.
  • Verhoogde
    De opstarttaak wordt uitgevoerd met beheerdersbevoegdheden. Hierdoor kunnen opstarttaken programma's installeren, IIS-configuratiewijzigingen aanbrengen, registerwijzigingen uitvoeren en andere taken op beheerdersniveau, zonder dat het bevoegdheidsniveau van de rol zelf wordt verhoogd.

Notitie

Het bevoegdheidsniveau van een opstarttaak hoeft niet hetzelfde te zijn als de rol zelf.

taskType : hiermee geeft u de manier aan waarop een opstarttaak wordt uitgevoerd.

  • Eenvoudige
    Taken worden synchroon uitgevoerd, één voor één, in de volgorde die is opgegeven in het bestand ServiceDefinition.csdef . Wanneer een eenvoudige opstarttaak eindigt met een foutniveau van nul, wordt de volgende eenvoudige opstarttaak uitgevoerd. Als er geen eenvoudige opstarttaken meer zijn om uit te voeren, wordt de rol zelf gestart.

    Notitie

    Als de eenvoudige taak eindigt met een foutniveau dat niet nul is, wordt het exemplaar geblokkeerd. Volgende eenvoudige opstarttaken en de rol zelf worden niet gestart.

    Om ervoor te zorgen dat uw batchbestand eindigt met een foutniveau van nul, voert u de opdracht EXIT /B 0 uit aan het einde van het batchbestandsproces.

  • background
    Taken worden asynchroon uitgevoerd, parallel met het opstarten van de rol.

  • Voorgrond
    Taken worden asynchroon uitgevoerd, parallel met het opstarten van de rol. Het belangrijkste verschil tussen een voorgrond - en achtergrondtaak is dat een voorgrondtaak voorkomt dat de rol wordt gerecycled of afgesloten totdat de taak is beëindigd. De achtergrondtaken hebben deze beperking niet.

Omgevingsvariabelen

Omgevingsvariabelen zijn een manier om informatie door te geven aan een opstarttaak. U kunt bijvoorbeeld het pad naar een blob plaatsen die een programma bevat dat moet worden geïnstalleerd, poortnummers die door uw rol worden gebruikt, of instellingen om de functies van uw opstarttaak te beheren.

Er zijn twee soorten omgevingsvariabelen voor opstarttaken; statische omgevingsvariabelen en omgevingsvariabelen op basis van leden van de klasse RoleEnvironment . Beide bevinden zich in de sectie Omgeving van het bestand ServiceDefinition.csdef en gebruiken beide het element Variabele en het naamkenmerk .

Statische omgevingsvariabelen maken gebruik van het waardekenmerk van het element Variabele . In het bovenstaande voorbeeld wordt de omgevingsvariabele MyVersionNumber gemaakt met een statische waarde van '1.0.0.0'. Een ander voorbeeld is het maken van een omgevingsvariabele StagingOrProduction die u handmatig kunt instellen op waarden van 'fasering' of 'productie' om verschillende opstartacties uit te voeren op basis van de waarde van de omgevingsvariabele StagingOrProduction .

Omgevingsvariabelen op basis van leden van de klasse RoleEnvironment maken geen gebruik van het waardekenmerk van het element Variable . In plaats daarvan wordt het onderliggende element RoleInstanceValue , met de juiste XPath-kenmerkwaarde , gebruikt om een omgevingsvariabele te maken op basis van een specifiek lid van de klasse RoleEnvironment . Waarden voor het XPath-kenmerk voor toegang tot verschillende RoleEnvironment-waarden vindt u hier.

Als u bijvoorbeeld een omgevingsvariabele wilt maken die 'true' is wanneer het exemplaar wordt uitgevoerd in de rekenemulator en 'false' bij uitvoering in de cloud, gebruikt u de volgende elementen Variabele en RoleInstanceValue :

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>

            <!-- Create the environment variable that informs the startup task whether it is running
                in the Compute Emulator or in the cloud. "%ComputeEmulatorRunning%"=="true" when
                running in the Compute Emulator, "%ComputeEmulatorRunning%"=="false" when running
                in the cloud. -->

            <Variable name="ComputeEmulatorRunning">
                <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
            </Variable>

        </Environment>
    </Task>
</Startup>

Volgende stappen

Meer informatie over het uitvoeren van enkele veelvoorkomende opstarttaken met uw cloudservice.

Uw cloudservice verpakken.