Приложения виртуальной машины — это тип ресурса в Коллекции вычислений Azure (прежнее название — общая коллекция образов), который упрощает управление, совместное использование и глобальное распределение приложений для виртуальных машин.
Убедитесь, что у учетной записи хранения есть общедоступный доступ или используется универсальный код ресурса (URI) SAS с правами чтения, так как другие уровни ограничений завершаются сбоем развертывания. Вы можете быстро создать URI SAS с помощью Обозревателя службы хранилища, если он еще не создан.
Если вы работаете с PowerShell, используйте Az.Storage версии 3.11.0.
Выберите вариант ниже, чтобы создать определение и версию приложения виртуальной машины:
- Перейдите на портал Azure, а затем найдите и выберите службу Коллекция вычислений Azure.
- Выберите в списке необходимую коллекцию.
- На странице коллекции выберите Добавить в верхней части страницы, а затем в раскрывающемся списке выберите пункт Определение приложения виртуальной машины. Откроется страница определения приложения виртуальной машины.
- На вкладке Основные сведения введите имя приложения и укажите, предназначено ли оно для виртуальных машин под управлением Linux или Windows.
- Выберите вкладку "Параметры публикации", если вы хотите указать любой из следующих необязательных параметров для определения приложения виртуальной машины:
- Описание определения приложения виртуальной машины.
- Дата окончания жизненного цикла
- Ссылка на лицензионное соглашение
- URI заявления о конфиденциальности
- URI для заметок о выпуске
- Когда все будет готово, выберите Просмотр и создание.
- После завершения проверки выберите Создать, чтобы развернуть определение.
- По завершении развертывания выберите элемент Перейти к ресурсу.
- На странице приложения выберите Создать версию приложения виртуальной машины. Откроется страница "Создание версии приложения виртуальной машины".
- Введите номер версии, например 1.0.0.
- Выберите регион, куда вы отправили пакет приложения.
- В разделе Исходный пакет приложения нажмите кнопку Обзор. Выберите учетную запись хранения, а затем контейнер, в котором находится пакет. Выберите пакет из списка и нажмите кнопку "Выбрать " после завершения. Кроме того, при необходимости вы можете вставить универсальный код ресурса (URI) SAS в это поле.
- Введите Скрипт установки. Также можно предоставить скрипт удаления и скрипт обновления. Сведения о том, как создать скрипты, см. в обзоре.
- Если в учетную запись хранения был передан файл конфигурации по умолчанию, его можно выбрать в разделе Конфигурация по умолчанию.
- Выберите Исключить из последних, если не хотите, чтобы эта версия отображалась как последняя при создании виртуальной машины.
- В поле срок Дата окончания жизненного цикла выберите дату в будущем, не которую хотите запланировать отказ от использования этой версии. Она не будет удалена автоматически: эти сведения предназначены только для вашего собственного отслеживания.
- Чтобы реплицировать эту версию в другие регионы, откройте вкладку Репликация, добавьте дополнительные регионы и внесите изменения в число реплик на регион. Исходный регион, в котором была создана ваша версия, должен быть в списке и не может быть удален.
- По завершении выберите Проверить и создать в нижней части страницы.
- Когда проверка отобразится как пройденная, выберите Создать, чтобы развернуть версию приложения виртуальной машины.
Теперь можно создать виртуальную машину и развернуть на ней приложение виртуальной машины с помощью портала. Просто создайте виртуальную машину, как обычно, а затем на вкладке Дополнительно выберите Выбрать приложение виртуальной машины для установки.
Выберите в списке приложение виртуальной машины и нажмите кнопку Сохранить в нижней части страницы.
Если вам требуется установить несколько приложений виртуальных машин, можно задать порядок их установки на вкладке Дополнительно.
Вы также можете развернуть приложение виртуальной машины для работающих виртуальных машин. Просматривая сведения о виртуальной машине на портале, выберите Расширения и приложения в разделе Параметры в меню слева.
Щелкните элемент Приложения виртуальных машин и выберите Добавить приложение, чтобы добавить приложение виртуальной машины.
Выберите в списке приложение виртуальной машины и нажмите кнопку Сохранить в нижней части страницы.
Чтобы отобразить состояние приложения виртуальной машины, перейдите к параметрам на вкладке Extensions + apps (Расширения и приложения) и проверьте состояние VMAppExtension:
Чтобы отобразить состояние приложения виртуальной машины для VMSS, перейдите на страницу VMSS, "Экземпляры", выберите один из них, затем перейдите в VMAppExtension:
Для приложений виртуальных машин требуется Azure CLI версии 2.30.0 или более поздней.
Создайте определение приложения виртуальной машины с помощью команды az sig gallery-application create. В этом примере мы создадим определение приложения виртуальной машины с именем myApp для виртуальных машин под управлением Linux.
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. В номере версии можно использовать цифры и точки. Числа должны быть в диапазоне 32-битного целого числа. Формат: основной номер версии.дополнительный номер версии.исправление.
Замените значения параметров своими значениями.
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 и замените значения параметров собственными.
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
Чтобы задать несколько приложений на виртуальной машине, используйте следующий фрагмент кода:
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
Чтобы проверить состояние развертывания виртуальной машины приложения, используйте az vm get-instance-view:
az vm get-instance-view -g myResourceGroup -n myVM --query "instanceView.extensions[?name == 'VMAppExtension']"
Чтобы проверить состояние развертывания VMSS приложения, используйте az vm 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 не выводит идентификатор экземпляра с результатом. Чтобы отобразить идентификатор экземпляра с состоянием расширения в каждом экземпляре, требуется дополнительный сценарий. Ознакомьтесь с приведенным ниже примером интерфейса командной строки VMSS, который содержит синтаксис PowerShell.
$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
. В этом примере мы создаем приложение Linux с именем MyApp в Коллекции вычислений Azure myGallery в группе ресурсов myGallery. Кроме того, для удобства мы задаем краткое описание приложения виртуальной машины. При необходимости замените значения.
$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-битного целого числа. Формат: основной номер версии.дополнительный номер версии.исправление.
В этом примере мы создаем номер версии 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" `
Чтобы добавить приложение в существующую виртуальную машину, получите версию приложения и на ее основе определите идентификатор версии приложения виртуальной машины. С помощью идентификатора добавьте приложение в конфигурацию виртуальной машины.
$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"
}
}
Имя поля |
Description |
Ограничения |
name |
Уникальное имя для приложения виртуальной машины в коллекции |
Максимальная длина: 117 символов. Допустимые символы: прописные или строчные буквы, цифры, дефис (-), точка (.), символ подчеркивания (_). Имена не должны заканчиваться точкой (.). |
supportedOSType |
Указыает платформу приложения (Windows или Linux) |
"Windows" или "Linux" |
endOfLifeDate |
Будущая дата окончания жизненного цикла приложения. Обратите внимание, что эта информация предназначена только для справки и не применяется. |
Допустимая дата создания |
Создание версии приложения виртуальной машины.
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"
}
}
Имя поля |
Description |
Ограничения |
расположение |
Исходное расположение версии приложения виртуальной машины |
Допустимый регион Azure |
mediaLink |
URL-адрес, содержащий пакет версии приложения |
Допустимый и существующий URL-адрес хранилища |
defaultConfigurationLink |
Необязательно. URL-адрес, содержащий конфигурацию по умолчанию, который может быть переопределен во время развертывания. |
Допустимый и существующий URL-адрес хранилища |
Установка |
Команда для установки приложения |
Допустимая команда для заданной ОС |
Удалить |
Команда для удаления приложения |
Допустимая команда для заданной ОС |
Обновить |
Необязательно. Команда для обновления приложения. Если не указано и обновление требуется, старая версия удаляется и установлена новая. |
Допустимая команда для заданной ОС |
targetRegions/name |
Имя региона, в который выполняется репликация |
Допустимый регион Azure |
targetRegions/regionalReplicaCount |
Необязательно. Число реплик в создаваемом регионе. По умолчанию равен 1. |
Целое число от 1 до 3 (включительно). |
endOfLifeDate |
Будущая дата окончания жизненного цикла для версии приложения. Обратите внимание, что эта информация предназначена только для справки и не применяется. |
Допустимая дата создания |
excludeFromLatest |
Если этот параметр указан, данная версия не будет считаться последней. |
Значение true или false |
Чтобы добавить версию приложения виртуальной машины на виртуальную машину, выполните размещение (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}"
}
Чтобы применить приложение виртуальной машины к однородному масштабируемому набору:
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}"
}
Имя поля |
Description |
Ограничения |
заказ |
Необязательно. Приоритет развертывания приложений. См. ниже. |
Допустимое целое число |
packageReferenceId |
Ссылка на версию приложения из коллекции |
Допустимая ссылка на версию приложения |
configurationReference |
Необязательно. Полный URL-адрес большого двоичного объекта хранилища, содержащего конфигурацию для этого развертывания. Он переопределяет любое значение, указанное для defaultConfiguration ранее. |
Допустимая ссылка на BLOB-объект хранилища |
treatFailureAsDeploymentFailure |
Необязательно. Состояние подготовки для приложения виртуальной машины. Если задано значение false, состояние подготовки всегда будет отображаться как "Выполнено" независимо от сбоя развертывания приложения. |
True или False |
Поле приоритета можно использовать для настройки зависимостей между приложениями. Применяются следующие правила последовательности:
Регистр |
Значение установки |
Значение сбоя |
Приоритет не указан |
Приложения, для которых не указан приоритет, устанавливаются после тех, для которых он указан. Приоритет установки приложений, для которых он не указан, не гарантируется. |
Сбои при установке других приложений (независимо от того, указан ли для них приоритет) не влияют на установку приложений, для которых приоритет не указан. |
Дублирующиеся значения приоритета |
Приложение устанавливается в любом порядке по сравнению с другими приложениями с тем же порядком. Все приложения с одинаковым приоритетом устанавливаются до приложений с более низким (большее значение) и после приложений с более высоким (меньшее значение) приоритетом. |
Если предыдущее приложение с более низким порядком не удалось установить, приложения с этим порядком не установлены. Если любое приложение с этим заказом не удается установить, ни одно приложение с более высоким порядком установки. |
Увеличение приоритета |
Приложение будет установлено после приложений с более высоким (меньшее значение) и до приложений с более низким (большее значение) приоритетом. |
Если предыдущее приложение с более высоким (меньшее значение) приоритетом не удалось установить, это приложение не устанавливается. Если это приложение не удается установить, приложение с более высоким порядком установки не выполняется. |
Ответ включает полную модель виртуальной машины. Далее идут важные элементы.
{
"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=}"
}
]
}
Если на виртуальной машине еще не установлены приложения виртуальной машины, значение будет пустым.
Чтобы получить результат представления экземпляра виртуальной машины, используйте следующий фрагмент кода:
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}
"
}
]
}
...
]
}
Состояние приложения виртуальной машины находится в сообщении о состоянии результата расширения приложения виртуальной машины в представлении экземпляра.
Чтобы получить состояние приложения VMSS, используйте следующий фрагмент кода:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/ virtualMachineScaleSets/\<**VMSSName**\>/virtualMachines/<**instanceId**>/instanceView?api-version=2019-03-01
Выходные данные похожи на пример виртуальной машины ранее.