Creare e gestire macchine virtuali Windows in Azure tramite C#Create and manage Windows VMs in Azure using C#

Una macchina virtuale di Azure (VM) richiede diverse risorse di supporto di Azure.An Azure Virtual Machine (VM) needs several supporting Azure resources. Questo articolo descrive come creare, gestire ed eliminare le risorse della macchina virtuale tramite C#.This article covers creating, managing, and deleting VM resources using C#. Si apprenderà come:You learn how to:

  • Creare un progetto di Visual StudioCreate a Visual Studio project
  • Installare il pacchettoInstall the package
  • Creare le credenzialiCreate credentials
  • Creare le risorseCreate resources
  • Eseguire le attività di gestionePerform management tasks
  • Eliminare le risorseDelete resources
  • Eseguire l'applicazioneRun the application

L'esecuzione di questi passaggi richiede circa 20 minuti.It takes about 20 minutes to do these steps.

Creare un progetto di Visual StudioCreate a Visual Studio project

  1. Se non è già installato, installare Visual Studio.If you haven't already, install Visual Studio. Selezionare Sviluppo per desktop .NET nella pagina Carichi di lavoro e quindi fare clic su Installa.Select .NET desktop development on the Workloads page, and then click Install. Nel riepilogo si noti che Strumenti di sviluppo per .NET Framework 4-4.6 viene selezionato automaticamente.In the summary, you can see that .NET Framework 4 - 4.6 development tools is automatically selected for you. Se Visual Studio è già stato installato, è possibile aggiungere il carico di lavoro .NET usando l'utilità di avvio di Visual Studio.If you have already installed Visual Studio, you can add the .NET workload using the Visual Studio Launcher.
  2. In Visual Studio fare clic su File > Nuovo > Progetto.In Visual Studio, click File > New > Project.
  3. In Modelli > Visual C# selezionare App console (.NET Framework), immettere myDotnetProject come nome del progetto, selezionare il percorso del progetto e quindi fare clic su 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.

Installare il pacchettoInstall the package

I pacchetti NuGet sono il modo più semplice per installare le librerie necessarie per completare questi passaggi.NuGet packages are the easiest way to install the libraries that you need to finish these steps. Per ottenere le librerie necessarie in Visual Studio, eseguire questa procedura:To get the libraries that you need in Visual Studio, do these steps:

  1. Fare clic su Strumenti > Gestione pacchetti NuGet e quindi su Console di Gestione pacchetti.Click Tools > Nuget Package Manager, and then click Package Manager Console.
  2. Nella console digitare il comando seguente:Type this command in the console:

    Install-Package Microsoft.Azure.Management.Fluent
    

Creare le credenzialiCreate credentials

Prima di iniziare questo passaggio, assicurarsi di avere accesso a un'entità servizio Active Directory.Before you start this step, make sure that you have access to an Active Directory service principal. È inoltre necessario registrare l'ID dell'applicazione, la chiave di autenticazione e l'ID del tenant che saranno necessari in un passaggio successivo.You should also record the application ID, the authentication key, and the tenant ID that you need in a later step.

Creare il file di autorizzazioneCreate the authorization file

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su myDotnetProject > Aggiungi > Nuovo elemento e quindi selezionare File di testo in Elementi di Visual C#.In Solution Explorer, right-click myDotnetProject > Add > New Item, and then select Text File in Visual C# Items. Assegnare al file il nome azureauth.properties e quindi fare clic su Aggiungi.Name the file azureauth.properties, and then click Add.
  2. Aggiungere le proprietà di autorizzazione seguenti: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/
    

    Sostituire <subscription-id> con l'identificatore della sottoscrizione, <application-id> con l'identificatore dell'applicazione Active Directory, <authentication-key> con la chiave dell'applicazione e <tenant-id> con l'identificatore del tenant.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. Salvare il file azureauth.properties.Save the azureauth.properties file.

  4. Impostare una variabile di ambiente Windows denominata AZURE_AUTH_LOCATION con il percorso completo verso il file di autorizzazione creato.Set an environment variable in Windows named AZURE_AUTH_LOCATION with the full path to authorization file that you created. Ad esempio, è possibile usare il comando PowerShell seguente:For example, the following PowerShell command can be used:

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

Creare il client di gestioneCreate the management client

  1. Aprire il file Program.cs per il progetto creato e quindi aggiungere le istruzioni using seguenti alle istruzioni esistenti all'inizio del file:Open the Program.cs file for the project that you created, and 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. Per creare i client di gestione, aggiungere questo codice al metodo 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();
    

Creare le risorseCreate resources

Creare il gruppo di risorse.Create the resource group

Tutte le risorse devono essere contenute in un gruppo di risorse.All resources must be contained in a Resource group.

Per specificare i valori per l'applicazione e creare il gruppo di risorse, aggiungere questo codice al metodo 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();

Creare il set di disponibilitàCreate the availability set

I set di disponibilità semplificano la manutenzione delle macchine virtuali usate dall'applicazione.Availability sets make it easier for you to maintain the virtual machines used by your application.

Per creare il set di disponibilità, aggiungere questo codice al metodo 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();

Creare l'indirizzo IP pubblicoCreate the public IP address

Un indirizzo IP pubblico è necessario per comunicare con la macchina virtuale.A Public IP address is needed to communicate with the virtual machine.

Per creare l'indirizzo IP pubblico della macchina virtuale, aggiungere questo codice al metodo 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();

Creare la rete virtualeCreate the virtual network

Una macchina virtuale deve essere inclusa in una subnet di una rete virtuale.A virtual machine must be in a subnet of a Virtual network.

Per creare una subnet e una rete virtuale, aggiungere questo codice al metodo 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();

Creare l'interfaccia di reteCreate the network interface

Una macchina virtuale richiede un'interfaccia di rete per comunicare nella rete virtuale.A virtual machine needs a network interface to communicate on the virtual network.

Per creare un'interfaccia di rete, aggiungere questo codice al metodo 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();

Creare la macchina virtualeCreate the virtual machine

Dopo avere creato tutte le risorse di supporto, è possibile creare una macchina virtuale.Now that you created all the supporting resources, you can create a virtual machine.

Per creare la macchina virtuale, aggiungere questo codice al metodo 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();

Nota

Questa esercitazione illustra come creare una macchina virtuale in cui è in esecuzione una versione del sistema operativo Windows Server.This tutorial creates a virtual machine running a version of the Windows Server operating system. Per altre informazioni sulla selezione di altre immagini, vedere Esplorare e selezionare immagini delle macchine virtuali di Azure con Windows PowerShell e l'interfaccia della riga di comando di Azure.To learn more about selecting other images, see Navigate and select Azure virtual machine images with Windows PowerShell and the Azure CLI.

Se si desidera usare un disco esistente invece di un'immagine del marketplace, usare questo codice: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();

Eseguire le attività di gestionePerform management tasks

Durante il ciclo di vita di una macchina virtuale si eseguono attività di gestione come l'avvio, l'arresto o l'eliminazione della macchina virtuale.During the lifecycle of a virtual machine, you may want to run management tasks such as starting, stopping, or deleting a virtual machine. È inoltre possibile creare codice per automatizzare le attività ripetitive o complesse.Additionally, you may want to create code to automate repetitive or complex tasks.

Quando si deve eseguire un'operazione con la macchina virtuale, è necessario ottenere un'istanza della stessa:When you need to do anything with the VM, you need to get an instance of it:

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

Ottenere informazioni sulla VMGet information about the VM

Per ottenere informazioni sulla macchina virtuale, aggiungere questo codice al metodo 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();

Arrestare la VMStop the VM

È possibile arrestare una macchina virtuale e mantenere tutte le sue impostazioni, pur continuando a vedersela addebitata oppure è possibile arrestare una macchina virtuale e deallocarla.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. Quando una macchina virtuale viene deallocata, lo stesso viene fatto per tutte le risorse associate e la fatturazione termina.When a virtual machine is deallocated, all resources associated with it are also deallocated and billing ends for it.

Per arrestare la macchina virtuale senza deallocarla, aggiungere questo codice al metodo 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();

Per deallocare la macchina virtuale, sostituire la chiamata PowerOff con il codice seguente:If you want to deallocate the virtual machine, change the PowerOff call to this code:

vm.Deallocate();

Avviare la VMStart the VM

Per avviare la macchina virtuale, aggiungere questo codice al metodo 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();

Ridimensionare la VMResize the VM

Al momento di decidere le dimensioni della macchina virtuale, è necessario considerare molti aspetti della distribuzione.Many aspects of deployment should be considered when deciding on a size for your virtual machine. Per altre informazioni, vedere Dimensioni delle macchine virtuali.For more information, see VM sizes.

Per modificare le dimensioni della macchina virtuale, aggiungere questo codice al metodo 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();

Aggiungere un disco dati alla VMAdd a data disk to the VM

Per aggiungere un disco dati alla macchina virtuale, aggiungere questo codice al metodo Main per aggiungere un disco dati di 2 GB, un LUN pari a 0 e un tipo di caching di ReadWrite:To add a data disk to the virtual machine, add this code to the Main method to add 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();

Eliminare le risorseDelete resources

Poiché vengono applicati addebiti per le risorse usate in Azure, è sempre consigliabile eliminare le risorse che non sono più necessarie.Because you are charged for resources used in Azure, it is always good practice to delete resources that are no longer needed. Per eliminare le macchine virtuali e tutte le risorse di supporto, è sufficiente eliminare il gruppo di risorse.If you want to delete the virtual machines and all the supporting resources, all you have to do is delete the resource group.

Per eliminare il gruppo di risorse, aggiungere questo codice al metodo Main:To delete the resource group, add this code to the Main method:

azure.ResourceGroups.DeleteByName(groupName);

Eseguire l'applicazioneRun the application

L'esecuzione completa dell'applicazione console dall'inizio alla fine richiederà circa cinque minuti.It should take about five minutes for this console application to run completely from start to finish.

  1. Per eseguire l'applicazione console, fare clic su Avvia.To run the console application, click Start.

  2. Prima di premere INVIO per avviare l'eliminazione delle risorse, è consigliabile dedicare alcuni minuti alla verifica della creazione delle risorse nel Portale di Azure.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. Fare clic sullo stato della distribuzione per visualizzare le informazioni corrispondenti.Click the deployment status to see information about the deployment.

Passaggi successiviNext steps