C#을 사용하여 Azure에서 Windows VM 생성 및 관리Create and manage Windows VMs in Azure using C#

Azure VM(Virtual Machine)에 몇 가지 지원 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를 입력하고 프로젝트의 위치를 선택한 다음 확인을 클릭합니다.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.windows.net/
    

    <subscription-id> 를 구독 식별자, <application-id> 를 Active Directory 애플리케이션 식별자, <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.

마켓플레이스 이미지 대신 기존 디스크를 사용하려면 다음 코드를 사용합니다.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에서 작업을 수행해야 하는 경우 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. 이 예제에서는 데이터 디스크를 lun이 0 이며 캐싱 형식이 읽기/쓰기 크기가 2GB를 추가 합니다.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