VM 애플리케이션은 가상 머신에 대한 애플리케이션의 관리, 공유 및 전역 배포를 간소화하는 Azure Compute Gallery(이전의 Shared Image Gallery)의 리소스 종류입니다.
시작하기 전에 다음을 갖추고 있는지 확인합니다.
이 문서에서는 이미 Azure Compute Gallery가 이미 있다고 가정합니다. 갤러리가 아직 없는 경우 먼저 갤러리를 만듭니다. 자세한 내용은 리소스 저장 및 공유를 위한 갤러리 만들기를 참조하세요.
다른 제한 수준이 배포에 실패하기 때문에 스토리지 계정에 공용 수준 액세스 권한이 있는지 확인하거나 읽기 권한이 있는 SAS URI를 사용합니다. SAS URI가 아직 없는 경우 Storage Explorer를 사용하여 빠르게 만들 수 있습니다.
PowerShell을 사용하는 경우 Az.Storage 모듈 버전 3.11.0을 사용해야 합니다.
VM 애플리케이션 정의 및 버전을 만들기 위한 아래 옵션을 선택합니다.
- Azure Portal로 이동한 다음 Azure Compute Gallery를 검색하여 선택합니다.
- 목록에서 사용하려는 갤러리를 선택합니다.
- 갤러리 페이지의 페이지 상단에서 추가를 선택한 다음 드롭다운에서 VM 애플리케이션 정의를 선택합니다. VM 애플리케이션 정의 만들기 페이지가 열립니다.
- 기본 탭에서 애플리케이션 이름을 입력하고 애플리케이션이 Linux 또는 Windows를 실행하는 VM용인지 선택합니다.
- VM 애플리케이션 정의에 대해 다음과 같은 선택적 설정을 지정하려면 게시 옵션 탭을 선택합니다.
- VM 애플리케이션 정의에 대한 설명입니다.
- 수명 주기 끝
- Eula에 대한 링크
- 개인정보처리방침의 URI
- 릴리스 정보에 대한 URI
- 완료되면 검토 + 만들기를 선택합니다.
- 유효성 검사가 완료되면 만들기를 선택하여 정의를 배포합니다.
- 배포가 완료되면 리소스로 이동을 선택합니다.
- 애플리케이션 페이지에서 VM 애플리케이션 버전 만들기를 선택합니다. VM 애플리케이션 버전 만들기 페이지가 열립니다.
- 버전 번호(예: 1.0.0)를 입력합니다.
- 애플리케이션 패키지를 업로드한 지역을 선택합니다.
- 원본 애플리케이션 패키지에서 찾아보기를 선택합니다. 스토리지 계정을 선택한 다음, 패키지가 있는 컨테이너를 선택합니다. 목록에서 패키지를 선택한 다음, 완료되면 선택을 선택합니다. 또는 원하는 경우 이 필드에 SAS URI를 붙여넣을 수 있습니다.
- 설치 스크립트를 입력합니다. 제거 스크립트 및 업데이트 스크립트를 제공할 수도 있습니다. 스크립트를 만드는 방법에 대한 자세한 내용은 개요를 참조하세요.
- 스토리지 계정에 업로드된 기본 구성 파일이 있는 경우 기본 구성에서 선택할 수 있습니다.
- VM을 만들 때 이 버전을 최신 버전으로 표시하지 않으려면 최신 버전에서 제외를 선택합니다.
- 수명 종료 날짜에서 미래 날짜를 선택하여 이 버전을 사용 중지해야 하는 날짜를 확인합니다. 자동으로 삭제되거나 제거되지 않으며 사용자 고유의 확인용입니다.
- 이 버전을 다른 지역에 복제하려면 복제 탭을 선택하고 더 많은 지역을 추가하고 지역당 복제본 수를 변경합니다. 버전을 만든 원래 지역은 목록에 있어야 하며 제거할 수 없습니다.
- 변경이 완료되면 페이지 하단에 있는 검토 + 만들기를 선택합니다.
- 유효성 검사가 통과된 것으로 표시되면 만들기를 선택하여 VM 애플리케이션 버전을 배포합니다.
이제 포털을 사용하여 VM을 만들고 VM 애플리케이션을 배포할 수 있습니다. 평소와 같이 VM을 만들고 고급 탭에서 설치할 VM 애플리케이션 선택을 선택합니다.
목록에서 VM 애플리케이션을 선택한 후 페이지 하단에서 저장을 선택합니다.
설치할 VM 애플리케이션이 두 개 이상인 경우 고급 탭에서 각 VM 애플리케이션의 설치 순서를 다시 설정할 수 있습니다.
현재 실행 중인 VM에 VM 애플리케이션을 배포할 수도 있습니다. 포털에서 VM 세부 정보를 볼 때 왼쪽 메뉴의 설정에서 확장 + 애플리케이션 옵션을 선택합니다.
VM 애플리케이션을 선택한 다음, 애플리케이션 추가를 선택하여 VM 애플리케이션을 추가합니다.
목록에서 VM 애플리케이션을 선택한 후 페이지 하단에서 저장을 선택합니다.
VM 애플리케이션 상태를 표시하려면 확장 + 애플리케이션 탭/설정으로 이동하여 VMAppExtension의 상태를 확인합니다.
VMSS에 대한 VM 애플리케이션 상태를 표시하려면 VMSS 페이지인 인스턴스로 이동하여 그 중 하나를 선택한 다음, VMAppExtension으로 이동합니다.
VM 애플리케이션에는 Azure CLI 버전 2.30.0 이상이 필요합니다.
az sig gallery-application create를 사용하여 VM 애플리케이션 정의를 만듭니다. 이 예제에서는 Linux 기반 VM용 myApp이라는 VM 애플리케이션 정의를 생성합니다.
az sig gallery-application create \
--application-name myApp \
--gallery-name myGallery \
--resource-group myResourceGroup \
--os-type Linux \
--location "East US"
az sig gallery-application version create를 사용하여 VM 애플리케이션 버전을 만듭니다. 버전에 허용되는 문자는 숫자 및 마침표입니다. 숫자는 32비트 정수 범위 내에 포함되어야 합니다. 형식: MajorVersion.MinorVersion.Patch.
매개 변수의 값을 원하는 값으로 바꿉니다.
az sig gallery-application version create \
--version-name 1.0.0 \
--application-name myApp \
--gallery-name myGallery \
--location "East US" \
--resource-group myResourceGroup \
--package-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" \
--install-command "mv myApp .\myApp\myApp" \
--remove-command "rm .\myApp\myApp" \
--update-command "mv myApp .\myApp\myApp" \
--default-configuration-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>"\
az vm application set을 사용하여 VM 애플리케이션을 기존 VM으로 설정하고 매개 변수 값을 사용자 고유의 값으로 바꿉니다.
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subID}/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
VM에서 여러 애플리케이션을 설정하는 경우:
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.1 \
--treat-deployment-as-failure true true
VMSS에 애플리케이션을 추가하려면 az vmss application set을 사용합니다.
az vmss application set \
--resource-group myResourceGroup \
--name myVmss \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
VMSS에 여러 애플리케이션을 추가하려면 다음을 수행합니다.
az vmss application set \
--resource-group myResourceGroup \
--name myVmss
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.0 \
--treat-deployment-as-failure true
애플리케이션 VM 배포 상태를 확인하려면 az vm get-instance-view를 사용합니다.
az vm get-instance-view -g myResourceGroup -n myVM --query "instanceView.extensions[?name == 'VMAppExtension']"
애플리케이션 VMSS 배포 상태를 확인하려면 az vmss get-instance-view를 사용합니다.
az vmss get-instance-view --ids (az vmss list-instances -g myResourceGroup -n myVmss --query "[*].id" -o tsv) --query "[*].extensions[?name == 'VMAppExtension']"
참고 항목
위의 VMSS 배포 상태 명령은 결과와 함께 인스턴스 ID를 나열하지 않습니다. 각 인스턴스에서 확장 상태의 인스턴스 ID를 표시하려면 몇 가지 추가 스크립팅이 필요합니다. PowerShell 구문을 포함하는 아래 VMSS CLI 예제를 참조하세요.
$ids = az vmss list-instances -g myResourceGroup -n myVmss --query "[*].{id: id, instanceId: instanceId}" | ConvertFrom-Json
$ids | Foreach-Object {
$iid = $_.instanceId
Write-Output "instanceId: $iid"
az vmss get-instance-view --ids $_.id --query "extensions[?name == 'VMAppExtension']"
}
New-AzGalleryApplication
을 사용하여 VM 애플리케이션 정의를 만듭니다. 이 예제에서는 myGallery Azure Compute Gallery, myGallery 리소스 그룹에 myApp이라는 Linux 앱을 만들고 사용자의 용도를 위한 VM 애플리케이션의 간단한 설명을 제공했습니다. 필요에 따라 값을 바꿉니다.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
New-AzGalleryApplication `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-Location "East US" `
-Name $applicationName `
-SupportedOSType Linux `
-Description "Backend Linux application for finance."
New-AzGalleryApplicationVersion
을 사용하여 애플리케이션 버전을 만듭니다. 버전에 허용되는 문자는 숫자 및 마침표입니다. 숫자는 32비트 정수 범위 내에 포함되어야 합니다. 형식: MajorVersion.MinorVersion.Patch.
이 예제에서는 버전 번호 1.0.0을 만듭니다. 필요에 따라 변수 값을 바꿉니다.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
New-AzGalleryApplicationVersion `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-GalleryApplicationName $applicationName `
-Name $version `
-PackageFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-DefaultConfigFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-Location "East US" `
-Install "mv myApp .\myApp\myApp" `
-Remove "rm .\myApp\myApp" `
기존 VM에 애플리케이션을 추가하려면 애플리케이션 버전을 가져오고, 이를 사용하여 VM 애플리케이션 버전 ID를 가져옵니다. ID를 사용하여 VM 구성에 애플리케이션을 추가합니다.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
$vmName = "myVM"
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmGalleryApplication -PackageReferenceId $packageId
Add-AzVmGalleryApplication -VM $vm -GalleryApplication $app -TreatFailureAsDeploymentFailure true
Update-AzVM -ResourceGroupName $rgName -VM $vm
VMSS에 애플리케이션을 추가하려면 다음을 수행합니다.
$vmss = Get-AzVmss -ResourceGroupName $rgname -Name $vmssName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmssGalleryApplication -PackageReferenceId $packageId
Add-AzVmssGalleryApplication -VirtualMachineScaleSetVM $vmss.VirtualMachineProfile -GalleryApplication $app
Update-AzVmss -ResourceGroupName $rgName -VirtualMachineScaleSet $vmss -VMScaleSetName $vmssName
애플리케이션이 성공했는지 확인합니다.
$rgName = "myResourceGroup"
$vmName = "myVM"
$result = Get-AzVM -ResourceGroupName $rgName -VMName $vmName -Status
$result.Extensions | Where-Object {$_.Name -eq "VMAppExtension"} | ConvertTo-Json
VMSS를 확인하려면 다음을 수행합니다.
$rgName = "myResourceGroup"
$vmssName = "myVMss"
$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary = New-Object System.Collections.ArrayList
$result | ForEach-Object {
$res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
$resultSummary.Add($res) | Out-Null
}
$resultSummary | ConvertTo-Json -Depth 5
애플리케이션 정의를 만듭니다.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>?api-version=2019-03-01
{
"location": "West US",
"name": "myApp",
"properties": {
"supportedOSType": "Windows | Linux",
"endOfLifeDate": "2020-01-01"
}
}
필드 이름 |
설명 |
제한 사항 |
name |
갤러리 내의 VM 애플리케이션에 대한 고유한 이름 |
최대 길이는 117자입니다. 허용되는 문자는 대문자 또는 소문자, 숫자, 하이픈(-), 마침표(.), 밑줄(_)입니다. 이름은 마침표(.)로 끝날 수 없습니다. |
supportedOSType |
Windows 또는 Linux 애플리케이션인지 여부 |
"Windows" 또는 "Linux" |
endOfLifeDate |
애플리케이션의 향후 수명 종료 날짜입니다. 이는 참조 전용이며 적용되지 않습니다. |
유효한 향후 날짜 |
VM 애플리케이션 버전을 만듭니다.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>/versions/\<**versionName**\>?api-version=2019-03-01
{
"location": "$location",
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "$mediaLink",
"defaultConfigurationLink": "$configLink"
},
"manageActions": {
"install": "echo installed",
"remove": "echo removed",
"update": "echo update"
},
"targetRegions": [
{
"name": "$location1",
"regionalReplicaCount": 1
},
{ "name": "$location1" }
]
},
"endofLifeDate": "datetime",
"excludeFromLatest": "true | false"
}
}
필드 이름 |
설명 |
제한 사항 |
location |
VM 애플리케이션 버전의 원본 위치 |
유효한 Azure 지역 |
mediaLink |
애플리케이션 버전 패키지가 포함된 URL |
유효한 스토리지 URL 및 기존 스토리지 URL |
defaultConfigurationLink |
선택 사항. 배포 시 재정의될 수 있는 기본 구성이 포함된 URL입니다. |
유효한 스토리지 URL 및 기존 스토리지 URL |
설치 |
애플리케이션을 설치하는 명령 |
지정된 OS에 대한 유효한 명령 |
제거 |
애플리케이션을 제거하는 명령 |
지정된 OS에 대한 유효한 명령 |
엽데이트 |
선택 사항. 애플리케이션을 업데이트하는 명령 지정하지 않고 업데이트가 필요한 경우 이전 버전이 제거되고 새 버전이 설치됩니다. |
지정된 OS에 대한 유효한 명령 |
targetRegions/name |
복제할 지역의 이름 |
Azure 지역 유효성 검사 |
targetRegions/regionalReplicaCount |
선택 사항. 만들 지역의 복제본 수입니다. 기본값은 1입니다. |
1과 3(포함) 사이의 정수 |
endOfLifeDate |
애플리케이션 버전의 향후 수명 종료 날짜입니다. 이는 고객 참조 전용이며 적용되지 않습니다. |
유효한 향후 날짜 |
excludeFromLatest |
지정된 경우 이 버전은 최신 버전으로 간주되지 않습니다. |
True 또는 False |
VM에 VM 애플리케이션 버전을 추가하려면 VM에서 PUT을 수행합니다.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>?api-version=2019-03-01
{
"properties": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
VM 애플리케이션을 균일한 확장 집합에 적용하려면 다음을 수행합니다.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/
virtualMachineScaleSets/\<**VMSSName**\>?api-version=2019-03-01
{
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
필드 이름 |
설명 |
제한 사항 |
order |
선택 사항. 애플리케이션을 배포해야 하는 순서입니다. 아래 내용을 참조하세요. |
정수 유효성 검사 |
packageReferenceId |
갤러리 애플리케이션 버전 참조 |
유효한 애플리케이션 버전 참조 |
configurationReference |
선택 사항. 이 배포에 대한 구성이 포함된 스토리지 Blob의 전체 URL입니다. 이렇게 하면 이전에 defaultConfiguration에 제공된 모든 값이 재정의됩니다. |
유효한 스토리지 Blob 참조 |
treatFailureAsDeploymentFailure |
선택 사항. VM 앱에 대한 프로비전 상태입니다. false로 설정하면 앱 배포 실패와 관계없이 프로비전 상태가 항상 '성공'으로 표시됩니다. |
True 또는 False |
순서 필드를 사용하여 애플리케이션 간의 종속성을 지정할 수 있습니다. 규칙은 다음 순서대로 적용됩니다.
케이스 |
설치 의미 |
오류 의미 |
지정된 순서 없음 |
순서가 지정되지 않은 애플리케이션은 순서가 지정된 애플리케이션 다음에 설치됩니다. 순서가 지정되지 않은 애플리케이션 간에는 설치 순서가 보장되지 않습니다. |
순서가 지정되었거나 순서가 지정되지 않은 다른 애플리케이션의 설치 실패는 순서가 지정되지 않은 애플리케이션의 설치에 영향을 주지 않습니다. |
중복 순서 값 |
애플리케이션은 동일한 순서의 다른 애플리케이션과 비교하여 임의의 순서로 설치됩니다. 동일한 순서의 모든 애플리케이션은 낮은 순서의 애플리케이션 뒤에 설치되고 높은 순서의 애플리케이션보다 먼저 설치됩니다. |
낮은 순서의 이전 애플리케이션을 설치하지 못한 경우 이 순서가 포함된 애플리케이션이 설치되지 않습니다. 이 순서의 애플리케이션이 설치되지 않으면 더 높은 순서의 애플리케이션이 설치되지 않습니다. |
순서 증가 |
애플리케이션은 낮은 순서의 애플리케이션 뒤에 설치되고 높은 순서의 애플리케이션보다 먼저 설치됩니다. |
낮은 순서의 이전 애플리케이션 설치에 실패한 경우 이 애플리케이션은 설치되지 않습니다. 이 애플리케이션을 설치하지 못하면 더 높은 순서의 애플리케이션이 설치되지 않습니다. |
응답에는 전체 VM 모델이 포함됩니다. 관련 부분은 다음과 같습니다.
{
"name": "{vm name}",
"id": "{vm id}",
"type": "Microsoft.Compute/virtualMachines",
"location": "{vm location}",
"properties": {
"applicationProfile": {
"galleryApplications": ""
},
"provisioningState": "Updating"
},
"resources": [
{
"name": "VMAppExtension",
"id": "{extension id}",
"type": "Microsoft.Compute/virtualMachines/extensions",
"location": "centraluseuap",
"properties": "@{autoUpgradeMinorVersion=True; forceUpdateTag=7c4223fc-f4ea-4179-ada8-c8a85a1399f5; provisioningState=Creating; publisher=Microsoft.CPlat.Core; type=VMApplicationManagerLinux; typeHandlerVersion=1.0; settings=}"
}
]
}
VM 애플리케이션이 VM에 아직 설치되지 않은 경우 값은 비어 있습니다.
VM 인스턴스 보기의 결과를 가져오려면 다음을 수행합니다.
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>/instanceView?api-version=2019-03-01
결과는 다음과 같습니다.
{
...
"extensions" [
...
{
"name": "VMAppExtension",
"type": "Microsoft.CPlat.Core.VMApplicationManagerLinux",
"typeHandlerVersion": "1.0.9",
"statuses": [
{
"code": "ProvisioningState/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"message": "Enable succeeded: {\n \"CurrentState\": [\n {\n \"applicationName\": \"doNothingLinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install SUCCESS\"\n },\n {
\n \"applicationName\": \"badapplinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install FAILED Error executing command \u0027exit 1\u0027: command terminated with exit status=1\"\n }\n ],\n \"ActionsPerformed\": []\n}
"
}
]
}
...
]
}
VM 앱 상태는 인스턴스 보기에서 VM 앱 확장 결과의 상태 메시지에 있습니다.
VMSS 애플리케이션의 상태를 가져오려면 다음을 수행합니다.
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/ virtualMachineScaleSets/\<**VMSSName**\>/virtualMachines/<**instanceId**>/instanceView?api-version=2019-03-01
출력은 이전의 VM 예제와 비슷합니다.