La nouvelle mouture du SDK Windows Azure inclut des nouveautés très intéressantes dans la définition du service, qui sont documentées sur la page MSDN du schéma XML ServiceDefinition, mais qui n’ont pas été particulièrement mises en avant dans les billets ou les sessions…

Voici les deux nouveaux éléments que l’on trouve dans la documentation:

<Contents>
  <Content destination="<destination-folder-name>" >
	<SourceDirectory path="<local-source-directory>" />
  </Content>
</Contents>

Ce nouvel élément Contents permet de spécifier des répertoires que l’on souhaite copier dans le package au moment de son assemblage, pour inclure des ressources externes au projet. L’on peut imaginer de nombreux cas d’usage, mais l’un des principaux va être l’inclusion de binaires exécutables non-.NET, comme par exemple un interpréteur PHP, un JRE Java, un serveur d’applications Java, etc.

Grâce à ce nouvel élément, il n’est en effet plus nécessaire d’ajouter une Startup Task pour extraire et/ou copier ces binaires au moment du démarrage de l’instance.

<Runtime executionContext="[limited|elevated]">
  <Environment>
	 <Variable name="<variable-name>" value="<variable-value>">
		<RoleInstanceValue xpath="<xpath-to-role-environment-settings>"/>
	  </Variable>          
  </Environment>
  <EntryPoint>
	 <NetFxEntryPoint assemblyName="<name-of-assembly-containing-entrypoint>" targetFrameworkVersion="<.net-framework-version>"/>
	 <ProgramEntryPoint commandLine="<application>" setReadyOnProcessStart="[true|false]" "/>
  </EntryPoint>
</Runtime>

Le deuxième élément, Runtime, procède donc de cette même logique: il permet de définir des variables d’environnement puis de démarrer un environnement d’exécution, qui peut prendre la forme d’un simple programme en ligne de commande, ou d’un assemblage .NET. Là encore, l’on peut imaginer aller démarrer un serveur (comme Tomcat, au hasard), et ce sans avoir à ajouter de Startup Tasks.

Voici donc un exemple qui va préparer un environnement Java et démarrer un serveur Tomcat; ce fichier de configuration est tout ce qu’il est nécessaire d’écrire, dans un Worker Role complètement vide par ailleurs!

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="TomCat" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="ApacheTomCat" vmsize="Small">
    <Endpoints>
      <InputEndpoint name="HttpIn" port="8080" protocol="tcp" />
    </Endpoints>
    <Runtime>
      <Environment>
        <Variable name="JRE_HOME" value="%ROLEROOT%\Approot\Java\jre6" />
      </Environment>
      <EntryPoint>
        <ProgramEntryPoint commandLine="apache-tomcat\bin\catalina.bat run" setReadyOnProcessStart="true" />
      </EntryPoint>
    </Runtime>
    <Contents>
      <Content destination="Java\jre6">
        <SourceDirectory path="C:\Projects\Java\jre6" />
      </Content>
      <Content destination="apache-tomcat">
        <SourceDirectory path="C:\Projects\apache-tomcat-7.0.21" />
      </Content>
    </Contents>
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
  </WorkerRole>
</ServiceDefinition>

Nous aurons certainement plus de contenus et d’informations sur ces nouvelles possibilités dans les semaines à venir!