Azure CLI 2.0을 사용하여 가상 머신 확장 집합 만들기Create a Virtual Machine Scale Set with the Azure CLI 2.0

가상 머신 확장 집합을 사용하면 동일한 자동 크기 조정 가상 머신 집합을 배포하고 관리할 수 있습니다.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. 확장 집합의 VM 수를 수동으로 조정하거나 CPU와 같은 리소스 사용량, 메모리 요구량 또는 네트워크 트래픽을 기반으로 자동으로 크기를 조정하는 규칙을 정의할 수도 있습니다.You can scale the number of VMs in the scale set manually, or define rules to autoscale based on resource usage such as CPU, memory demand, or network traffic. 이 시작 문서에서는 Azure Resource Manager 템플릿을 사용하여 가상 머신 확장 집합을 만듭니다.In this getting started article, you create a virtual machine scale set with an Azure Resource Manager template. 확장 집합은 Azure CLI 2.0, Azure PowerShell 또는 Azure Portal을 사용하여 만들 수도 있습니다.You can also create a scale set with the Azure CLI 2.0, Azure PowerShell, or the Azure portal.

템플릿 개요Overview of templates

Azure Resource Manager 템플릿을 사용하면 관련 리소스 그룹을 배포할 수 있습니다.Azure Resource Manager templates let you deploy groups of related resources. 템플릿은 JSON(JavaScript Object Notation)으로 작성되며, 응용 프로그램에 대한 전체 Azure 인프라 환경을 정의합니다.Templates are written in JavaScript Object Notation (JSON) and define the entire Azure infrastructure environment for your application. 단일 템플릿에서 가상 머신 확장 집합을 만들고, 응용 프로그램을 설치하고, 자동 크기 조정 규칙을 구성할 수 있습니다.In a single template, you can create the virtual machine scale set, install applications, and configure autoscale rules. 변수와 매개 변수를 사용하면 이 템플릿을 다시 사용하여 기존의 확장 집합을 업데이트하거나 추가 확장 집합을 만들 수 있습니다.With the use of variables and parameters, this template can be reused to update existing, or create additional, scale sets. Azure Portal, Azure CLI 2.0 또는 Azure PowerShell을 통해 템플릿을 배포할 수 있을 뿐만 아니라 CI/CD(지속적인 통합/지속적인 업데이트) 파이프라인에서 템플릿을 호출할 수도 있습니다.You can deploy templates through the Azure portal, Azure CLI 2.0, or Azure PowerShell, as well as call them from continuous integration / continuous delivery (CI/CD) pipelines.

템플릿에 대한 자세한 내용은 Azure Resource Manager 개요를 참조하세요.For more information on templates, see Azure Resource Manager overview

확장 집합 정의Define a scale set

템플릿은 각 리소스 종류에 대한 구성을 정의합니다.A template defines the configuration for each resource type. 가상 머신 확장 집합 리소스 종류는 개별 VM과 비슷합니다.A virtual machine scale set resource type is similar to an individual VM. 가상 머신 확장 집합 리소스 종류의 주요 부분은 다음과 같습니다.The core parts of the virtual machine scale set resource type are:

자산Property 속성 설명Description of property 예제 템플릿 값Example template value
형식type 만들 Azure 리소스 종류Azure resource type to create Microsoft.Compute/virtualMachineScaleSetsMicrosoft.Compute/virtualMachineScaleSets
이름name 확장 집합 이름The scale set name myScaleSetmyScaleSet
locationlocation 확장 집합을 만들 위치The location to create the scale set 미국 동부East US
sku.namesku.name 각 확장 집합 인스턴스에 대한 VM 크기The VM size for each scale set instance Standard_A1Standard_A1
sku.capacitysku.capacity 처음에 만들 VM 인스턴스의 수The number of VM instances to initially create 22
upgradePolicy.modeupgradePolicy.mode 변경 발생 시의 VM 인스턴스 업그레이드 모드VM instance upgrade mode when changes occur 자동Automatic
imageReferenceimageReference VM 인스턴스에 사용할 플랫폼 또는 사용자 지정 이미지The platform or custom image to use for the VM instances Canonical Ubuntu Server 16.04-LTSCanonical Ubuntu Server 16.04-LTS
osProfile.computerNamePrefixosProfile.computerNamePrefix 각 VM 인스턴스에 대한 이름 접두사The name prefix for each VM instance myvmssmyvmss
osProfile.adminUsernameosProfile.adminUsername 각 VM 인스턴스에 대한 사용자 이름The username for each VM instance azureuserazureuser
osProfile.adminPasswordosProfile.adminPassword 각 VM 인스턴스에 대한 암호The password for each VM instance P@ssw0rd!P@ssw0rd!

다음 코드 조각에서는 코어 확장 집합이 템플릿에서 리소스 정의를 설정하는 것을 보여 줍니다.The following snippet shows the core scale set resource definition in a template. 샘플을 짧게 유지하기 위해 가상 NIC(네트워크 인터페이스 카드) 구성이 표시되지 않습니다.To keep the sample short, the virtual network interface card (NIC) configuration is not shown. 확장 집합 템플릿을 사용자 지정하려면 VM 크기 또는 초기 용량을 변경하거나 다른 플랫폼 또는 사용자 지정 이미지를 사용할 수 있습니다.To customize a scale set template, you can change the VM size or initial capacity, or use a different platform or a custom image.

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "East US",
  "apiVersion": "2016-04-30-preview",
  "sku": {
    "name": "Standard_A1",
    "capacity": "2"
  },
  "properties": {
    "upgradePolicy": {
      "mode": "Automatic"
    },
    "virtualMachineProfile": {
      "storageProfile": {
        "osDisk": {
          "caching": "ReadWrite",
          "createOption": "FromImage"
        },
        "imageReference":  {
          "publisher": "Canonical",
          "offer": "UbuntuServer",
          "sku": "16.04-LTS",
          "version": "latest"
        }
      },
      "osProfile": {
        "computerNamePrefix": "myvmss",
        "adminUsername": "azureuser",
        "adminPassword": "P@ssw0rd!"
      }
    }
  }
}

응용 프로그램 설치Install an application

확장 집합을 배포하는 경우 VM 확장에서 배포 후 구성 및 자동화 작업(예: 응용 프로그램 설치)을 제공할 수 있습니다.When you deploy a scale set, VM extensions can provide post-deployment configuration and automation tasks, such as installing an app. 스크립트는 Azure 저장소 또는 GitHub에서 다운로드하거나 확장 런타임에서 Azure Portal에 제공할 수 있습니다.Scripts can be downloaded from Azure storage or GitHub, or provided to the Azure portal at extension run-time. 확장 집합에 확장을 적용하려면 앞의 리소스 예제에 extensionProfile 섹션을 추가합니다.To apply an extension to your scale set, you add the extensionProfile section to the preceding resource example. 확장 프로필은 일반적으로 다음 속성을 정의합니다.The extension profile typically defines the following properties:

  • 확장 형식Extension type
  • 확장 게시자Extension publisher
  • 확장 버전Extension version
  • 구성 또는 설치 스크립트의 위치Location of configuration or install scripts
  • VM 인스턴스에서 실행할 명령Commands to execute on the VM instances

확장을 사용하여 응용 프로그램을 설치하는 두 가지 방법, 즉 사용자 지정 스크립트 확장을 사용하여 Linux에서 Python 앱을 설치하거나, PowerShell DSC 확장을 사용하여 Windows에서 ASP.NET 앱을 설치하는 방법을 살펴보겠습니다.Let's look at two ways to install an application with extensions - with the Custom Script Extension to install a Python app on Linux, or with the PowerShell DSC extension to install an ASP.NET app on Windows.

Linux의 Python HTTP 서버Python HTTP server on Linux

Linux의 Python HTTP 서버는 사용자 지정 스크립트 확장을 사용하여 Bottle Python 웹 프레임워크 및 간단한 HTTP 서버를 설치합니다.The Python HTTP server on Linux uses the Custom Script Extension to install Bottle, a Python web framework, and a simple HTTP server.

두 스크립트는 fileUris - installserver.shworkserver.py에 정의되어 있습니다.Two scripts are defined in fileUris - installserver.sh, and workserver.py. 이러한 파일은 GitHub에서 다운로드한 다음 commandToExecute에서 설치하고 구성할 앱에 대한 bash installserver.sh를 정의합니다.These files are downloaded from GitHub, then commandToExecute defines bash installserver.sh for the app to be installed and configured:

"extensionProfile": {
  "extensions": [
    {
      "name": "AppInstall",
      "properties": {
        "publisher": "Microsoft.Azure.Extensions",
        "type": "CustomScript",
        "typeHandlerVersion": "2.0",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/installserver.sh",
            "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/workserver.py"
          ],
          "commandToExecute": "bash installserver.sh"
        }
      }
    }
  ]
}

Windows의 ASP.NET 응용 프로그램ASP.NET application on Windows

Windows의 ASP.NET 응용 프로그램 샘플 템플릿은 PowerShell DSC 확장을 사용하여 IIS에서 실행되는 ASP.NET MVC 앱을 설치합니다.The ASP.NET application on Windows sample template uses the PowerShell DSC extension to install an ASP.NET MVC app that runs in IIS.

설치 스크립트는 url에서 정의한 대로 GitHub에서 다운로드됩니다.An install script is downloaded from GitHub, as defined in url. 그런 다음 확장이 functionscript에서 정의한 대로 IISInstall.ps1 스크립트에서 InstallIIS를 실행합니다.The extension then runs InstallIIS from the IISInstall.ps1 script, as defined in function and Script. ASP.NET 앱 자체는 WebDeployPackagePath에서 정의한 대로 GitHub에서 다운로드되는 웹 배포 패키지로 제공됩니다.The ASP.NET app itself is provided as a Web Deploy package, which is also downloaded from GitHub, as defined in WebDeployPackagePath:

"extensionProfile": {
  "extensions": [
    {
      "name": "Microsoft.Powershell.DSC",
      "properties": {
        "publisher": "Microsoft.Powershell",
        "type": "DSC",
        "typeHandlerVersion": "2.9",
        "autoUpgradeMinorVersion": true,
        "forceUpdateTag": "1.0",
        "settings": {
          "configuration": {
            "url": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-windows-webapp-dsc-autoscale/DSC/IISInstall.ps1.zip",
            "script": "IISInstall.ps1",
            "function": "InstallIIS"
          },
          "configurationArguments": {
            "nodeName": "localhost",
            "WebDeployPackagePath": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-windows-webapp-dsc-autoscale/WebDeploy/DefaultASPWebApp.v1.0.zip"
          }
        }
      }
    }
  ]
}

템플릿 배포Deploy the template

Linux의 Python HTTP 서버 또는 Windows의 ASP.NET MVC 응용 프로그램 템플릿을 배포하는 가장 간단한 방법은 GitHub의 추가 정보 파일에 있는 Azure에 배포 단추를 사용하는 것입니다.The simplest way to deploy the Python HTTP server on Linux or ASP.NET MVC application on Windows template is to use the Deploy to Azure button found in the readme files in GitHub. 또한 PowerShell 또는 Azure CLI를 사용하여 샘플 템플릿을 배포할 수도 있습니다.You can also use PowerShell or Azure CLI to deploy the sample templates.

Azure CLI 2.0Azure CLI 2.0

Azure CLI 2.0을 사용하여 다음과 같이 Linux에서 Python HTTP 서버를 설치할 수 있습니다.You can use the Azure CLI 2.0 to install the Python HTTP server on Linux as follows:

# Create a resource group
az group create --name myResourceGroup --location EastUS

# Deploy template into resource group
az group deployment create \
    --resource-group myResourceGroup \
    --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/azuredeploy.json

작업 중인 앱을 보려면 다음과 같이 az network public-ip list를 사용하여 부하 분산 장치의 공용 IP 주소를 가져옵니다.To see your app in action, obtain the public IP address of the load balancer with az network public-ip list as follows:

az network public-ip list \
    --resource-group myResourceGroup \
    --query [*].ipAddress -o tsv

웹 브라우저에 부하 분산 장치의 공용 IP 주소를 http://:9000/do_work 형식으로 입력합니다.Enter the public IP address of the load balancer in to a web browser in the format http://:9000/do_work. 부하 분산 장치는 다음 예제와 같이 VM 인스턴스 중 하나에 트래픽을 분산합니다.The load balancer distributes traffic to one of your VM instances, as shown in the following example:

NGINX의 기본 웹 페이지

Azure PowerShellAzure PowerShell

Azure PowerShell을 사용하여 다음과 같이 Windows에서 ASP.NET 응용 프로그램을 설치할 수 있습니다.You can use Azure PowerShell to install the ASP.NET application on Windows as follows:

# Create a resource group
New-AzureRmResourceGroup -Name myResourceGroup -Location EastUS

# Deploy template into resource group
New-AzureRmResourceGroupDeployment `
    -ResourceGroupName myResourceGroup `
    -TemplateFile https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-windows-webapp-dsc-autoscale/azuredeploy.json

작업 중인 앱을 보려면 다음과 같이 Get-AzureRmPublicIpAddress를 사용하여 부하 분산 장치의 공용 IP 주소를 가져옵니다.To see your app in action, obtain the public IP address of your load balancer with Get-AzureRmPublicIpAddress as follows:

Get-AzureRmPublicIpAddress -ResourceGroupName myResourceGroup | Select IpAddress

웹 브라우저에 부하 분산 장치의 공용 IP 주소를 http:///MyApp 형식으로 입력합니다.Enter the public IP address of the load balancer in to a web browser in the format http:///MyApp. 부하 분산 장치는 다음 예제와 같이 VM 인스턴스 중 하나에 트래픽을 분산합니다.The load balancer distributes traffic to one of your VM instances, as shown in the following example:

실행 중인 IIS 사이트

리소스 정리Clean up resources

더 이상 필요하지 않은 경우 az group delete를 사용하여 다음과 같이 리소스 그룹, 확장 집합 및 모든 관련 리소스를 제거할 수 있습니다.When no longer needed, you can use az group delete to remove the resource group, scale set, and all related resources as follows:

az group delete --name myResourceGroup

다음 단계Next steps