Créer et gérer des machines virtuelles Windows dans Azure à l’aide de C#Create and manage Windows VMs in Azure using C#

Une machine virtuelle Azure a besoin de plusieurs ressources de prise en charge Azure.An Azure Virtual Machine (VM) needs several supporting Azure resources. Cet article décrit comment créer, gérer et supprimer des ressources de machine virtuelle à l’aide de C#.This article covers creating, managing, and deleting VM resources using C#. Vous allez apprendre à effectuer les actions suivantes :You learn how to:

  • Créer un projet Visual StudioCreate a Visual Studio project
  • Installer le packageInstall the package
  • Créer des informations d’identificationCreate credentials
  • Créer des ressourcesCreate resources
  • Effectuer les tâches de gestionPerform management tasks
  • Supprimer des ressourcesDelete resources
  • Exécution de l'applicationRun the application

Ces étapes prennent environ 20 minutes.It takes about 20 minutes to do these steps.

Créer un projet Visual StudioCreate a Visual Studio project

  1. Si vous ne l’avez pas déjà fait, installez Visual Studio.If you haven't already, install Visual Studio. Sélectionnez Développement .NET Desktop dans la page Charges de travail, puis cliquez sur Installer.Select .NET desktop development on the Workloads page, and then click Install. Dans le résumé, vous pouvez voir que les Outils de développement .NET Framework 4 - 4.6 sont automatiquement sélectionnés.In the summary, you can see that .NET Framework 4 - 4.6 development tools is automatically selected for you. Si vous avez déjà installé Visual Studio, vous pouvez ajouter la charge de travail .NET en utilisant le lanceur Visual Studio.If you have already installed Visual Studio, you can add the .NET workload using the Visual Studio Launcher.
  2. Dans Visual Studio, cliquez sur Fichier > Nouveau > Projet.In Visual Studio, click File > New > Project.
  3. Dans Modèles > Visual C# , sélectionnez Application console (.NET Framework) , entrez le nom de projet myDotnetProject, sélectionnez l’emplacement du projet, puis cliquez sur OK.In Templates > Visual C#, select Console App (.NET Framework), enter myDotnetProject for the name of the project, select the location of the project, and then click OK.

Installer le packageInstall the package

Les packages NuGet sont le moyen le plus simple pour installer les bibliothèques dont vous avez besoin pour terminer ces étapes.NuGet packages are the easiest way to install the libraries that you need to finish these steps. Pour obtenir les bibliothèques dont vous avez besoin dans Visual Studio, suivez ces étapes :To get the libraries that you need in Visual Studio, do these steps:

  1. Cliquez sur Outils > Gestionnaire de package NuGet, puis sur Console du gestionnaire de package.Click Tools > Nuget Package Manager, and then click Package Manager Console.

  2. Dans la console, tapez la commande suivante :Type this command in the console:

    Install-Package Microsoft.Azure.Management.Fluent
    

Créer des informations d’identificationCreate credentials

Avant de commencer cette étape, assurez-vous que vous avez accès à un principal de service Active Directory.Before you start this step, make sure that you have access to an Active Directory service principal. Vous devez également enregistrer l’ID d’application, la clé d’authentification et l’ID de client dont vous aurez besoin dans une étape ultérieure.You should also record the application ID, the authentication key, and the tenant ID that you need in a later step.

Créer le fichier d’autorisationCreate the authorization file

  1. Dans l’Explorateur de solutions, cliquez sur myDotnetProject > Ajouter > Nouvel élément, puis sélectionnez Fichier texte dans Éléments Visual C# .In Solution Explorer, right-click myDotnetProject > Add > New Item, and then select Text File in Visual C# Items. Nommez le fichier azureauth.properties, puis cliquez sur Ajouter.Name the file azureauth.properties, and then click Add.

  2. Ajoutez ces propriétés d’autorisation :Add these authorization properties:

    subscription=<subscription-id>
    client=<application-id>
    key=<authentication-key>
    tenant=<tenant-id>
    managementURI=https://management.core.windows.net/
    baseURL=https://management.azure.com/
    authURL=https://login.windows.net/
    graphURL=https://graph.windows.net/
    

    Remplacez <subscription-id> par votre identificateur d’abonnement, <application-id> par l’identificateur d’application Active Directory, <authentication-key> par la clé d’application et <tenant-id> par l’identificateur du locataire.Replace <subscription-id> with your subscription identifier, <application-id> with the Active Directory application identifier, <authentication-key> with the application key, and <tenant-id> with the tenant identifier.

  3. Enregistrez le fichier azureauth.properties.Save the azureauth.properties file.

  4. Définissez une variable d’environnement dans Windows nommée AZURE_AUTH_LOCATION avec le chemin complet au fichier d’autorisation que vous avez créé.Set an environment variable in Windows named AZURE_AUTH_LOCATION with the full path to authorization file that you created. Vous pouvez par exemple utiliser la commande PowerShell suivante :For example, the following PowerShell command can be used:

    [Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\Visual Studio 2019\Projects\myDotnetProject\myDotnetProject\azureauth.properties", "User")
    

Créer le client de gestionCreate the management client

  1. Ouvrez le fichier Program.cs du projet que vous avez créé.Open the Program.cs file for the project that you created. Ensuite, ajoutez les instructions aux instructions using au début du fichier :Then, add these using statements to the existing statements at top of the file:

    using Microsoft.Azure.Management.Compute.Fluent;
    using Microsoft.Azure.Management.Compute.Fluent.Models;
    using Microsoft.Azure.Management.Fluent;
    using Microsoft.Azure.Management.ResourceManager.Fluent;
    using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
    
  2. Pour créer le client de gestion, ajoutez ce code à la méthode Main :To create the management client, add this code to the Main method:

    var credentials = SdkContext.AzureCredentialsFactory
        .FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));
    
    var azure = Azure
        .Configure()
        .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
        .Authenticate(credentials)
        .WithDefaultSubscription();
    

Créer des ressourcesCreate resources

Créer le groupe de ressourcesCreate the resource group

Toutes les ressources doivent être contenues dans un groupe de ressources.All resources must be contained in a Resource group.

Pour spécifier des valeurs pour l’application et créer le groupe de ressources, ajoutez ce code à la méthode Main :To specify values for the application and create the resource group, add this code to the Main method:

var groupName = "myResourceGroup";
var vmName = "myVM";
var location = Region.USWest;
    
Console.WriteLine("Creating resource group...");
var resourceGroup = azure.ResourceGroups.Define(groupName)
    .WithRegion(location)
    .Create();

Créer le groupe à haute disponibilitéCreate the availability set

Les groupes à haute disponibilité facilitent la maintenance des machines virtuelles utilisées par votre application.Availability sets make it easier for you to maintain the virtual machines used by your application.

Pour créer le groupe à haute disponibilité, ajoutez ce code à la méthode Main :To create the availability set, add this code to the Main method:

Console.WriteLine("Creating availability set...");
var availabilitySet = azure.AvailabilitySets.Define("myAVSet")
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithSku(AvailabilitySetSkuTypes.Managed)
    .Create();

Créer une adresse IP publiqueCreate the public IP address

Une adresse IP publique est nécessaire pour communiquer avec la machine virtuelle.A Public IP address is needed to communicate with the virtual machine.

Pour créer l’adresse IP publique pour la machine virtuelle, ajoutez ce code à la méthode Main :To create the public IP address for the virtual machine, add this code to the Main method:

Console.WriteLine("Creating public IP address...");
var publicIPAddress = azure.PublicIPAddresses.Define("myPublicIP")
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithDynamicIP()
    .Create();

Créer un réseau virtuelCreate the virtual network

Un machine virtuelle doit figurer dans un sous-réseau d’un réseau virtuel.A virtual machine must be in a subnet of a Virtual network.

Pour créer un sous-réseau et un réseau virtuel, ajoutez ce code à la méthode Main :To create a subnet and a virtual network, add this code to the Main method:

Console.WriteLine("Creating virtual network...");
var network = azure.Networks.Define("myVNet")
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithAddressSpace("10.0.0.0/16")
    .WithSubnet("mySubnet", "10.0.0.0/24")
    .Create();

Créer l’interface réseauCreate the network interface

Une machine virtuelle a besoin d’une interface réseau pour communiquer sur le réseau virtuel.A virtual machine needs a network interface to communicate on the virtual network.

Pour créer une interface réseau, ajoutez ce code à la méthode Main :To create a network interface, add this code to the Main method:

Console.WriteLine("Creating network interface...");
var networkInterface = azure.NetworkInterfaces.Define("myNIC")
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithExistingPrimaryNetwork(network)
    .WithSubnet("mySubnet")
    .WithPrimaryPrivateIPAddressDynamic()
    .WithExistingPrimaryPublicIPAddress(publicIPAddress)
    .Create();

Créer la machine virtuelleCreate the virtual machine

Maintenant que vous avez créé l’ensemble des ressources de prise en charge, vous pouvez créer une machine virtuelle.Now that you created all the supporting resources, you can create a virtual machine.

Pour créer la machine virtuelle, ajoutez ce code à la méthode Main :To create the virtual machine, add this code to the Main method:

Console.WriteLine("Creating virtual machine...");
azure.VirtualMachines.Define(vmName)
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithExistingPrimaryNetworkInterface(networkInterface)
    .WithLatestWindowsImage("MicrosoftWindowsServer", "WindowsServer", "2012-R2-Datacenter")
    .WithAdminUsername("azureuser")
    .WithAdminPassword("Azure12345678")
    .WithComputerName(vmName)
    .WithExistingAvailabilitySet(availabilitySet)
    .WithSize(VirtualMachineSizeTypes.StandardDS1)
    .Create();

Notes

Ce didacticiel crée une machine virtuelle exécutant une version du système d’exploitation Windows Server.This tutorial creates a virtual machine running a version of the Windows Server operating system. Pour en savoir plus sur la sélection d’autres images, consultez Parcourir et sélectionner des images de machine virtuelle Azure avec Windows PowerShell et l’interface CLI Azure.To learn more about selecting other images, see Navigate and select Azure virtual machine images with Windows PowerShell and the Azure CLI.

Si vous souhaitez utiliser un disque existant au lieu d’une image marketplace, utilisez ce code :If you want to use an existing disk instead of a marketplace image, use this code:

var managedDisk = azure.Disks.Define("myosdisk")
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithWindowsFromVhd("https://mystorage.blob.core.windows.net/vhds/myosdisk.vhd")
    .WithSizeInGB(128)
    .WithSku(DiskSkuTypes.PremiumLRS)
    .Create();

azure.VirtualMachines.Define("myVM")
    .WithRegion(location)
    .WithExistingResourceGroup(groupName)
    .WithExistingPrimaryNetworkInterface(networkInterface)
    .WithSpecializedOSDisk(managedDisk, OperatingSystemTypes.Windows)
    .WithExistingAvailabilitySet(availabilitySet)
    .WithSize(VirtualMachineSizeTypes.StandardDS1)
    .Create();

Effectuer les tâches de gestionPerform management tasks

Pendant le cycle de vie d’une machine virtuelle, vous souhaiterez exécuter des tâches de gestion telles que le démarrage, l’arrêt ou la suppression d’une machine virtuelle.During the lifecycle of a virtual machine, you may want to run management tasks such as starting, stopping, or deleting a virtual machine. En outre, vous souhaiterez peut-être créer du code pour automatiser les tâches répétitives ou complexes.Additionally, you may want to create code to automate repetitive or complex tasks.

Quand vous avez besoin d’effectuer une action avec la machine virtuelle, vous devez en obtenir une instance :When you need to do anything with the VM, you need to get an instance of it:

var vm = azure.VirtualMachines.GetByResourceGroup(groupName, vmName);

Obtenir des informations sur la machine virtuelleGet information about the VM

Pour obtenir des informations sur la machine virtuelle, ajoutez ce code à la méthode Main :To get information about the virtual machine, add this code to the Main method:

Console.WriteLine("Getting information about the virtual machine...");
Console.WriteLine("hardwareProfile");
Console.WriteLine("   vmSize: " + vm.Size);
Console.WriteLine("storageProfile");
Console.WriteLine("  imageReference");
Console.WriteLine("    publisher: " + vm.StorageProfile.ImageReference.Publisher);
Console.WriteLine("    offer: " + vm.StorageProfile.ImageReference.Offer);
Console.WriteLine("    sku: " + vm.StorageProfile.ImageReference.Sku);
Console.WriteLine("    version: " + vm.StorageProfile.ImageReference.Version);
Console.WriteLine("  osDisk");
Console.WriteLine("    osType: " + vm.StorageProfile.OsDisk.OsType);
Console.WriteLine("    name: " + vm.StorageProfile.OsDisk.Name);
Console.WriteLine("    createOption: " + vm.StorageProfile.OsDisk.CreateOption);
Console.WriteLine("    caching: " + vm.StorageProfile.OsDisk.Caching);
Console.WriteLine("osProfile");
Console.WriteLine("  computerName: " + vm.OSProfile.ComputerName);
Console.WriteLine("  adminUsername: " + vm.OSProfile.AdminUsername);
Console.WriteLine("  provisionVMAgent: " + vm.OSProfile.WindowsConfiguration.ProvisionVMAgent.Value);
Console.WriteLine("  enableAutomaticUpdates: " + vm.OSProfile.WindowsConfiguration.EnableAutomaticUpdates.Value);
Console.WriteLine("networkProfile");
foreach (string nicId in vm.NetworkInterfaceIds)
{
    Console.WriteLine("  networkInterface id: " + nicId);
}
Console.WriteLine("vmAgent");
Console.WriteLine("  vmAgentVersion" + vm.InstanceView.VmAgent.VmAgentVersion);
Console.WriteLine("    statuses");
foreach (InstanceViewStatus stat in vm.InstanceView.VmAgent.Statuses)
{
    Console.WriteLine("    code: " + stat.Code);
    Console.WriteLine("    level: " + stat.Level);
    Console.WriteLine("    displayStatus: " + stat.DisplayStatus);
    Console.WriteLine("    message: " + stat.Message);
    Console.WriteLine("    time: " + stat.Time);
}
Console.WriteLine("disks");
foreach (DiskInstanceView disk in vm.InstanceView.Disks)
{
    Console.WriteLine("  name: " + disk.Name);
    Console.WriteLine("  statuses");
    foreach (InstanceViewStatus stat in disk.Statuses)
    {
        Console.WriteLine("    code: " + stat.Code);
        Console.WriteLine("    level: " + stat.Level);
        Console.WriteLine("    displayStatus: " + stat.DisplayStatus);
        Console.WriteLine("    time: " + stat.Time);
    }
}
Console.WriteLine("VM general status");
Console.WriteLine("  provisioningStatus: " + vm.ProvisioningState);
Console.WriteLine("  id: " + vm.Id);
Console.WriteLine("  name: " + vm.Name);
Console.WriteLine("  type: " + vm.Type);
Console.WriteLine("  location: " + vm.Region);
Console.WriteLine("VM instance status");
foreach (InstanceViewStatus stat in vm.InstanceView.Statuses)
{
    Console.WriteLine("  code: " + stat.Code);
    Console.WriteLine("  level: " + stat.Level);
    Console.WriteLine("  displayStatus: " + stat.DisplayStatus);
}
Console.WriteLine("Press enter to continue...");
Console.ReadLine();

Arrêtez la machine virtuelle.Stop the VM

Vous pouvez arrêter une machine virtuelle et conserver tous ses paramètres, mais continuer à être facturé, ou arrêter une machine virtuelle et la libérer.You can stop a virtual machine and keep all its settings, but continue to be charged for it, or you can stop a virtual machine and deallocate it. Lorsqu’une machine virtuelle est libérée, toutes les ressources qui lui sont associées sont également libérées et la facturation de la machine virtuelle prend fin.When a virtual machine is deallocated, all resources associated with it are also deallocated and billing ends for it.

Pour arrêter la machine virtuelle sans la libérer, ajoutez ce code à la méthode Main :To stop the virtual machine without deallocating it, add this code to the Main method:

Console.WriteLine("Stopping vm...");
vm.PowerOff();
Console.WriteLine("Press enter to continue...");
Console.ReadLine();

Si vous souhaitez libérer la machine virtuelle, modifiez l’appel de mise hors tension avec ce code :If you want to deallocate the virtual machine, change the PowerOff call to this code:

vm.Deallocate();

Démarrer la machine virtuelleStart the VM

Pour démarrer la machine virtuelle, ajoutez ce code à la méthode Main :To start the virtual machine, add this code to the Main method:

Console.WriteLine("Starting vm...");
vm.Start();
Console.WriteLine("Press enter to continue...");
Console.ReadLine();

Redimensionner la machine virtuelleResize the VM

De nombreux aspects du déploiement doivent être pris en considération lors du choix d’une taille pour votre machine virtuelle.Many aspects of deployment should be considered when deciding on a size for your virtual machine. Pour plus d’informations, voir Tailles des machines virtuelles.For more information, see VM sizes.

Pour changer la taille de la machine virtuelle, ajoutez ce code à la méthode Main :To change size of the virtual machine, add this code to the Main method:

Console.WriteLine("Resizing vm...");
vm.Update()
    .WithSize(VirtualMachineSizeTypes.StandardDS2) 
    .Apply();
Console.WriteLine("Press enter to continue...");
Console.ReadLine();

Ajouter un disque de données à la machine virtuelleAdd a data disk to the VM

Pour ajouter un disque de données à la machine virtuelle, ajoutez ce code à la méthode Main.To add a data disk to the virtual machine, add this code to the Main method. Cet exemple ajoute un disque de données est de 2 Go de taille, han un numéro d’unité logique de 0 et un type de mise en cache de lecture/écriture :This example adds a data disk that is 2 GB in size, han a LUN of 0 and a caching type of ReadWrite:

Console.WriteLine("Adding data disk to vm...");
vm.Update()
    .WithNewDataDisk(2, 0, CachingTypes.ReadWrite) 
    .Apply();
Console.WriteLine("Press enter to delete resources...");
Console.ReadLine();

Supprimer des ressourcesDelete resources

Étant donné que les ressources utilisées dans Microsoft Azure vous sont facturées, il est toujours conseillé de supprimer les ressources qui ne sont plus nécessaires.Because you are charged for resources used in Azure, it is always good practice to delete resources that are no longer needed. Si vous souhaitez supprimer les machines virtuelles et l’ensemble des ressources de prise en charge, il vous suffit de supprimer le groupe de ressources.If you want to delete the virtual machines and all the supporting resources, all you have to do is delete the resource group.

Pour supprimer le groupe de ressources, ajoutez ce code à la méthode Main :To delete the resource group, add this code to the Main method:

azure.ResourceGroups.DeleteByName(groupName);

Exécution de l'applicationRun the application

L’exécution complète de cette application console devrait durer cinq minutes environ.It should take about five minutes for this console application to run completely from start to finish.

  1. Pour exécuter l’application console, cliquez sur Démarrer.To run the console application, click Start.

  2. Avant d’appuyer sur Entrée pour démarrer la suppression des ressources, prenez quelques minutes pour vérifier que les ressources dans le portail Azure ont bien été créées.Before you press Enter to start deleting resources, you could take a few minutes to verify the creation of the resources in the Azure portal. Cliquez sur l’état du déploiement pour afficher des informations sur le déploiement.Click the deployment status to see information about the deployment.

Étapes suivantesNext steps