Gestion des montées de version node.js dans Windows Azure

Les services PaaS Azure permettent aux clients de déployer dans le Cloud les services et les applications qu’ils ont créés à l'aide de langages de programmation, de bibliothèques et de composants d’infrastructures proposés par l’ensemble de l’écosystème Microsoft. Ils offrent aux développeurs des abstractions de niveau application en utilisant un socle d’exécution parfois appelé « système d'exploitation pour le Cloud » conçu pour déployer le code des applicatifs Cloud et les exécuter.

Les machines virtuelles exécutant les Web Roles ou Worker Roles du PaaS de Windows Azure peuvent exécuter du code développé avec des outils Microsoft ou non : ASP.NET, WCF, autres outils .NET, mais aussi Java, Python, Ruby, node.js...

 

Considérons le cas d’un développement node.js. node.js est une plate-forme construite sur le moteur d'exécution JavaScript de Chrome utilise un modèle d'entrées-sorties événementiel et non bloquant, particulièrement adapté aux applications manipulant des données en temps « réel » dans une architecture distribuée.

 

Le système d’exploitation associé au WebRole node.js évolue régulièrement et fait donc l’objet de mises à jour. Celles-ci sont nécessaires pour s’assurer que les solutions développées sur le PaaS Azure sont adossées à des systèmes fiables et sécurisés, intégrant les dernières innovations. Toutefois, cela ne signifie pas que ce WebRole intégre des mises à jour de la version de node.js.

La version en cours de node.js est la v0.10.24 et est disponible en ligne sur le lien suivant : https://nodejs.org

L’installation de l’environnement de développement peut se faire directement avec Microsoft Web PI, outil destiné à faciliter le téléchargement et l'installation des différents composants de la plate-forme Microsoft Web.

 

image

L’installation du Windows Azure SDK for Node.js inclut une version de node.js, mais il s’agit d’une version ancienne (v0.6.20). Si l’on déploie une application node.js, il faut donc veiller, non seulement à vérifier que les montées de version du système d’exploitation et du SDK n’ont pas d’effet collatéral, mais aussi à faire évoluer la version du runtime node.js.

 

En effet, si l'application node.js est hébergée dans un service Cloud et qu’elle est déployée avec PowerShell, il est possible de substituer la version de Node.js à condition toutefois, qu’elle soit supportée. Fort heureusement, le Windows Azure Cross Platform CLI et le Windows Azure SDK pour Node.js ont été récemment mise à jour pour supporter les versions de Node.js publiée après la version 0.10.3 (https://ntotten.com/2013/04/14/windows-azure-sdk-for-nodejs-and-cli-updated-for-nodejs-010x).

 

Pour automatiser le déploiement d’une nouvelle version de node.js, il existe une cmdlet PowerShell dont c’est la fonction : « Set-AzureServiceProjectRole ».

Set-AzureServiceProjectRole "HelloWebRole" node 0.10.21

 

En effet, les versions de node.js accessibles via cette commande se limitent à celles disponibles dans la liste résultant de l’appel par la commande « Get-AzureServiceProjectRoleRuntime »

Runtime : Node

Version : 0.10.21

PackageUri : https://az413943.vo.msecnd.net/node/0.10.21.exe

IsDefault : False

Certes, ce n’est pas la toute dernière version, mais la version 0.10.21 est très récente, corrige pas mal de soucis par rapport à la version 0.6.20 et surtout évite d’avoir à refaire et personnaliser le package, ce qui s’avère nettement plus contraignant…

 

Le script PowerShell suivant permet de déployer une configuration Node.js dans Azure avec modification du numéro de version et activation du la connexion distante. Le certificat est alors automatiquement créé dans le magasin de certificats du PC qui lance le script et se déploie sur chacune des instances cibles. Attention au choix du mot de passe qui devra contenir une majuscule :  la CmdLet Enable-AzureServiceProjectRemoteDesktop ne prévient pas si le password n’est pas conforme à la policy, ce qui provoque un échec du logon dont on peut avoir du mal à identifier la cause.

         

$username = "stephgou"

$password = "NodeJs!0"

$secureString = ConvertTo-SecureString $password -AsPlainText –Force       

Import-Module 'c:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1'

cls

         

write-host "-------------------------------"

write-host "Creating a New Node Application"

write-host "-------------------------------"

 

set-location "C:\DEMOS\66 - DEVOPS\DevOps Demo\Node.js"

 

$currentDirectory = (Get-Location).Path

write-host "Your current directory is:" $currentDirectory

 

[IO.Directory]::SetCurrentDirectory((Convert-Path (Get-Location -PSProvider FileSystem)))[IO.Directory]::EnumerateDirectories($currentDirectory) | format-table

 

$files = [IO.Directory]::EnumerateDirectories($currentDirectory)

foreach( $f in $files ){

             Write-Host $f.ToString()

       Remove-Item $f -recurse –force

}     

New-AzureServiceProject -ServiceName "HelloNodejs"

Add-AzureNodeWebRole -Name "HelloWebRole" -Instances 2

#Set-AzureServiceProjectRole "HelloWebRole" node 0.10.21

          

write-host "----------------------------------------"

write-host "Enabling Remote Desktop in Windows Azure"

write-host "----------------------------------------"

          

Enable-AzureServiceProjectRemoteDesktop -Username $username -Password $secureString

          

write-host "--------------------------"

write-host "Publishing the Application"

write-host "--------------------------"      

Import-AzurePublishSettingsFile azure.publishsettings

Publish-AzureServiceProject –ServiceName HelloNodejs –Location "West Europe” –Launch