Créer des machines virtuelles DevTest Labs à l’aide de Azure PowerShell

Cet article vous montre comment créer une machine virtuelle dans Azure DevTest Labs dans un labo avec Azure PowerShell. Vous pouvez utiliser des scripts PowerShell pour automatiser la création d’une machine virtuelle de labo.

Prérequis

Pour effectuer les étapes de cet article, vous devez disposer des éléments suivants :

Script de création de machine virtuelle PowerShell

La cmdlet Invoke-AzResourceAction PowerShell appelle l’action createEnvironment avec les paramètres d’ID de ressource et de machine virtuelle du labo. Les paramètres sont dans une table de hachage qui contient toutes les propriétés de description de la machine virtuelle. Les propriétés sont différentes pour chaque type de machine virtuelle. Pour obtenir les propriétés du type de machine virtuelle de votre choix, consultez Obtenir des propriétés de machine virtuelle.

Cet exemple de script crée une machine virtuelle Windows Server 2019 Datacenter. L’exemple comprend également des propriétés permettant d’ajouter un deuxième disque de données sous dataDiskParameters.

[CmdletBinding()]

Param(
[Parameter(Mandatory = $false)]  $SubscriptionId,
[Parameter(Mandatory = $true)]   $LabResourceGroup,
[Parameter(Mandatory = $true)]   $LabName,
[Parameter(Mandatory = $true)]   $NewVmName,
[Parameter(Mandatory = $true)]   $UserName,
[Parameter(Mandatory = $true)]   $Password
)

pushd $PSScriptRoot

try {
    if ($SubscriptionId -eq $null) {
        $SubscriptionId = (Get-AzContext).Subscription.SubscriptionId
    }

    $API_VERSION = '2016-05-15'
    $lab = Get-AzResource -ResourceId "/subscriptions/$SubscriptionId/resourceGroups/$LabResourceGroup/providers/Microsoft.DevTestLab/labs/$LabName"

    if ($lab -eq $null) {
       throw "Unable to find lab $LabName resource group $LabResourceGroup in subscription $SubscriptionId."
    }

    $virtualNetwork = @(Get-AzResource -ResourceType  'Microsoft.DevTestLab/labs/virtualnetworks' -ResourceName $LabName -ResourceGroupName $lab.ResourceGroupName -ApiVersion $API_VERSION)[0]

    #The preceding command puts the VM in the first allowed subnet in the first virtual network for the lab.
    #If you need to use a specific virtual network, use | to find the network. For example:
    #$virtualNetwork = @(Get-AzResource -ResourceType  'Microsoft.DevTestLab/labs/virtualnetworks' -ResourceName $LabName -ResourceGroupName $lab.ResourceGroupName -ApiVersion $API_VERSION) | Where-Object Name -EQ "SpecificVNetName"

    $labSubnetName = $virtualNetwork.properties.allowedSubnets[0].labSubnetName

    #Prepare all the properties needed for the createEnvironment call.
    # The properties are slightly different depending on the type of VM base.
    # The virtual network setup might also affect the properties.

    $parameters = @{
       "name"      = $NewVmName;
       "location"  = $lab.Location;
       "properties" = @{
          "labVirtualNetworkId"     = $virtualNetwork.ResourceId;
          "labSubnetName"           = $labSubnetName;
          "notes"                   = "Windows Server 2019 Datacenter";
          "osType"                  = "windows"
          "expirationDate"          = "2022-12-01"
          "galleryImageReference"   = @{
             "offer"     = "WindowsServer";
             "publisher" = "MicrosoftWindowsServer";
             "sku"       = "2019-Datacenter";
             "osType"    = "Windows";
             "version"   = "latest"
          };
          "size"                    = "Standard_DS2_v2";
          "userName"                = $UserName;
          "password"                = $Password;
          "disallowPublicIpAddress" = $true;
          "dataDiskParameters" = @(@{
            "attachNewDataDiskOptions" = @{
                "diskName" = "adddatadisk"
                "diskSizeGiB" = "1023"
                "diskType" = "Standard"
                }
          "hostCaching" = "ReadWrite"
          })
       }
    }

    #The following line has the same effect as invoking the
    # https://azure.github.io/projects/apis/#!/Labs/Labs_CreateEnvironment REST API

    Invoke-AzResourceAction -ResourceId $lab.ResourceId -Action 'createEnvironment' -Parameters $parameters -ApiVersion $API_VERSION -Force -Verbose
}
finally {
   popd
}

Enregistrez le script précédent dans un fichier nommé Create-LabVirtualMachine.ps1. Exécutez le script à l’aide de la commande suivante. Saisissez vos propres valeurs pour les espaces réservés.

.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'

Obtenir des propriétés de machine virtuelle

Cette section indique comment obtenir les propriétés spécifiques pour le type de machine virtuelle que vous souhaitez créer. Vous pouvez obtenir les propriétés à partir d’un modèle Azure Resource Manager (ARM) dans le Portail Azure ou en appelant l’API REST Azure DevTest Labs.

Utiliser le Portail Azure pour obtenir les propriétés de la machine virtuelle

La création d’une machine virtuelle dans le Portail Azure génère un modèle Azure Resource Manager (ARM) qui affiche les propriétés de la machine virtuelle. Une fois que vous avez choisi une base de machines virtuelles, vous pouvez voir le modèle ARM et obtenir les propriétés sans réellement créer la machine virtuelle. Cette méthode est le moyen le plus simple d’obtenir la description de la machine virtuelle JSON si vous n’avez pas encore de machine virtuelle de labo de ce type.

  1. Dans lePortail Azure, dans la page Vue d’ensemble de votre labo, sélectionnez Ajouter dans la barre d’outils supérieure.

  2. Sur la page Choisir une base, sélectionnez le type de machine virtuelle souhaité. Selon les paramètres de labo, la base de la machine virtuelle peut être une image de la Place de marché Azure, une image personnalisée, une formule ou un environnement.

  3. Sur la page Créer une ressource de labo, ajoutez éventuellement des artefacts et configurez les autres paramètres souhaités sous les onglets Paramètres de base et Paramètres avancés.

  4. Sous l’onglet Paramètres avancés, sélectionnez Afficher le modèle ARM au bas de la page.

  5. Dans la page Afficher le modèle Azure Resource Manager, passez en revue le modèle JSON pour créer la machine virtuelle. La section ressources contient les propriétés de la machine virtuelle.

    Par exemple, la section suivante resources contient les propriétés d’une machine virtuelle Windows Server 2022 Datacenter :

      "resources": [
           {
                "apiVersion": "2018-10-15-preview",
                "type": "Microsoft.DevTestLab/labs/virtualmachines",
                "name": "[variables('vmName')]",
                "location": "[resourceGroup().location]",
                "properties": {
                     "labVirtualNetworkId": "[variables('labVirtualNetworkId')]",
                     "notes": "Windows Server 2022 Datacenter: Azure Edition Core",
                     "galleryImageReference": {
                          "offer": "WindowsServer",
                          "publisher": "MicrosoftWindowsServer",
                          "sku": "2022-datacenter-azure-edition-core",
                          "osType": "Windows",
                          "version": "latest"
                     },
                     "size": "[parameters('size')]",
                     "userName": "[parameters('userName')]",
                     "password": "[parameters('password')]",
                     "isAuthenticationWithSshKey": false,
                     "labSubnetName": "[variables('labSubnetName')]",
                     "disallowPublicIpAddress": true,
                     "storageType": "Standard",
                     "allowClaim": false,
                     "networkInterface": {
                          "sharedPublicIpAddressConfiguration": {
                               "inboundNatRules": [
                                    {
                                         "transportProtocol": "tcp",
                                         "backendPort": 3389
                                    }
                               ]
                          }
                     }
                }
           }
      ],
    
  6. Copiez et enregistrez le modèle à utiliser dans l’Automation PowerShell à venir, puis transférez les propriétés vers le script de création de machine virtuelle PowerShell.

Utiliser l’API REST Azure DevTest Labs pour accéder aux propriétés de la machine virtuelle

Vous pouvez également appeler l’API REST DevTest Labs pour obtenir les propriétés des machines virtuelles de labo existantes. Vous pouvez utiliser ces propriétés pour créer d’autres machines virtuelles de labo des mêmes types.

  1. Sur la page Machines virtuelles - liste, sélectionnez Essayer au-dessus du premier bloc de code.
  2. Sur la page d’essai API REST, essayez-le :
    • Sous labName, entrez votre nom de labo.
    • Sous labResourceGroup, entrez le nom du groupe de ressources de labo.
    • Sous SubscriptionId, sélectionnez l’abonnement Azure du labo.
  3. Sélectionnez Exécuter.
  4. Dans la section Réponse sous Corps, affichez les propriétés de toutes les machines virtuelles existantes dans le labo.

Définir la date d’expiration de la machine virtuelle

Dans le cadre de formation, de démonstration et de scénarios d’apprentissage, vous pouvez éviter les coûts inutiles en supprimant automatiquement les machines virtuelles à une certaine date. Vous pouvez définir la propriété des machines virtuelles expirationDate lorsque vous créez une machine virtuelle. Le script de création de machines virtuelles PowerShell, plus haut dans cet article, définit une date d’expiration sous properties :

  "expirationDate": "2022-12-01"

Vous pouvez également définir des dates d’expiration sur des machines virtuelles existantes à l’aide de PowerShell. Le script PowerShell suivant définit une date d’expiration pour une machine virtuelle de labo existante si elle n’a pas encore de date d’expiration :

# Enter your own values:
$subscriptionId = '<Lab subscription Id>'
$labResourceGroup = '<Lab resource group>'
$labName = '<Lab name>'
$VmName = '<VM name>'
$expirationDate = '<Expiration date, such as 2022-12-16>'

# Sign in to your Azure account

Select-AzSubscription -SubscriptionId $subscriptionId
$VmResourceId = "subscriptions/$subscriptionId/resourcegroups/$labResourceGroup/providers/microsoft.devtestlab/labs/$labName/virtualmachines/$VmName"

$vm = Get-AzResource -ResourceId $VmResourceId -ExpandProperties

# Get the Vm properties
$VmProperties = $vm.Properties

# Set the expirationDate property
If ($VmProperties.expirationDate -eq $null) {
    $VmProperties | Add-Member -MemberType NoteProperty -Name expirationDate -Value $expirationDate -Force
} Else {
    $VmProperties.expirationDate = $expirationDate
}

Set-AzResource -ResourceId $VmResourceId -Properties $VmProperties -Force

Étapes suivantes

Référence Az.DevTestLabs PowerShell