Exporter (0) Imprimer
Développer tout

Exécuter des tâches de démarrage dans Azure

Mis à jour: mai 2014

Vous pouvez utiliser des tâches de démarrage pour exécuter des opérations avant le démarrage d'un rôle. Parmi les opérations que vous pouvez réaliser figurent l'installation d'un composant, l'enregistrement de composants COM, la définition des clés du Registre ou le démarrage d'un processus au long cours.

noteRemarque
Les tâches de démarrage ne s'appliquent pas aux rôles de machine virtuelle.

Les tâches de démarrage sont des actions qui sont effectuées avant le début de vos rôles. Les tâches de démarrage sont définies dans le fichier ServiceDefinition.csdef à l'aide de l'élément Task dans l'élément Startup. Souvent les tâches de démarrage sont des fichiers de commandes, mais elles peuvent également être des applications console ou des fichiers de commandes qui démarrent des scripts PowerShell.

Les variables d'environnement passent des informations dans une tâche de démarrage et le stockage local peut être utilisé pour transmettre ces informations hors d'une tâche de démarrage. Par exemple, une variable d'environnement peut spécifier le chemin d'accès à un programme que vous voulez installer et des fichiers peuvent être écrits dans le stockage local qui peut être lu ultérieurement par vos rôles.

Votre tâche de démarrage peut enregistrer des informations et des erreurs dans un répertoire spécifié par la variable d'environnement TEMP. Pendant la tâche de démarrage, la variable d'environnement TEMP est résolue dans le répertoire C:\Resources\temp\<guid>.<rolename>\RoleTemp lors de l'exécution sur le cloud.

Les tâches de démarrage peuvent également être exécutées plusieurs fois entre des redémarrages. Par exemple, la tâche de démarrage sera exécutée chaque fois que le rôle est recyclé, et les recyclages de rôle n'incluent pas toujours un redémarrage. Les tâches de démarrage doivent être écrites de façon à permettre une exécution répétée sans problèmes.

Les tâches de démarrage doivent s'arrêter avec errorlevel (ou code de sortie) égal à zéro pour que le processus de démarrage soit terminé. Si une tâche de démarrage se termine avec un errorlevel différent de zéro, le rôle ne démarrera pas.

La liste suivante indique la procédure de démarrage de rôle dans Microsoft Azure :

  1. L'instance est marquée comme Starting et ne reçoit pas de trafic.

  2. Toutes les tâches de démarrage sont exécutées en fonction de leur attribut taskType.

    • Les tâches simples sont exécutées de façon synchrone, une par une.

    • Les tâches d'arrière-plan et de premier plan sont démarrées de façon asynchrone, en parallèle de la tâche de démarrage.

      WarningAvertissement
      IIS peut ne pas être configuré complètement lors de l'étape de la tâche de démarrage, les données spécifiques au rôle ne sont alors pas disponibles. Les tâches de démarrage qui ont besoin de données spécifiques au rôle doivent utiliser Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

  3. Le processus hôte de rôle est démarré et le site est créé dans IIS.

  4. La méthode Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart est appelée.

  5. L'instance est marquée Ready et le trafic est acheminé vers l'instance.

  6. La méthode Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run est appelée.

Les tâches de démarrage sont définies dans le fichier ServiceDefinition.csdef, dans l'élément Task. L'attribut commandLine spécifie le nom et les paramètres du fichier de commandes de démarrage ou de la commande de la console, l'attribut executionContext spécifie le niveau de privilège de la tâche de démarrage et l'attribut taskType spécifie l'exécution de la tâche.

Dans cet exemple, une variable d'environnement, MyVersionNumber, est créée pour la tâche de démarrage et définie à « 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>

Dans l'exemple suivant, le fichier de commande Startup.cmd écrit la ligne « La version actuelle est 1.0.0.0 » dans le fichier StartupLog.txt dans le répertoire spécifié par la variable d'environnement TEMP. La ligne EXIT /B 0 garantit que la tâche de démarrage s'arrête avec un errorlevel égal à zéro.

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

noteRemarque
Dans Visual Studio, la propriété Copier dans le répertoire de sortie pour votre fichier de commandes de démarrage doit être définie à Toujours copier afin de vous assurer que votre fichier de commandes de démarrage est correctement déployé dans votre projet sur Microsoft Azure (approot\bin pour les rôles Web et approot pour les rôles de travail).

Vous trouverez ci-dessous une description des attributs de l'élément Task dans le fichier ServiceDefinition.csdef :

commandLine - spécifie la ligne de commande pour la tâche de démarrage :

  • La commande avec des paramètres de ligne de commande en option, qui débute la tâche de démarrage.

  • Souvent, il s'agit du nom de fichier d'un fichier de commandes .cmd ou .bat.

  • Il peut s'agir d'une application console ou d'un fichier de commande qui démarre un script PowerShell. Pour des informations spécifiques sur l'utilisation d'un script PowerShell en tant que tâche de démarrage, consultez Utiliser un script PowerShell en tant que tâche de démarrage.

executionContext - spécifie le niveau de privilège pour la tâche de démarrage. Le niveau de privilège peut être limité ou élevé :

  • limited - la tâche de démarrage s'exécute avec les mêmes privilèges que le rôle. Quand l'attribut executionContext pour l'élément Runtime est également limited, les privilèges utilisateur sont utilisés.

  • elevated - la tâche de démarrage s'exécute avec des privilèges d'administrateur. Cela permet aux tâches de démarrage d'installer des programmes, d'apporter des modifications à la configuration IIS, de modifier le Registre et d'effectuer d'autres tâches d'administration, sans augmenter le niveau de privilège du rôle.

noteRemarque
Le niveau de privilège d'une tâche de démarrage peut être supérieur au niveau de privilège d'un rôle. Une tâche de démarrage peut utiliser des privilèges elevated pour installer des programmes ou modifier les paramètres IIS, tandis qu'un rôle peut utiliser des privilèges limited pour des raisons de sécurité.

taskType - spécifie la façon dont une tâche de démarrage est exécutée.

  • Les tâches simple sont exécutées de façon synchrones, une à la fois, dans l'ordre spécifié dans le fichier ServiceDefinition.csdef. Quand une tâche simple se termine avec un errorlevel égal à zéro, la tâche de démarrage simple suivante est exécutée. Quand toutes les tâches simple ont été exécutées, le rôle est démarré.

    noteRemarque
    Si la tâche simple se termine avec un errorlevel différent de zéro, l'instance sera bloquée. Les tâches de démarrage simple suivantes et le rôle ne démarreront pas.

    Pour vous assurer que votre fichier de commandes se termine par un errorlevel égal à zéro, exécutez la commande EXIT /B 0 à la fin du processus de votre fichier de commandes.

  • Les tâches background sont exécutées de façon asynchrones, en parallèle du démarrage du rôle.

  • Les tâches foreground sont exécutées de façon asynchrones, en parallèle du démarrage du rôle. La principale différence entre une tâche foreground et une tâche background est que la tâche foreground n'empêche pas l'exécution du rôle pendant l'exécution de la tâche foreground. Cela signifie également que si la tâche foreground ne se termine pas, alors le rôle ne s'arrêtera pas ou ne sera pas recyclé. Les tâches background n'ont pas cette restriction, les rôles peuvent être recyclés même si les tâches background ne sont pas terminées.

Les variables d'environnement permettent de passer les informations à une tâche de démarrage. Par exemple, vous pouvez indiquer le chemin vers un objet blob qui contient un programme à installer ou les numéros de port que votre rôle va utiliser ou des paramètres pour contrôler les fonctionnalités de votre tâche de démarrage.

Il existe deux types de variables d'environnement pour des tâches de démarrage, des variables d'environnement statiques et des variables d'environnement basées sur les membres de la classe RoleEnvironment. Elles se trouvent dans la section Environment du fichier ServiceDefinition.csdef et utilisent l'élément Variable et l'attribut name.

Les variables d'environnement statiques utilisent l'attribut value de l'élément Variable. L'exemple ci-dessus crée la variable d'environnement MyVersionNumber avec une valeur statique de « 1.0.0.0 ». Un autre exemple consiste à créer une variable d'environnement StagingOrProduction à laquelle vous pouvez manuellement attribuer les valeurs « intermédiaire » ou « production » pour exécuter des actions de démarrage différentes en fonction de la valeur de la variable d'environnement StagingOrProduction.

Les variables d'environnement basées sur les membres de la classe RoleEnvironment n'utilisent pas l'attribut value de l'élément Variable. À la place, l'élément RoleInstanceValue enfant, avec la valeur d'attribut xPath appropriée, sont utilisés pour créer une variable d'environnement basée sur un membre spécifique de la classe RoleEnvironment. Les valeurs pour l'attribut xPath afin d'accéder aux différentes valeurs RoleEnvironment se trouvent dans Valeurs xPath dans Azure.

Par exemple, pour créer une variable d'environnement qui a la valeur « true » quand l'instance s'exécute dans l'émulateur de calcul et la valeur « false » lors d'une exécution dans le cloud, utilisez les éléments Variable et RoleInstanceValue suivants :

    <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>

Voir aussi

Afficher:
© 2014 Microsoft