자습서: Azure CLI를 사용하여 가상 머신 확장 집합에 대한 사용자 지정 이미지 만들기 및 사용Tutorial: Create and use a custom image for virtual machine scale sets with the Azure CLI

확장 집합을 만들 때 VM 인스턴스 배포 시 사용할 이미지를 지정합니다.When you create a scale set, you specify an image to be used when the VM instances are deployed. VM 인스턴스가 배포된 후 작업의 수를 줄이려면 사용자 지정 VM 이미지를 사용할 수 있습니다.To reduce the number of tasks after VM instances are deployed, you can use a custom VM image. 이 사용자 지정 VM 이미지에는 필요한 모든 애플리케이션 설치 또는 구성이 포함됩니다.This custom VM image includes any required application installs or configurations. 확장 집합에서 만들어진 모든 VM 인스턴스는 사용자 지정 VM 이미지를 사용하며, 애플리케이션 트래픽을 처리할 준비가 되어 있습니다.Any VM instances created in the scale set use the custom VM image and are ready to serve your application traffic. 이 자습서에서는 다음 방법에 대해 알아봅니다.In this tutorial you learn how to:

  • Shared Image Gallery 만들기Create a Shared Image Gallery
  • 특수화된 이미지 정의 만들기Create a specialized image definition
  • 이미지 버전 만들기Create an image version
  • 특수화된 이미지에서 확장 집합 만들기Create a scale set from a specialized image
  • 이미지 갤러리 공유Share an image gallery

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

사전 요구 사항Prerequisites

  • Azure Cloud Shell에서 Bash 환경을 사용합니다.Use the Bash environment in Azure Cloud Shell.

    새 창에서 Cloud Shell 시작Launch Cloud Shell in a new window

  • 원하는 경우 Azure CLI를 설치하여 CLI 참조 명령을 실행합니다.If you prefer, install the Azure CLI to run CLI reference commands.

    • 로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다.If you're using a local installation, sign in to the Azure CLI by using the az login command. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다.To finish the authentication process, follow the steps displayed in your terminal. 추가 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.For additional sign-in options, see Sign in with the Azure CLI.

    • 메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다.When you're prompted, install Azure CLI extensions on first use. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.For more information about extensions, see Use extensions with the Azure CLI.

    • az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다.Run az version to find the version and dependent libraries that are installed. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.To upgrade to the latest version, run az upgrade.

  • 이 문서에는 Azure CLI 버전 2.4.0 이상이 필요합니다.This article requires version 2.4.0 or later of the Azure CLI. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.If using Azure Cloud Shell, the latest version is already installed.

개요Overview

공유 이미지 갤러리는 조직 내 사용자 지정 이미지 공유를 간소화합니다.A Shared Image Gallery simplifies custom image sharing across your organization. 사용자 지정 이미지는 Marketplace 이미지와 같지만 직접 만듭니다.Custom images are like marketplace images, but you create them yourself. 애플리케이션 사전 로드, 애플리케이션 구성 및 기타 OS 구성과 같은 부트스트랩 구성에 사용자 지정 이미지를 사용할 수 있습니다.Custom images can be used to bootstrap configurations such as preloading applications, application configurations, and other OS configurations.

Shared Image Gallery를 사용하면 사용자 지정 VM 이미지를 다른 사용자와 공유할 수 있습니다.The Shared Image Gallery lets you share your custom VM images with others. 공유할 이미지, 이미지를 제공할 지역, 이미지를 공유할 사람을 선택하세요.Choose which images you want to share, which regions you want to make them available in, and who you want to share them with.

원본 VM 만들기 및 구성Create and configure a source VM

먼저 az group create를 사용하여 리소스 그룹을 만든 다음, az vm create를 사용하여 VM을 만듭니다.First, create a resource group with az group create, then create a VM with az vm create. 이 VM은 이미지에 대한 원본으로 사용됩니다.This VM is then used as the source for the image. 다음 예제에서는 myResourceGroup 리소스 그룹에 myVM 이라는 VM을 만듭니다.The following example creates a VM named myVM in the resource group named myResourceGroup:

az group create --name myResourceGroup --location eastus

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image ubuntults \
  --admin-username azureuser \
  --generate-ssh-keys

중요

VM의 IDaz vm create 명령의 출력에 표시됩니다.The ID of your VM is shown in the output of the az vm create command. 이 자습서의 뒷부분에서 사용할 수 있도록 이를 안전한 위치에 복사합니다.Copy this someplace safe so you can use it later in this tutorial.

VM의 공용 IP 주소는 az vm create 명령의 출력에도 표시됩니다.The public IP address of your VM is also shown in the output of the az vm create command. 다음과 같이 SSH를 VM의 공용 IP 주소에 연결합니다.SSH to the public IP address of your VM as follows:

ssh azureuser@<publicIpAddress>

VM을 사용자 지정하기 위해 기본 웹 서버를 설치해 보겠습니다.To customize your VM, let's install a basic web server. 확장 집합의 VM 인스턴스가 배포되면 웹 애플리케이션을 실행하는 데 필요한 모든 패키지가 포함되어 있습니다.When the VM instance in the scale set would be deployed, it would then have all the required packages to run a web application. 다음과 같이 apt-get을 사용하여 NGINX 를 설치합니다.Use apt-get to install NGINX as follows:

sudo apt-get install -y nginx

완료되면 exit를 입력하여 SSH 연결의 연결을 끊습니다.When you are done, type exit to disconnect the SSH connection.

이미지 갤러리는 이미지 공유를 활성화하는 데 사용되는 기본 리소스입니다.An image gallery is the primary resource used for enabling image sharing.

갤러리 이름에 허용되는 문자는 대문자 또는 소문자, 숫자, 점 및 마침표입니다.Allowed characters for Gallery name are uppercase or lowercase letters, digits, dots, and periods. 갤러리 이름에 대시를 사용할 수 없습니다.The gallery name cannot contain dashes. 갤러리 이름은 구독 내에서 고유해야 합니다.Gallery names must be unique within your subscription.

az sig create를 사용하여 이미지 갤러리를 만드세요.Create an image gallery using az sig create. 다음 예제에서는 미국 동부myGalleryRG 라는 리소스 그룹 및 myGallery 라는 갤러리를 만듭니다.The following example creates a resource group named gallery named myGalleryRG in East US, and a gallery named myGallery.

az group create --name myGalleryRG --location eastus
az sig create --resource-group myGalleryRG --gallery-name myGallery

이미지 정의 만들기Create an image definition

이미지 정의는 이미지에 대한 논리적 그룹화를 만듭니다.Image definitions create a logical grouping for images. 내부에서 생성된 이미지 버전에 대한 정보를 관리하는 데 사용됩니다.They are used to manage information about the image versions that are created within them.

이미지 정의 이름은 대문자 또는 소문자, 숫자, 점, 대시 및 마침표로 구성될 수 있습니다.Image definition names can be made up of uppercase or lowercase letters, digits, dots, dashes, and periods.

이미지 정의가 올바른 형식인지 확인합니다.Make sure your image definition is the right type. VM을 일반화한 경우(Windows용 Sysprep 사용 또는 Linux용 waagent -프로비전 해제) --os-state generalized를 사용하여 일반화된 이미지 정의를 만들어야 합니다.If you have generalized the VM (using Sysprep for Windows, or waagent -deprovision for Linux) then you should create a generalized image definition using --os-state generalized. 기존 사용자 계정을 제거하지 않고 VM을 사용하려는 경우 --os-state specialized를 사용하여 특수화된 이미지 정의를 만듭니다.If you want to use the VM without removing existing user accounts, create a specialized image definition using --os-state specialized.

이미지 정의에 대해 지정할 수 있는 값에 대한 자세한 내용은 이미지 정의를 참조하세요.For more information about the values you can specify for an image definition, see Image definitions.

az sig image-definition create를 사용하여 갤러리에서 이미지 정의를 만듭니다.Create an image definition in the gallery using az sig image-definition create.

다음 예제에서는 이미지 정의의 이름이 myImageDefinition 이며 특수 Linux OS 이미지에 대한 것입니다.In this example, the image definition is named myImageDefinition, and is for a specialized Linux OS image. Windows OS를 사용하여 이미지에 대한 정의를 만들려면 --os-type Windows를 사용합니다.To create a definition for images using a Windows OS, use --os-type Windows.

az sig image-definition create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --publisher myPublisher \
   --offer myOffer \
   --sku mySKU \
   --os-type Linux \
   --os-state specialized

중요

이미지 정의의 ID 는 명령의 출력에 표시됩니다.The ID of your image definition is shown in the output of the command. 이 자습서의 뒷부분에서 사용할 수 있도록 이를 안전한 위치에 복사합니다.Copy this someplace safe so you can use it later in this tutorial.

이미지 버전 만들기Create the image version

az image gallery create-image-version을 사용하여 VM에서 이미지 버전을 만듭니다.Create an image version from the VM using az image gallery create-image-version.

이미지 버전에 허용되는 문자는 숫자 및 마침표입니다.Allowed characters for image version are numbers and periods. 숫자는 32비트 정수 범위 내에 포함되어야 합니다.Numbers must be within the range of a 32-bit integer. 형식: MajorVersion.MinorVersion.Patch.Format: MajorVersion.MinorVersion.Patch.

이 예제에서 이미지의 버전은 1.0.0 이며, 미국 중남부 지역에서 1개의 복제본, 미국 동부 2 지역에서 1개의 복제본을 만듭니다.In this example, the version of our image is 1.0.0 and we are going to create 1 replica in the South Central US region and 1 replica in the East US 2 region. 복제 지역에는 원본 VM이 있는 지역이 포함되어야 합니다.The replication regions must include the region the source VM is located.

이 예제의 --managed-image 값을 이전 단계의 VM ID로 바꿉니다.Replace the value of --managed-image in this example with the ID of your VM from the previous step.

az sig image-version create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --gallery-image-version 1.0.0 \
   --target-regions "southcentralus=1" "eastus=1" \
   --managed-image "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"

참고

동일한 관리형 이미지를 사용하여 다른 이미지 버전을 만들려면 먼저 해당 이미지 버전이 완전히 빌드되어 복제될 때까지 기다려야 합니다.You need to wait for the image version to completely finish being built and replicated before you can use the same managed image to create another image version.

또한 이미지 버전을 만들 때 --storage-account-type premium_lrs를 추가하여 프리미엄 스토리지에 추가하거나 --storage-account-type standard_zrs를 추가하여 영역 중복 스토리지를 추가하여 이미지를 저장할 수도 있습니다.You can also store your image in Premium storage by a adding --storage-account-type premium_lrs, or Zone Redundant Storage by adding --storage-account-type standard_zrs when you create the image version.

이미지에서 확장 집합 만들기Create a scale set from the image

az vmss create를 사용하여 특수화된 이미지에서 확장 집합 만들기Create a scale set from the specialized image using az vmss create.

이미지가 특수 이미지임을 나타내는 --specialized 매개 변수를 사용하는 az vmss create를 사용하여 확장 집합을 만듭니다.Create the scale set using az vmss create using the --specialized parameter to indicate the the image is a specialized image.

이미지 정의 ID를 --image에 사용하여 사용 가능한 최신 버전의 이미지에서 확장 집합 인스턴스를 만듭니다.Use the image definition ID for --image to create the scale set instances from the latest version of the image that is available. 또한 --image에 대한 이미지 버전 ID를 제공하여 특정 버전에서 확장 집합 인스턴스를 만들 수 있습니다.You can also create the scale set instances from a specific version by supplying the image version ID for --image.

이전에 만든 myImageDefinition 이미지의 최신 버전인 myScaleSet 이라는 확장 집합을 만듭니다.Create a scale set named myScaleSet the latest version of the myImageDefinition image we created earlier.

az group create --name myResourceGroup --location eastus
az vmss create \
   --resource-group myResourceGroup \
   --name myScaleSet \
   --image "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition" \
   --specialized

확장 집합 리소스와 VM을 모두 만들고 구성하는 데 몇 분 정도 걸립니다.It takes a few minutes to create and configure all the scale set resources and VMs.

확장 집합 테스트Test your scale set

트래픽이 확장 집합에 도달하고 웹 서버가 올바르게 작동하는지 확인하도록 허용하려면 az network lb rule create를 사용하여 부하 분산 장치 규칙을 만듭니다.To allow traffic to reach your scale set and that verify that the web server works correctly, create a load balancer rule with az network lb rule create. 다음 예제에서는 80 TCP 포트에 트래픽을 허용하는 myLoadBalancerRuleWeb 이라는 규칙을 만듭니다.The following example creates a rule named myLoadBalancerRuleWeb that allows traffic on TCP port 80:

az network lb rule create \
  --resource-group myResourceGroup \
  --name myLoadBalancerRuleWeb \
  --lb-name myScaleSetLB \
  --backend-pool-name myScaleSetLBBEPool \
  --backend-port 80 \
  --frontend-ip-name loadBalancerFrontEnd \
  --frontend-port 80 \
  --protocol tcp

작동 중인 확장 집합을 확인하려면 az network public-ip show를 사용하여 부하 분산 장치의 공용 IP 주소를 가져옵니다.To see your scale set in action, get the public IP address of your load balancer with az network public-ip show. 다음 예제에서는 확장 집합의 일부로 만든 myScaleSetLBPublicIP 에 대한 IP 주소를 가져옵니다.The following example gets the IP address for myScaleSetLBPublicIP created as part of the scale set:

az network public-ip show \
  --resource-group myResourceGroup \
  --name myScaleSetLBPublicIP \
  --query [ipAddress] \
  --output tsv

웹 브라우저에 공용 IP 주소를 입력합니다.Type the public IP address into your web browser. 기본 NGINX 웹 페이지가 다음 예제와 같이 표시됩니다.The default NGINX web page is displayed, as shown in the following example:

사용자 지정 VM 이미지에서 실행된 Nginx

Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 구독 간에 이미지를 공유할 수 있습니다.You can share images across subscriptions using Azure role-based access control (Azure RBAC). 갤러리, 이미지 정의 또는 이미지 버전에서 이미지를 공유할 수 있습니다.You can share images at the gallery, image definition or image version. 이미지 버전에 대한 읽기 권한이 있는 모든 사용자는 구독 간에도 이미지 버전을 사용하여 VM을 배포할 수 있습니다.Any user that has read permissions to an image version, even across subscriptions, will be able to deploy a VM using the image version.

갤러리 수준에서 다른 사용자와 공유하는 것이 좋습니다.We recommend that you share with other users at the gallery level. 갤러리의 개체 ID를 가져오려면 az sig show를 사용합니다.To get the object ID of your gallery, use az sig show.

az sig show \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --query id

이메일 주소 및 az role assignment create와 함께 개체 ID를 범위로 사용하여 사용자에게 공유 이미지 갤러리에 대한 액세스 권한을 부여합니다.Use the object ID as a scope, along with an email address and az role assignment create to give a user access to the shared image gallery. <email-address><gallery iD>를 사용자 고유의 정보로 바꿉니다.Replace <email-address> and <gallery iD> with your own information.

az role assignment create \
   --role "Reader" \
   --assignee <email address> \
   --scope <gallery ID>

Azure RBAC를 사용하여 리소스를 공유하는 방법에 대한 자세한 내용은 Azure CLI를 사용하여 Azure 역할 할당 추가 또는 제거를 참조하세요.For more information about how to share resources using Azure RBAC, see Add or remove Azure role assignments using Azure CLI.

리소스 정리Clean up resources

확장 집합 및 추가 리소스를 제거하려면 az group delete를 사용하여 리소스 그룹 및 모든 해당 리소스를 삭제합니다.To remove your scale set and additional resources, delete the resource group and all its resources with az group delete. --no-wait 매개 변수는 작업이 완료될 때까지 대기하지 않고 프롬프트로 제어를 반환합니다.The --no-wait parameter returns control to the prompt without waiting for the operation to complete. --yes 매개 변수는 작업을 수행하는 추가 프롬프트 없이 리소스를 삭제할 것인지 확인합니다.The --yes parameter confirms that you wish to delete the resources without an additional prompt to do so.

az group delete --name myResourceGroup --no-wait --yes

다음 단계Next steps

이 자습서에서는 Azure CLI를 사용하여 확장 집합에 대한 사용자 지정 VM 이미지를 만들고 사용하는 방법을 알아보았습니다.In this tutorial, you learned how to create and use a custom VM image for your scale sets with the Azure CLI:

  • Shared Image Gallery 만들기Create a Shared Image Gallery
  • 특수화된 이미지 정의 만들기Create a specialized image definition
  • 이미지 버전 만들기Create an image version
  • 특수화된 이미지에서 확장 집합 만들기Create a scale set from a specialized image
  • 이미지 갤러리 공유Share an image gallery

애플리케이션을 확장 집합에 배포하는 방법을 알아보려면 다음 자습서로 계속 진행하세요.Advance to the next tutorial to learn how to deploy applications to your scale set.