자습서: Azure CLI를 사용하여 Virtual Machine Scale Sets에 애플리케이션 설치

확장 집합의 VM(가상 머신) 인스턴스에서 애플리케이션을 실행하려면 먼저 애플리케이션 구성 요소 및 필요한 파일을 설치해야 합니다. 이전 자습서에서는 사용자 지정 VM 이미지를 만들고 사용하여 VM 인스턴스를 배포하는 방법을 알아보았습니다. 이 사용자 지정 이미지에는 수동 애플리케이션 설치 및 구성이 포함되어 있습니다. 또한 각 VM 인스턴스가 배포된 후에 확장 집합에 애플리케이션 설치를 자동화하거나 이미 확장 집합에서 실행되는 애플리케이션을 업데이트할 수 있습니다. 이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 확장 집합에 애플리케이션 자동 설치
  • Azure 사용자 지정 스크립트 확장 사용
  • 확장 집합에서 실행되는 애플리케이션 업데이트

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

사전 요구 사항

  • 이 문서에는 Azure CLI 버전 2.0.29 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

Azure 사용자 지정 스크립트 확장이란?

사용자 지정 스크립트 확장은 Azure VM에서 스크립트를 다운로드하고 실행합니다. 이 확장은 배포 후 구성, 소프트웨어 설치 또는 기타 구성/관리 작업에 유용합니다. 스크립트는 Azure Storage 또는 GitHub에서 다운로드하거나 확장 런타임에서 Azure Portal에 제공할 수 있습니다.

사용자 지정 스크립트 확장은 Azure Resource Manager 템플릿과 통합되며, Azure CLI, Azure PowerShell, Azure Portal 또는 REST API에서 사용할 수도 있습니다. 자세한 내용은 사용자 지정 스크립트 확장 개요를 참조하세요.

Azure CLI를 통해 사용자 지정 스크립트 확장을 사용하려면 가져올 파일과 실행할 명령을 정의하는 JSON 파일을 만듭니다. 이러한 JSON 정의는 일관된 애플리케이션 설치를 적용하기 위해 확장 집합 배포 전체에서 다시 사용할 수 있습니다.

사용자 지정 스크립트 확장 정의 만들기

작동 중인 사용자 지정 스크립트 확장을 확인하기 위해 NGINX 웹 서버를 설치하고 확장 집합 VM 인스턴스의 호스트 이름을 출력하는 확장 집합을 만들어 보겠습니다. 다음 사용자 지정 스크립트 확장 정의는 GitHub에서 샘플 스크립트를 다운로드하고, 필요한 패키지를 설치한 다음, VM 인스턴스 호스트 이름을 기본 HTML 페이지에 작성합니다.

현재 셸에서 customConfig.json이라는 파일을 만들고 다음 구성을 붙여넣습니다. 예를 들어 로컬 컴퓨터에 없는 Cloud Shell에서 파일을 만듭니다. 원하는 모든 편집기를 사용할 수 있습니다. 이 자습서에서는 Vi를 사용합니다. Cloud Shell에서 vi를 입력합니다. 아래 JSON을 편집기에 붙여넣고 :w customConfig.json을 입력합니다.

{
  "fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh"],
  "commandToExecute": './automate_nginx.sh'
}

참고 항목

아래 --settings 매개 변수에서 JSON을 직접 참조(customConfig.json 파일을 참조하는 대신)하기로 결정한 경우, JSON 블록 내에서 작은 따옴표(') 및 큰따옴표(")의 사용을 반전해야 할 수도 있습니다.

확장 집합 만들기

Important

2023년 11월부터 PowerShell 및 Azure CLI를 사용하여 만들어진 VM Scale Sets는 오케스트레이션 모드가 지정되지 않은 경우 기본적으로 유연한 오케스트레이션 모드로 설정됩니다. 이 변경 내용과 취해야 할 작업에 대한 자세한 내용은 VMSS PowerShell/CLI 고객을 위한 호환성이 손상되는 변경 - Microsoft 커뮤니티 허브를 참조하세요.

az group create를 사용하여 리소스 그룹을 만듭니다. 다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

az group create --name myResourceGroup --location eastus

이제 az vmss create를 사용하여 가상 머신 확장 집합을 만듭니다. 다음 예제에서는 myScaleSet이라는 확장 집합을 만들고, SSH 키가 없는 경우 이 키를 생성합니다.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image Ubuntu2204 \
  --orchestration-mode Flexible \
  --admin-username azureuser \
  --generate-ssh-keys

확장 집합 리소스와 VM을 모두 만들고 구성하는 데 몇 분 정도 걸립니다.

사용자 지정 스크립트 확장 적용

az vmss extension set를 사용하여 사용자 지정 스크립트 확장 구성을 확장 집합의 VM 인스턴스에 적용합니다. 다음 예제에서는 customConfig.json 구성을 myResourceGroup 리소스 그룹의 myScaleSet라는 VM 인스턴스에 적용합니다.

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings customConfig.json

확장 집합의 각 VM 인스턴스는 GitHub에서 스크립트를 다운로드하고 실행합니다. 더 복잡한 예제에서는 여러 애플리케이션 구성 요소와 파일을 설치할 수 있습니다. 확장 집합의 크기를 강화하면 새 VM 인스턴스에서 자동으로 동일한 사용자 지정 스크립트 확장 정의를 적용하고 필요한 애플리케이션을 설치합니다.

주의

파일 이름은 대/소문자를 구분합니다. 이러한 지침에 명시된 정확한 파일 이름을 사용하여 오류를 방지합니다.

확장 집합 테스트

트래픽이 웹 서버에 도달하도록 허용하려면 az network lb rule create를 사용하여 부하 분산 장치 규칙을 만듭니다. 다음 예제는 myLoadBalancerRuleWeb이라는 규칙을 만듭니다.

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 주소를 가져옵니다. 다음 예제에서는 확장 집합의 일부로 만든 myScaleSetLBPublicIP의 IP 주소를 가져옵니다.

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

웹 브라우저에 부하 분산 장치의 공용 IP 주소를 입력합니다. 부하 분산 장치는 다음 예제와 같이 VM 인스턴스 중 하나에 트래픽을 분산합니다.

Basic web page in Nginx

다음 단계에서 업데이트된 버전이 표시되도록 웹 브라우저를 열어 둡니다.

앱 배포 업데이트

확장 집합의 수명 주기 전체에서 애플리케이션의 업데이트된 버전을 배포해야 할 수 있습니다. 사용자 지정 스크립트 확장을 사용하면 업데이트된 배포 스크립트를 참조한 다음, 해당 확장을 확장 집합에 다시 적용할 수 있습니다. 이전 단계에서 확장 집합을 만든 경우 --upgrade-policy-modeautomatic으로 설정되어 있습니다. 이 설정을 사용하면 확장 집합의 VM 인스턴스에서 자동으로 업데이트하여 애플리케이션의 최신 버전을 적용할 수 있습니다.

현재 셸에서 customConfigv2.json이라는 파일을 만들고 다음 구성을 붙여넣습니다. 이 정의는 업데이트된 v2 버전의 애플리케이션 설치 스크립트를 실행합니다.

{
  "fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx_v2.sh"],
  "commandToExecute": "./automate_nginx_v2.sh"
}

az vmss extension set를 사용하여 사용자 지정 스크립트 확장 구성을 확장 집합의 VM 인스턴스에 다시 적용합니다. customConfigv2.json 정의는 업데이트된 애플리케이션 버전을 적용하는 데 사용됩니다.

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings @customConfigv2.json

확장 집합의 모든 VM 인스턴스가 자동으로 샘플 웹 페이지의 최신 버전으로 업데이트됩니다. 업데이트된 버전을 확인하려면 브라우저에서 웹 사이트를 새로 고칩니다.

Updated web page in Nginx

리소스 정리

확장 집합 및 추가 리소스를 제거하려면 az group delete를 사용하여 리소스 그룹 및 모든 해당 리소스를 삭제합니다. --no-wait 매개 변수는 작업이 완료될 때까지 대기하지 않고 프롬프트로 제어를 반환합니다. --yes 매개 변수는 작업을 수행하는 추가 프롬프트 없이 리소스를 삭제할 것인지 확인합니다.

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

다음 단계

이 자습서에서는 Azure CLI를 사용하여 확장 집합에 애플리케이션을 자동으로 설치하고 업데이트하는 방법을 알아보았습니다.

  • 확장 집합에 애플리케이션 자동 설치
  • Azure 사용자 지정 스크립트 확장 사용
  • 확장 집합에서 실행되는 애플리케이션 업데이트

확장 집합을 자동으로 크기 조정하는 방법을 알아보려면 다음 자습서로 계속 진행하세요.