자습서: Azure CLI를 사용하여 Virtual Machine Scale Sets에 대한 사용자 지정 이미지 만들기 및 사용
확장 집합을 만들 때 VM 인스턴스 배포 시 사용할 이미지를 지정합니다. VM 인스턴스가 배포된 후 작업의 수를 줄이려면 사용자 지정 VM 이미지를 사용할 수 있습니다. 이 사용자 지정 VM 이미지에는 필요한 모든 애플리케이션 설치 또는 구성이 포함됩니다. 확장 집합에서 만들어진 모든 VM 인스턴스는 사용자 지정 VM 이미지를 사용하며, 애플리케이션 트래픽을 처리할 준비가 되어 있습니다. 이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Azure Compute Gallery 만들기
- 특수화된 이미지 정의 만들기
- 이미지 버전 만들기
- 특수화된 이미지에서 확장 집합 만들기
- 이미지 갤러리 공유
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
필수 조건
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- 이 문서에는 Azure CLI 버전 2.4.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
개요
Azure Compute Gallery는 조직 내 사용자 지정 이미지 공유를 간소화합니다. 사용자 지정 이미지는 Marketplace 이미지와 같지만 직접 만듭니다. 애플리케이션 사전 로드, 애플리케이션 구성 및 기타 OS 구성과 같은 부트스트랩 구성에 사용자 지정 이미지를 사용할 수 있습니다.
Azure Compute Gallery를 사용하면 사용자 지정 VM 이미지를 다른 사용자와 공유할 수 있습니다. 공유할 이미지, 이미지를 제공할 지역, 이미지를 공유할 사람을 선택하세요.
원본 VM 만들기 및 구성
먼저 az group create를 사용하여 리소스 그룹을 만든 다음, az vm create를 사용하여 VM을 만듭니다. 이 VM은 이미지에 대한 원본으로 사용됩니다.
다음 예제에서는 myResourceGroup이라는 리소스 그룹에 myVM이라는 Linux 기반 VM을 만듭니다.
export RANDOM_ID=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_ID"
export REGION="eastus"
export MY_VM_NAME="myVM"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
az vm create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_VM_NAME \
--image debian11 \
--admin-username azureuser \
--generate-ssh-keys
팁
VM의 ID는 az vm create 명령의 출력에 표시됩니다. 이 자습서의 뒷부분에서 사용할 수 있도록 안전한 위치에 복사하고 저장합니다.
이미지 갤러리 만들기
이미지 갤러리는 이미지 공유를 활성화하는 데 사용되는 기본 리소스입니다.
갤러리 이름에 허용되는 문자는 대문자 또는 소문자, 숫자, 점 및 마침표입니다. 갤러리 이름에는 대시를 사용할 수 없습니다. 갤러리 이름은 구독 내에서 고유해야 합니다.
az sig create를 사용하여 이미지 갤러리를 만드세요.
다음 예제에서
- 미국 동부에 있는 myGalleryRG라는 갤러리에 대한 리소스 그룹을 만듭니다.
- 갤러리의 이름은 myGallery입니다.
export MY_GALLERY_RG_NAME="myGalleryRG$RANDOM_ID"
export MY_GALLERY_NAME="myGallery$RANDOM_ID"
az group create --name $MY_GALLERY_RG_NAME --location $REGION
az sig create --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME
이미지 정의 만들기
이미지 정의는 이미지에 대한 논리적 그룹화를 만듭니다. 내부에서 생성된 이미지 버전에 대한 정보를 관리하는 데 사용됩니다.
이미지 정의 이름은 대문자 또는 소문자, 숫자, 점, 대시 및 마침표로 구성될 수 있습니다.
이미지 정의가 올바른 형식인지 확인합니다.
- 상태 - VM을 일반화한 경우(Windows용 Sysprep 사용 또는 Linux용 waagent -deprovision 사용) 다음을 사용하여
--os-state generalized
일반화된 이미지 정의를 만들어야 합니다. 기존 사용자 계정을 제거하지 않고 VM을 사용하려는 경우--os-state specialized
를 사용하여 특수화된 이미지 정의를 만듭니다. - 보안 유형 - 기본적으로 구성된 신뢰할 수 있는 시작을 사용하여 새 Azure VM이 만들어집니다. 이 자습서에는 이미지 정의 및 확장 집합을 만들 때 신뢰할 수 있는 시작 구성을 반영하는 후속 코드 샘플이 포함되어 있습니다. 신뢰할 수 있는 시작을 사용하도록 설정하지 않은 VM을 사용하여 이미지를 만드는 경우 두 리소스를 모두 만들 때 올바른 보안 유형을 반영해야 합니다. 신뢰할 수 있는 시작에 대한 자세한 내용은 Azure 가상 머신에 대한 신뢰할 수 있는 시작을 참조 하세요.
이미지 정의에 대해 지정할 수 있는 값에 대한 자세한 내용은 이미지 정의를 참조하세요.
az sig image-definition create를 사용하여 갤러리에서 이미지 정의를 만듭니다.
다음 예제에서 이미지 정의는 다음과 같습니다.
- myImageDefinition이라는 이름을 지정 했습니다.
- 특수 Linux OS 이미지에 대해 구성됩니다 . Windows OS를 사용하여 이미지에 대한 정의를 만들려면
--os-type Windows
를 사용합니다. - 신뢰할 수 있는 시작에 대해 구성되었습니다.
export MY_IMAGE_DEF_NAME="myImageDefinition$RANDOM_ID"
MY_PUBLISHER_NAME="myPublisher$RANDOM_ID"
az sig image-definition create \
--resource-group $MY_GALLERY_RG_NAME \
--gallery-name $MY_GALLERY_NAME \
--gallery-image-definition $MY_IMAGE_DEF_NAME \
--publisher $MY_PUBLISHER_NAME \
--offer myOffer \
--sku mySKU \
--os-type Linux \
--os-state specialized \
--features SecurityType=TrustedLaunch
팁
이미지 정의의 ID는 명령의 출력에 표시됩니다. 이 자습서의 뒷부분에서 사용할 수 있도록 안전한 위치에 복사하고 저장합니다.
이미지 버전 만들기
az image gallery create-image-version을 사용하여 VM에서 이미지 버전을 만듭니다.
이미지 버전에 허용되는 문자는 숫자와 마침표입니다. 숫자는 32비트 정수 범위 내에 포함되어야 합니다. 형식: MajorVersion.MinorVersion.Patch.
다음 예제에서
- 이미지 버전은 1.0.0입니다.
- 미국 중남부 지역에 복제본 1개, 미국 동부 지역에 복제본 1개를 만듭니다. 복제 지역에는 원본 VM이 있는 지역이 포함되어야 합니다.
--virtual-machine
는 이전에 만든 VM의 ID입니다.
export MY_VM_ID=$(az vm show --name $MY_VM_NAME --resource-group $MY_RESOURCE_GROUP_NAME --query "id" --output tsv)
az sig image-version create \
--resource-group $MY_GALLERY_RG_NAME \
--gallery-name $MY_GALLERY_NAME \
--gallery-image-definition $MY_IMAGE_DEF_NAME \
--gallery-image-version 1.0.0 \
--target-regions "southcentralus=1" "eastus=1" \
--virtual-machine $MY_VM_ID
참고 항목
동일한 이미지를 사용하여 다른 이미지 버전을 만들려면 이미지 버전이 완전히 빌드 및 복제될 때까지 기다려야 합니다.
또한 이미지 버전을 만들 때 --storage-account-type premium_lrs
를 추가하여 프리미엄 스토리지에 추가하거나 --storage-account-type standard_zrs
를 추가하여 영역 중복 스토리지를 추가하여 이미지를 저장할 수도 있습니다.
이미지에서 확장 집합 만들기
를 사용하여 확장 집합을 만듭니다 az vmss create
. 특수 원본 VM을 사용하는 경우 매개 변수를 --specialized
추가하여 특수 이미지임을 나타냅니다.
이미지 정의 ID를 --image
사용하여 확장 집합 인스턴스를 만드는 경우 사용 가능한 최신 버전의 이미지를 사용하는 확장 집합을 만듭니다. 이미지의 특정 버전을 원하는 경우 정의할 때 이미지 버전 ID를 --image
포함해야 합니다.
최신 이미지 예제:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Compute/galleries/myGallery/images/myImage
특정 이미지 예제:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Compute/galleries/myGallery/images/myImage/versions/1.0.0
다음 예제에서 확장 집합은 다음과 같습니다.
- myScaleSet이라는 이름 지정
- myImageDefinition 이미지의 최신 버전을 사용합니다.
- 신뢰할 수 있는 시작에 대해 구성되었습니다.
export MY_IMAGE_DEF_ID=$(az sig image-definition show --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME --gallery-image-definition $MY_IMAGE_DEF_NAME --query "id" --output tsv)
export MY_SCALE_SET_RG_NAME="myResourceGroup$RANDOM_ID"
export MY_SCALE_SET_NAME="myScaleSet$RANDOM_ID"
az group create --name $MY_SCALE_SET_RG_NAME --location eastus
az vmss create \
--resource-group $MY_SCALE_SET_RG_NAME \
--name $MY_SCALE_SET_NAME \
--orchestration-mode flexible \
--image $MY_IMAGE_DEF_ID \
--specialized \
--security-type TrustedLaunch
확장 집합 리소스와 VM을 모두 만들고 구성하는 데 몇 분 정도 걸립니다.
갤러리 공유
Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 구독 간에 이미지를 공유할 수 있으며 갤러리, 이미지 정의 또는 이미지 버전 수준에서 공유할 수 있습니다. 구독 간에 이미지 버전에 대한 읽기 권한이 있는 모든 사용자는 이미지 버전을 사용하여 VM을 배포할 수 있습니다.
갤러리 수준에서 다른 사용자와 공유하는 것이 좋습니다.
다음 예제를 참조하세요.
- az sig show를 사용하여 갤러리의 개체 ID를 가져옵니다.
- az role assignment create를 사용하여 갤러리에 대한 액세스를 제공합니다.
- 개체 ID를 할당 범위로 사용합니다.
- 데모를 위해 로그인한 사용자의 ID를 담당자로 사용합니다. 테스트 또는 프로덕션 코드에서 이 코드를 사용하는 경우 이 이미지에 액세스할 수 있는 사용자를 반영하도록 담당자를 업데이트해야 합니다. Azure RBAC를 사용하여 리소스를 공유하는 방법에 대한 자세한 내용은 Azure CLI를 사용하여 Azure 역할 할당 추가 또는 제거를 참조하세요. - 이메일 주소와 함께 az role assignment create를 사용하여 사용자에게 공유 이미지 갤러리에 대한 액세스 권한을 부여합니다.
export MY_GALLERY_ID=$(az sig show --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME --query "id" --output tsv)
export CALLER_ID=$(az ad signed-in-user show --query id -o tsv)
az role assignment create \
--role "Reader" \
--assignee $CALLER_ID \
--scope $MY_GALLERY_ID
리소스 정리
확장 집합 및 추가 리소스를 제거하려면 az group delete를 사용하여 리소스 그룹 및 모든 해당 리소스를 삭제합니다. --no-wait
매개 변수는 작업이 완료될 때까지 대기하지 않고 프롬프트로 제어를 반환합니다. --yes
매개 변수는 작업을 수행하는 추가 프롬프트 없이 리소스를 삭제할 것인지 확인합니다.
다음 단계
이 자습서에서는 Azure CLI를 사용하여 확장 집합에 대한 사용자 지정 VM 이미지를 만들고 사용하는 방법을 알아보았습니다.
- Azure Compute Gallery 만들기
- 특수화된 이미지 정의 만들기
- 이미지 버전 만들기
- 특수화된 이미지에서 확장 집합 만들기
- 이미지 갤러리 공유
애플리케이션을 확장 집합에 배포하는 방법을 알아보려면 다음 자습서로 계속 진행하세요.