C# を使用して Azure で Windows VM を作成および管理するCreate and manage Windows VMs in Azure using C#

Azure 仮想マシン (VM) には、いくつかのサポート Azure リソースが必要です。An Azure Virtual Machine (VM) needs several supporting Azure resources. この記事では、C# を使って VM リソースを作成、管理、削除する方法について説明します。This article covers creating, managing, and deleting VM resources using C#. 学習内容は次のとおりです。You learn how to:

  • Visual Studio プロジェクトを作成するCreate a Visual Studio project
  • パッケージをインストールするInstall the package
  • 資格情報を作成するCreate credentials
  • リソースを作成するCreate resources
  • 管理タスクを実行するPerform management tasks
  • リソースを削除するDelete resources
  • アプリケーションの実行Run the application

これらの手順を実行するには約 20 分かかります。It takes about 20 minutes to do these steps.

Visual Studio プロジェクトを作成するCreate a Visual Studio project

  1. まだ Visual Studio をインストールしていない場合は、インストールを実行します。If you haven't already, install Visual Studio. [ワークロード] ページで [.NET デスクトップ開発] を選び、 [インストール] をクリックします。Select .NET desktop development on the Workloads page, and then click Install. サマリーで、 [.NET Framework 4 から 4.6 の開発ツール] が自動的に選択されていることが確認できます。In the summary, you can see that .NET Framework 4 - 4.6 development tools is automatically selected for you. Visual Studio を既にインストールしてある場合は、Visual Studio 起動ツールを使って .NET ワークロードを追加できます。If you have already installed Visual Studio, you can add the .NET workload using the Visual Studio Launcher.
  2. Visual Studio で、 [ファイル] > [新規] > [プロジェクト] をクリックします。In Visual Studio, click File > New > Project.
  3. [テンプレート] > [Visual C#][コンソール アプリ (.NET Framework)] を選択し、プロジェクトの名前に「myDotnetProject」と入力して、プロジェクトの場所を選んだ後、 [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.

パッケージをインストールするInstall the package

NuGet パッケージを使用すると、手順を完了するために必要なライブラリを簡単にインストールできます。NuGet packages are the easiest way to install the libraries that you need to finish these steps. Visual Studio で必要なライブラリを入手するには、次の手順に従います。To get the libraries that you need in Visual Studio, do these steps:

  1. [ツール] > [NuGet パッケージ マネージャー] をクリックし、 [パッケージ マネージャー コンソール] をクリックします。Click Tools > Nuget Package Manager, and then click Package Manager Console.

  2. コンソールに次のコマンドを入力します。Type this command in the console:

    Install-Package Microsoft.Azure.Management.Fluent
    

資格情報を作成するCreate credentials

この手順を開始する前に、Active Directory サービス プリンシパルにアクセスできることを確認します。Before you start this step, make sure that you have access to an Active Directory service principal. また、後の手順で必要になるので、アプリケーション ID、認証キー、テナント ID を控えておく必要があります。You should also record the application ID, the authentication key, and the tenant ID that you need in a later step.

承認ファイルを作成するCreate the authorization file

  1. ソリューション エクスプローラーで、 [myDotnetProject] > [追加] > [新しい項目] を右クリックしてから、 [Visual C# アイテム][テキスト ファイル] を選択します。In Solution Explorer, right-click myDotnetProject > Add > New Item, and then select Text File in Visual C# Items. ファイルに azureauth.properties と名前を付けて、 [追加] をクリックします。Name the file azureauth.properties, and then click Add.

  2. 次の承認プロパティを追加します。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.microsoft.com/
    

    <subscription-id> をサブスクリプション ID に、 <application-id> を Active Directory アプリケーション ID に、 <authentication-key> をアプリケーション キーに、 <tenant-id> をテナント識別子に置き換えます。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. azureauth.properties ファイルを保存します。Save the azureauth.properties file.

  4. AZURE_AUTH_LOCATION という Windows 環境変数を、作成した認証ファイルへのフルパスに設定します。Set an environment variable in Windows named AZURE_AUTH_LOCATION with the full path to authorization file that you created. たとえば、次の PowerShell コマンドを使用します。For example, the following PowerShell command can be used:

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

管理クライアントを作成するCreate the management client

  1. 作成したプロジェクトの Program.cs ファイルを開きます。Open the Program.cs file for the project that you created. 次に、ファイルの先頭にある既存のステートメントに次の using ステートメントを追加します。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. 管理クライアントを作成するには、次のコードを 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();
    

リソースを作成するCreate resources

リソース グループの作成Create the resource group

すべてのリソースは、リソース グループに含まれる必要があります。All resources must be contained in a Resource group.

アプリケーションに値を指定し、リソース グループを作成するには、次のコードを 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();

可用性セットを作成するCreate the availability set

可用性セットを使うと、アプリケーションで使う仮想マシンの管理が容易になります。Availability sets make it easier for you to maintain the virtual machines used by your application.

可用性セットを作成するには、次のコードを 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();

パブリック IP アドレスの作成Create the public IP address

仮想マシンと通信するには、パブリック IP アドレスが必要です。A Public IP address is needed to communicate with the virtual machine.

仮想マシンのパブリック IP アドレスを作成するには、次のコードを 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();

仮想ネットワークの作成Create the virtual network

仮想マシンは、仮想ネットワークのサブネット内に存在する必要があります。A virtual machine must be in a subnet of a Virtual network.

サブネットと仮想ネットワークを作成するには、次のコードを 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();

ネットワーク インターフェイスの作成Create the network interface

仮想マシンが仮想ネットワーク上で通信するには、ネットワーク インターフェイスが必要です。A virtual machine needs a network interface to communicate on the virtual network.

ネットワーク インターフェイスを作成するには、次のコードを 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();

仮想マシンの作成Create the virtual machine

すべての関連リソースを作成したので、仮想マシンを作成できます。Now that you created all the supporting resources, you can create a virtual machine.

仮想マシンを作成するには、次のコードを 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();

注意

このチュートリアルでは、Windows Server オペレーティング システムのバージョンを実行する仮想マシンを作成します。This tutorial creates a virtual machine running a version of the Windows Server operating system. 他のイメージの選択の詳細については、 Windows PowerShell と Azure CLI による Azure 仮想マシン イメージのナビゲーションと選択に関する記事をご覧ください。To learn more about selecting other images, see Navigate and select Azure virtual machine images with Windows PowerShell and the Azure CLI.

Marketplace イメージではなく、既存のディスクを使用する場合は、このコードを使用します。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();

管理タスクを実行するPerform management tasks

仮想マシンのライフサイクルで、各種の管理タスクを実行する必要がある場合があります (仮想マシンの起動、停止、削除など)。During the lifecycle of a virtual machine, you may want to run management tasks such as starting, stopping, or deleting a virtual machine. また、何度も行う作業や複雑な作業は、コードを作成して自動化したい場合もあるでしょう。Additionally, you may want to create code to automate repetitive or complex tasks.

VM で何かを実行する必要がある場合、そのインスタンスを取得する必要があります。When you need to do anything with the VM, you need to get an instance of it:

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

VM に関する情報を取得するGet information about the VM

仮想マシンに関する情報を取得するには、次のコードを 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();

VM を停止するStop the VM

仮想マシンを停止してそのすべての設定を保持する (引き続き課金されます)、または仮想マシンを停止して割り当てを解除します。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. 仮想マシンの割り当てを解除すると、それに関連付けられているすべてのリソースの割り当ても解除され、仮想マシンに対する課金が終了します。When a virtual machine is deallocated, all resources associated with it are also deallocated and billing ends for it.

仮想マシンの割り当てを解除せずに仮想マシンを停止するには、次のコードを 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();

仮想マシンの割り当てを解除する場合は、PowerOff 呼び出しを次のコードに変更します。If you want to deallocate the virtual machine, change the PowerOff call to this code:

vm.Deallocate();

VM を起動するStart the VM

仮想マシンを起動するには、次のコードを 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();

VM のサイズを変更するResize the VM

仮想マシンのサイズを決定するときは、デプロイのさまざまな面を考慮する必要があります。Many aspects of deployment should be considered when deciding on a size for your virtual machine. 詳しくは、VM サイズをご覧ください。For more information, see VM sizes.

仮想マシンのサイズを変更するには、次のコードを 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();

VM にデータ ディスクを追加するAdd a data disk to the VM

仮想マシンにデータ ディスクを追加するには、Main メソッドに次のコードを追加します。To add a data disk to the virtual machine, add this code to the Main method. この例では、2 GB のサイズ、LUN が 0、キャッシュの種類が ReadWrite のデータ ディスクを追加します。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();

リソースを削除するDelete resources

Azure で使用されるリソースに対して課金されるため、不要になったリソースは削除することを常にお勧めします。Because you are charged for resources used in Azure, it is always good practice to delete resources that are no longer needed. 仮想マシンとすべての関連リソースを削除する場合、必要な操作はリソース グループの削除だけです。If you want to delete the virtual machines and all the supporting resources, all you have to do is delete the resource group.

リソース グループを削除するには、次のコードを Main メソッドに追加します。To delete the resource group, add this code to the Main method:

azure.ResourceGroups.DeleteByName(groupName);

アプリケーションの実行Run the application

このコンソール アプリケーションが実行を開始してから完全に終了するまでには、約 5 分かかります。It should take about five minutes for this console application to run completely from start to finish.

  1. コンソール アプリケーションを実行するには、 [開始] をクリックします。To run the console application, click Start.

  2. Enter キーを押してリソースの削除を開始する前に、Azure Portal でリソースの作成状況を確認することもできます。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. デプロイに関する情報を参照するには、デプロイ状態をクリックします。Click the deployment status to see information about the deployment.

次のステップNext steps