Windows Azure : Scripts PowerShell pour créer une VM avec plusieurs disques

Il est souvent très fastidieux de créer une machine virtuelle sur Windows Azure en utilisant le portail et lui attacher plusieurs disques en disk striping. Voici un ensemble de commandes PowerShell et de petits scripts pour pouvoir les adapter à vos besoins.

Prérequis

Tout d’abord il faudrait installer l’extension Azure PowerShell. Vous pouvez le télécharger directement depuis ce lien ou tout simplement passer par le Web Platform Installer. Une fois l’extension est installer vous allez retrouver dans la liste de vos programme une nouvelle application : Azure PowerShell Program

Et bien évidemment, dotez vous d’un abonnement azure.

Se connecter à votre abonnement

  1. Ouvrir la console Azure Powershell
  2. Taper la commande suivante pour se connecter à votre compte azure:
    Add-AzureAccount
  3. Saisir les informations d’authentification pour votre abonnement.
  4. Maintenant pour se connecter à un abonnement en particulier, taper la commande
    Select-AzureSubscription

    et saisir le nom de l’abonnement ou bien le mettre dans la ligne de commande comme suit :

    Select-AzureSubscription -SubscriptionName <Subscription Name> 
  5. Si vous connaissez pas le nom exacte de l’abonnement vous pouvez obtenir la liste avec cette commande
    Get-AzureSubscription | Select-Object SubscriptionName

Trouver le nom exacte de l’image à installer

  1. Lister les images disponibles
    Get-AzureVMImage
  2. Wow il y a trop !! en plus c’est illisible. Appliquons quelques filtres. Je cherche pendant que j’écrit ce post une image SQL Server 2014 Standard
    Get-AzureVMImage | Where-Object { ($_.PublisherName -ilike "Microsoft*" -and $_.ImageFamily -ilike "SQL Server 2014*" ) } 
  3. La liste est encore longue. Affichons que les noms :
    Get-AzureVMImage | Where-Object { ($_.PublisherName -ilike "Microsoft*" -and $_.ImageFamily -ilike "SQL Server 2014*" ) } | Select-Object ImageName
  4. Les noms ne donnent pas aucune information sur la version ni la date de publication.Affichons alors l’ImageFamily et filtrons avec l’édition souhaité (Standard).Ensuite, trions par ImageFamily et Publishdate :
    Get-AzureVMImage | Where-Object { ($_.PublisherName -ilike "Microsoft*" -and $_.ImageFamily -ilike "SQL Server 2014*Standard*" ) } |Sort-Object -Unique -Descending -Property ImageFamily | Sort-Object -Descending -Property PublishedDate | Select-Object ImageFamily, ImageName 
  5. Donc on retrouve qu’une seule image correspondant à notre critère. Retenons son ImageName : fb83b3509582419d99629ce476bcb5c8__SQL-Server-2014RTM-12.0.2000.8-Standard-ENU-WS2012R2-AprilGA

Création de la machine virtuelle

Maintenant qu’on a bien récupéré le nom de l’image à utiliser, il faut définir les autres paramètres :

  1. $Location : Datacenter dans lequel on souhaite héberger la machine
  2. $ComputerName : Nom de la machine virtuelle
  3. $InstanceSize : Taille de l’instance : « Medium », « Large », « ExtraLarge », « A6 », « A7 » …
  4. $ServiceName : Nom du service cloudapp à utiliser pour la machine virtuelle
  5. $NumberOfDisks : Nombre de disque (vhd) à installer. Attention à la limite par taille de machine utilisée : http://msdn.microsoft.com/en-us/library/windowsazure/dn197896.aspx
  6. $DiskSize : Taille du disque unitaire en Go.
  7. $ImageName : Nom de l’image à utiliser
  8. $SubnetName : Libellé du sous réseau auquel la machine devrait appartenir
  9. $MediaLocation : Url du blob storage ou seront hébergés les disques
  10. $credential : Informations du compte utilisateur administrateur. Ils seront demandé directement via une boite de dialogue

Voici donc le script final

#Récupérer les informations d'authentification pour la connexion à la machine
$Location = "West Europe"
$ComputerName = "MonSqlServer"
$ServiceName ="MonCloudapp"
$InstanceSize="A6"
$ImageName="fb83b3509582419d99629ce476bcb5c8__SQL-Server-2014RTM-12.0.2000.8-Standard-ENU-WS2012R2-AprilGA"
$NumberOfDisks=8
$DiskSize=200
$SubnetName="Subnet-1"
$MediaLocation="https://XXXXXXX.blob.core.windows.net/vhds"
$credential = Get-Credential 

#Vérifier l'existance ou pas d'une machine virtuelle portant le même nom dans le même cloud service 
$existingVm = Get-AzureVM -ServiceName $ServiceName -Name $ComputerName -ErrorAction SilentlyContinue 
if ($existingVm -ne $null) 
{ 
    throw "A VM with name $ComputerName exists on $ServiceName" 
} 
#Création de la machine
$vm = New-AzureVMConfig -Name $ComputerName -InstanceSize $InstanceSize -ImageName $imageName | Add-AzureProvisioningConfig -Windows -AdminUsername $credential.GetNetworkCredential().username -Password $credential.GetNetworkCredential().password | Set-AzureSubnet -SubnetNames $SubnetName
#Prépartion des disques
for ($index = 0; $index -lt $NumberOfDisks; $index++) 
{  
    $label = "Data disk " + $index 
    $vm = $vm | Add-AzureDataDisk -CreateNew -DiskSizeInGB $DiskSize -DiskLabel $label -LUN $index 
}  
#Création de la machine virtuelle et service name s'il n'est pas présent
if (Test-AzureName -Service -Name $ServiceName) 
{ 
    New-AzureVM -ServiceName $ServiceName -VMs $vm -WaitForBoot | Out-Null 
    if ($?) 
    { 
        Write-Verbose "Created the VMs." 
    } 
}  
else 
{ 
    New-AzureVM -ServiceName $ServiceName -Location $Location -VMs $vm -WaitForBoot | Out-Null 
    if ($?) 
    { 
        Write-Verbose "Created the VMs and the cloud service $ServiceName" 
    } 
} 

Quelques retours

Forcément il n’y a jamais un programme qui fonctionne dès le premier coup. Voici quelques raisons :

  1. Si vous avez utiliser ce script directement dans la fenêtre de commande PowerShell. Penser à taper deux fois « Enter » pour que les commandes sur plusieurs lignes s’exécute
  2. Le subscription n’a pas de storage par défaut. Dans ce cas il faut le définir avec cette commande :
    Set-AzureSubscription –SubscriptionName "<SubscriptionName>" –CurrentStorageAccount "<StorageLabel>"

Le resultat

Azure PowerShellResult
Pour d’autres scripts plus complets que je n’ai pas testés vous pouvez vous ballader sur https://gallery.technet.microsoft.com/scriptcenter/Create-a-SQL-Server-VM-in-0b8c6eed.

User Rating: 4.9 ( 1 votes)

About Wicem

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *