Så här konfigurerar och kör du startuppgifter för en Azure Cloud Service (klassisk)

Viktigt

Cloud Services (klassisk) är nu inaktuell för nya kunder och kommer att dras tillbaka den 31 augusti 2024 för alla kunder. Nya distributioner bör använda den nya Azure Resource Manager-baserade distributionsmodellen Azure Cloud Services (utökad support).

Du kan använda startåtgärder för att utföra åtgärder innan en roll startar. Åtgärder som du kanske vill utföra omfattar installation av en komponent, registrering av COM-komponenter, inställning av registernycklar eller start av en tidskrävande process.

Anteckning

Startåtgärder gäller inte för Virtual Machines, endast för webb- och arbetsroller för molntjänster.

Så här fungerar startåtgärder

Startåtgärder är åtgärder som vidtas innan dina roller börjar och definieras i filen ServiceDefinition.csdef med hjälp av elementet Aktivitet i startelementet . Startåtgärder ofta är batchfiler, men de kan också vara konsolprogram eller batchfiler som startar PowerShell-skript.

Miljövariabler skickar information till en startaktivitet, och lokal lagring kan användas för att skicka information från en startaktivitet. En miljövariabel kan till exempel ange sökvägen till ett program som du vill installera, och filer kan skrivas till lokal lagring som sedan kan läsas senare av dina roller.

Startaktiviteten kan logga information och fel till katalogen som anges av TEMP-miljövariabeln . Under startaktiviteten matchas TEMP-miljövariabeln till C:\Resources\temp\[guid].[ rolename]\RoleTemp directory när den körs i molnet.

Startåtgärder kan även köras flera gånger mellan omstarter. Startåtgärden körs till exempel varje gång rollen återanvänds och rollåteranvändningar kanske inte alltid innefattar en omstart. Startåtgärder bör skrivas på ett sätt som gör att de kan köras flera gånger utan problem.

Startåtgärder måste sluta med en felnivå (eller slutkod) på noll för att startprocessen ska slutföras. Om en startaktivitet slutar med en felnivå som inte är noll startar inte rollen.

Startordning för roll

Följande listar startproceduren för rollen i Azure:

  1. Instansen är markerad som Startar och tar inte emot trafik.

  2. Alla startåtgärder körs enligt deras taskType-attribut .

    • De enkla uppgifterna körs synkront, en i taget.

    • Bakgrunds- och förgrundsaktiviteterna startas asynkront, parallellt med startaktiviteten.

      Varning

      IIS kanske inte är fullständigt konfigurerat under startaktivitetsfasen i startprocessen, så rollspecifika data kanske inte är tillgängliga. Startåtgärder som kräver rollspecifika data bör använda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

  3. Rollvärdprocessen startas och webbplatsen skapas i IIS.

  4. Metoden Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart anropas.

  5. Instansen är markerad som Klar och trafiken dirigeras till instansen.

  6. Metoden Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run anropas.

Exempel på en startaktivitet

Startåtgärder definieras i filen ServiceDefinition.csdef i elementet Task . Attributet commandLine anger namn och parametrar för startbatchfilen eller konsolkommandot, attributet executionContext anger behörighetsnivån för startaktiviteten och attributet taskType anger hur aktiviteten ska köras.

I det här exemplet skapas en miljövariabel, MyVersionNumber, för startaktiviteten och anges till värdet "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>

I följande exempel skriver batchfilen Startup.cmd raden "Den aktuella versionen är 1.0.0.0" till den StartupLog.txt filen i katalogen som anges av TEMP-miljövariabeln. Raden EXIT /B 0 ser till att startaktiviteten slutar med en felnivå på noll.

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

Anteckning

I Visual Studio ska egenskapen Kopiera till utdatakatalog för startbatchfilen anges till Kopiera alltid för att vara säker på att startbatchfilen har distribuerats korrekt till projektet i Azure (approot\bin för webbroller och approot för arbetsroller).

Beskrivning av uppgiftsattribut

Följande beskriver attributen för aktivitetselementet i filen ServiceDefinition.csdef :

commandLine – Anger kommandoraden för startaktiviteten:

  • Kommandot, med valfria kommandoradsparametrar, som påbörjar startaktiviteten.
  • Detta är ofta filnamnet för en .cmd- eller .bat batchfil.
  • Uppgiften är relativ till mappen AppRoot\Bin för distributionen. Miljövariabler expanderas inte för att fastställa sökvägen och filen för uppgiften. Om miljöexpansion krävs kan du skapa ett litet .cmd-skript som anropar startuppgiften.
  • Kan vara ett konsolprogram eller en batchfil som startar ett PowerShell-skript.

executionContext – Anger behörighetsnivån för startaktiviteten. Behörighetsnivån kan vara begränsad eller förhöjd:

  • Begränsad
    Startaktiviteten körs med samma behörigheter som rollen. När attributet executionContext för Runtime-elementet också är begränsat används användarbehörigheter.
  • Förhöjda
    Startaktiviteten körs med administratörsbehörighet. Detta gör att startåtgärder kan installera program, göra ändringar i IIS-konfigurationen, utföra registerändringar och andra uppgifter på administratörsnivå, utan att öka behörighetsnivån för själva rollen.

Anteckning

Behörighetsnivån för en startaktivitet behöver inte vara samma som själva rollen.

taskType – Anger hur en startaktivitet körs.

  • Enkel
    Aktiviteter körs synkront, en i taget, i den ordning som anges i filen ServiceDefinition.csdef . När en enkel startaktivitet slutar med en felnivå på noll körs nästa enkla startuppgift. Om det inte finns några fler enkla startåtgärder att köra startas själva rollen.

    Anteckning

    Om den enkla uppgiften slutar med en felnivå som inte är noll blockeras instansen. Efterföljande enkla startåtgärder och själva rollen startar inte.

    För att säkerställa att batchfilen slutar med en felnivå på noll kör du kommandot EXIT /B 0 i slutet av batchfilprocessen.

  • background
    Uppgifter körs asynkront, parallellt med starten av rollen.

  • Förgrunden
    Uppgifter körs asynkront, parallellt med starten av rollen. Den största skillnaden mellan en förgrundsaktivitet och en bakgrundsaktivitet är att en förgrundsaktivitet förhindrar att rollen återanvänds eller stängs av tills aktiviteten har avslutats. Bakgrundsaktiviteterna har inte den här begränsningen.

Miljövariabler

Miljövariabler är ett sätt att skicka information till en startuppgift. Du kan till exempel placera sökvägen till en blob som innehåller ett program att installera, eller portnummer som din roll ska använda, eller inställningar för att styra funktioner i startuppgiften.

Det finns två typer av miljövariabler för startåtgärder. statiska miljövariabler och miljövariabler baserat på medlemmar i klassen RoleEnvironment . Båda finns i avsnittet Miljö i filen ServiceDefinition.csdef och båda använder variabelelementet och namnattributet .

Statiska miljövariabler använder värdeattributet för elementet Variable. Exemplet ovan skapar miljövariabeln MyVersionNumber som har ett statiskt värde på "1.0.0.0". Ett annat exempel är att skapa miljövariabeln StagingOrProduction som du manuellt kan ange till värden för "mellanlagring" eller "produktion" för att utföra olika startåtgärder baserat på värdet för miljövariabeln StagingOrProduction .

Miljövariabler som baseras på medlemmar i klassen RoleEnvironment använder inte värdeattributet för elementet Variable . I stället används det underordnade elementet RoleInstanceValue , med lämpligt XPath-attributvärde , för att skapa en miljövariabel baserat på en specifik medlem i klassen RoleEnvironment . Värden för XPath-attributet för åtkomst till olika RoleEnvironment-värden finns här.

Om du till exempel vill skapa en miljövariabel som är "true" när instansen körs i beräkningsemulatorn och "false" när den körs i molnet använder du följande element i Variable och 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>

Nästa steg

Lär dig hur du utför några vanliga startuppgifter med din molntjänst.

Paketera din molntjänst.