Общие сведения о регистрации приложений

Приложения виртуальной машины — это тип ресурса в коллекции вычислений Azure (прежнее название — общая коллекция образов), который упрощает управление, совместное использование и глобальное распределение приложений для виртуальных машин.

Хотя вы можете создать образ виртуальной машины с предварительно установленными приложениями, вам потребуется обновить образ при каждом изменении приложения. Отделение установки приложения от образов виртуальных машин означает отсутствие необходимости публиковать новый образ для каждого изменения строки кода.

Пакеты приложений предоставляют преимущества по сравнению с другими методами развертывания и упаковки:

  • Приложения виртуальных машин поддерживают политики Azure

  • Группирование и управление версиями пакетов

  • Приложения виртуальной машины могут быть глобально реплицированы в вашу инфраструктуру, поэтому вам не нужно использовать AzCopy или другие механизмы копирования хранилища для копирования битов в регионы Azure.

  • Совместное использование с другими пользователями через Управление доступом на основе ролей Azure (RBAC)

  • Поддержка виртуальных машин, а также гибкие и универсальные масштабируемые наборы

  • Если к виртуальной машине или масштабируемому набору применяются правила группы безопасности сети (NSG), загрузка пакетов из репозитория Интернета может оказаться невозможной. А с учетными записями хранения загрузка пакетов на заблокированные виртуальные машины потребует настройки частных ссылок.

  • Поддержка блочных BLOB-объектов. Эта функция позволяет эффективно обрабатывать большие файлы, разбив их на небольшие управляемые блоки. Идеально подходит для отправки больших объемов данных, потоковой передачи и фоновой отправки.

Что такое пакеты приложений виртуальных машин?

Пакеты приложений виртуальной машины используют несколько типов ресурсов:

Ресурс Description
Коллекция вычислений Azure Коллекция — это репозиторий для управления и совместного использования пакетов приложений. Пользователи могут предоставлять общий доступ к ресурсу коллекции, а все дочерние ресурсы — автоматически. Имя коллекции должно быть уникальным для каждой подписки. Например, у вас может быть одна коллекция для хранения всех образов ОС и другая коллекция для хранения всех приложений виртуальной машины.
Приложение виртуальной машины Определение приложения виртуальной машины. Это логический ресурс, в котором хранятся общие метаданные для всех версий. Например, у вас может быть определение приложения для Apache Tomcat, а в нем может находиться несколько версий.
Версия приложения виртуальной машины Развертываемый ресурс. Вы можете глобально реплицировать версии приложений виртуальной машины в целевые регионы ближе к инфраструктуре виртуальной машины. Версия приложения виртуальной машины должна быть реплицирована в регион, прежде чем ее можно будет развернуть на виртуальной машине в этом регионе.

Ограничения

  • Не более 3 реплика на регион: при создании версии приложения виртуальной машины максимальное количество реплика в каждом регионе составляет три.

  • служба хранилища с общедоступным доступом или URI SAS с правами чтения: Учетная запись хранения должна иметь общедоступный доступ или использовать URI SAS с правами чтения, так как другие уровни ограничений завершаются сбоем развертывания.

  • Повторная попытка установки после сбоя. В настоящее время единственный способ повторить попытку установки — удалить приложение из профиля, а затем снова добавить его.

  • Только 25 приложений на виртуальную машину: в любой момент может быть развернуто не более 25 приложений.

  • Размер приложения 2 ГБ: максимальный размер файла версии приложения составляет 2 ГБ.

  • В скрипте нет никаких гарантий перезагрузки. Если скрипт требует перезагрузки, при развертывании рекомендуется поместить это приложение на последнее месте. Хотя код пытается справиться с перезагрузками, может произойти сбой.

  • Требуется агент виртуальной машины. Агент виртуальной машины должен существовать на виртуальной машине и иметь возможность получать состояния целей.

  • Несколько версий одного приложения на одной виртуальной машине. На виртуальной машине нельзя использовать несколько версий одного приложения.

  • Операции перемещения в настоящее время не поддерживаются. Перемещение виртуальных машин с приложениями виртуальных машин в другие группы ресурсов в настоящее время не поддерживается.

Примечание.

Для коллекций вычислений Azure и приложений виртуальных машин служба хранилища SAS можно удалить после реплика.

Себестоимость

Плата за использование пакетов приложений виртуальной машины не взимается, но плата взимается за следующие ресурсы:

  • плата за хранение каждого пакета и всех реплик.
  • Плата за исходящую сеть для репликации первой версии образа из исходного региона в реплицируемые. Обработка последующих реплик ведется в пределах одного региона, поэтому дополнительные расходы при этом не возникают.

Дополнительные сведения об исходящем трафике сети см. на странице Сведения о стоимости пропускной способности.

Приложения виртуальной машины

Ресурс приложения виртуальной машины определяет следующие сведения о вашем приложении виртуальной машины:

  • Коллекция вычислений Azure, в которой хранится приложение виртуальной машины
  • Имя приложения
  • Поддерживаемый тип ОС, например Linux или Windows
  • Описание приложения виртуальной машины

Версии приложения виртуальной машины

Версии приложения виртуальной машины являются это развертываемым ресурсом. Версии определяются со следующими свойствами:

  • Номер версии
  • Ссылка на файл пакета приложения в учетной записи хранения
  • Строка установки для установки приложения
  • Удалите строку, чтобы узнать, как правильно удалить приложение
  • Имя файла пакета для использования при его загрузке на виртуальную машину
  • Имя файла конфигурации, используемого для настройки приложения на виртуальной машине
  • Ссылка на файл конфигурации для приложения виртуальной машины, в которую можно включить файлы лицензий
  • Строка обновления для обновления приложения виртуальной машины до более новой версии
  • Дата окончания жизненного цикла. Сроки окончания жизни являются информационными; Вы по-прежнему можете развернуть версии приложения виртуальной машины после окончания срока действия.
  • "Исключить из последних". Вы можете указать, что версию нельзя использовать в качестве последней версии приложения.
  • Целевые регионы для репликации
  • Количество реплик на регион

Каталог загрузки

Расположение загруженного пакета приложения и файлов конфигурации:

  • Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>
  • Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>

Команды установки, обновления и удаления должны быть прописаны с учетом того, что пакет приложения и файл конфигурации находятся в текущем каталоге.

Имя файла

Когда файл приложения скачивается на виртуальную машину, он переименован как MyVmApp (без расширения). Это связано с тем, что виртуальная машина не знает о исходном имени или расширении пакета. Он использует единственное имя приложения, которое само имя приложения — MyVmApp.

Ниже приведены некоторые варианты перехода по этой проблеме:

Вы можете изменить скрипт, чтобы включить команду для переименования файла перед выполнением:

move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S

Вы также можете использовать packageFileName свойство (и соответствующее configFileName) для указания нам, что нужно переименовать файл. Например, присвойте ему значение "MyApp.exe", чтобы скрипт установки должен быть только следующим:

MyAppe.exe /S

Совет

Если большой двоичный объект изначально был назван "myApp.exe" вместо "myapp", то приведенный выше сценарий работал бы без задания packageFileName свойства.

Интерпретатор команд

Интерпретаторы команд по умолчанию:

  • Linux: /bin/bash
  • Windows: cmd.exe

Можно использовать другой интерпретатор, например, Chocolatey или PowerShell, если он установлен на компьютере, вызвав исполняемый файл и передав ему команду. Например, чтобы команда выполнялась в PowerShell в Windows вместо cmd, можно передать powershell.exe -Command '<powershell commmand>'

Способ обработки обновлений

При обновлении версии приложения на виртуальной машине или Масштабируемые наборы виртуальных машин используется команда обновления, предоставляемая во время развертывания. Если обновленная версия не имеет команды обновления, то текущая версия удаляется и устанавливается новая версия.

Команды обновления должны быть прописаны с ожиданием обновления от любой более старой версии приложения виртуальной машины.

Советы по созданию приложений виртуальной машины в Linux

Сторонние приложения для Linux можно упаковывать несколькими способами. Давайте рассмотрим процесс создания команд установки для некоторых из наиболее распространенных приложений.

Файлы .tar и .gz

Эти файлы сжатые архивы и могут быть извлечены в нужное расположение. Ознакомьтесь с инструкциями по установке исходного пакета, если их необходимо извлечь в определенное расположение. Если файл tar.gz содержит исходный код, ознакомьтесь с инструкциями по установке пакета из источника.

Пример установки команды для установки golang на компьютере с Linux:

sudo tar -C /usr/local -xzf go_linux

Пример команды удаления:

sudo rm -rf /usr/local/go

Создание пакетов приложений с помощью .deb, .rpmа также других пакетов для конкретных платформ для виртуальных машин с ограниченным доступом к Интернету

Вы можете скачать отдельные пакеты для диспетчеров пакетов конкретных платформ, но они обычно не содержат все зависимости. Для этих файлов необходимо также включить в пакет приложения все зависимости или убедиться, что диспетчер пакетов системы загрузит зависимости через репозитории, доступные для виртуальной машины. При работе с виртуальной машиной с ограниченным доступом к Интернету все зависимости придется упаковывать самостоятельно.

Вычисление зависимостей может быть сложной задачей. Существуют сторонние средства, которые могут показывать все дерево зависимостей.

В Ubuntu можно запустить sudo apt show <package_name> | grep Depends , чтобы отобразить все пакеты, установленные при выполнении sudo apt-get install <packge_name> команды. Затем можно использовать эти выходные данные для скачивания всех .deb файлов для создания архива, который можно использовать в качестве пакета приложения.

  1. Например, чтобы создать пакет приложения виртуальной машины для установки PowerShell для Ubuntu, сначала выполните следующие команды, чтобы включить репозиторий, из которого можно скачать PowerShell, а также определить зависимости пакета на новой виртуальной машине Ubuntu.
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
  1. Проверьте выходные данные строки зависит от списка следующих пакетов:
Depends: libc6, libgcc1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
  1. Скачайте каждый из этих файлов с помощью sudo apt-get download <package_name> и создайте сжатый архив tar со всеми файлами.
  • Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  1. Этот архив tar — это файл пакета приложения.
  • В этом случае в качестве команды установки используется:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • Команда удаления:
sudo apt remove powershell

Используйте sudo apt autoremove вместо явной попытки удаления всех зависимостей. Возможно, вы установили другие приложения с перекрывающимися зависимостями, и в этом случае явная команда удаления завершится ошибкой.

Если вы не хотите самостоятельно разрешать зависимости и apt сможете подключиться к репозиториям, можно установить приложение только с одним .deb файлом и разрешить apt обрабатывать зависимости.

Пример команды установки:

dpkg -i <package_name> || apt --fix-broken install -y

Советы по созданию приложений виртуальной машины в Windows

Большинство сторонних приложений в Windows доступны в виде установщиков .exe или .msi. Некоторые из них также доступны для извлечения и запуска из ZIP-файлов. Рассмотрим рекомендации для каждого из них.

Установщик .exe

Исполняемые файлы обычно запускают пользовательский интерфейс и требуют от пользователя взаимодействия с ним. Если установщик поддерживает параметр автоматического режима, он должен быть добавлен в строку установки.

Cmd.exe также ожидает, что исполняемые файлы должны иметь расширение .exe, поэтому необходимо переименовать файл, чтобы иметь .exe расширение.

Если я хочу создать пакет приложения виртуальной машины, для myApp.exeкоторого поставляется исполняемый файл, мое приложение виртуальной машины называется myApp, поэтому я напишу команду, предполагая, что пакет приложения находится в текущем каталоге:

"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"

Если исполняемый файл установщика не поддерживает параметр удаления, вы можете найти реестр на тестовом компьютере, чтобы узнать, где находится программа удаления.

В реестре строка удаления сохраняется в Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString, так что следует использовать содержимое в качестве команды удаления:

'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'

Установщик .msi

При выполнении установщиков .msi из командной строки команды для установки или удаления приложения должны использовать msiexec. Обычно msiexec выполняется как отдельный процесс и cmd не ожидает его завершения, что может привести к проблемам при установке нескольких приложений виртуальной машины. Команду start можно использовать с msiexec, чтобы убедиться, что установка завершена до возврата команды. Например:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log

Пример команды удаления:

start /wait %windir%\\system32\\msiexec.exe /x $appname /quiet /forcerestart /log ${appname}_uninstall.log

Сжатые файлы

Для файлов в формате .zip или других сжатых файлов переименуйте и распакуйте содержимое пакета приложения в нужное место назначения.

Пример команды установки:

rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"

Пример команды удаления:

rmdir /S /Q C:\\myapp

Обработка сбоя как сбоя развертывания

Расширение приложения виртуальной машины всегда возвращает успешный результат независимо от того, произошел ли сбой какого-либо приложения виртуальной машины при установке, обновлении или удалении. Расширение приложения виртуальной машины сообщает только о состоянии расширения как сбое, если возникла проблема с расширением или базовой инфраструктурой. Это поведение активируется флагом "обрабатывать сбой как сбой развертывания", который устанавливается $false по умолчанию и может быть изменен на $true. Флаг сбоя можно настроить в PowerShell или CLI.

Устранение неполадок с приложениями виртуальных машин

Чтобы узнать, было ли конкретное приложение виртуальной машины добавлено в экземпляр виртуальной машины, проверьте сообщение расширения приложения виртуальной машины.

Дополнительные сведения о получении состояния расширений виртуальной машины см. в разделе Расширения и функции виртуальной машины для Linux и Расширения и функции виртуальных машин для Windows.

Чтобы получить состояние расширений виртуальной машины, используйте команду Get-AzVM:

Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10

Чтобы получить состояние расширений масштабируемого набора, используйте команду Get-AzVMSS:

$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

Сообщения об ошибках

Message Description
Текущая версия приложения виртуальной машины {name} была объявлена устаревшей в {date}. Вы попытались развернуть версию приложения виртуальной машины, которая уже является устаревшей. Попробуйте использовать latest вместо указания конкретной версии.
Текущая версия приложения виртуальной машины {name} поддерживает ОС {OS}, а текущая ОС OSDisk — {OS}. Вы попытались развернуть приложение Linux на экземпляре Windows или наоборот.
Превышено максимальное число приложений виртуальной машины (максимум = 5, текущее = {count}). Используйте меньше приложений и повторите запрос. Сейчас поддерживается только пять приложений виртуальной машины на одну виртуальную машину или масштабируемый набор.
Указано более одного приложения виртуальной машины с одним и тем же packageReferenceId. Одно и то же приложение было указано более одного раза.
Подписка не имеет прав доступа к этому образу. Подписка не имеет доступа к этой версии приложения.
Учетная запись хранения в аргументах не существует. Для данной подписки нет приложений.
Образ платформы {image} недоступен. Убедитесь, что все поля в профиле хранилища заполнены правильно. Дополнительные сведения о профиле хранилища см. в статье https://aka.ms/storageprofile. Приложение не существует.
Изображение коллекции {image} недоступно в регионе {region}. Обратитесь к владельцу образа, чтобы реплика в этот регион или изменить запрошенный регион. Версия приложения коллекции существует, но она не была реплика в этом регионе.
SAS недействителен для исходного URI {URI}. При попытке получить сведения об URL (mediaLink или defaultConfigurationLink) из хранилища получено сообщение об ошибке Forbidden.
BLOB-объект, на который ссылается URI источника {uri}, не существует. BLOB-объект, предоставленный для свойств mediaLink или defaultConfigurationLink, не существует.
Url-адрес версии приложения коллекции {URL-адрес} недоступен из-за следующей ошибки: удаленное имя не найдено. Убедитесь, что BLOB-объект существует и является общедоступным или является URL-адресом SAS с правами на чтение. Наиболее вероятным случаем является то, что URI SAS с правами чтения не был предоставлен.
Url-адрес версии приложения коллекции {url}невозможно получить из-за следующей ошибки: {описание ошибки}. Убедитесь, что BLOB-объект существует и является общедоступным или является URL-адресом SAS с правами на чтение. Возникла ошибка в предоставленном BLOB-объекте хранилища. Описание ошибки содержит дополнительные сведения.
Операция {operationName} не разрешена в {application}, так как она помечена для удаления. Можно лишь выполнить новую операцию удаления или дождаться завершения текущей. Попытайтесь обновить приложение, которое в настоящее время удаляется.
Значение {value} параметра "galleryApplicationVersion.properties.publishingProfile.replicaCount" выходит за пределы допустимого диапазона. Значение должно быть от одного до трех, включительно. Для версий приложений виртуальных машин допускается только один и три реплика.
Изменение свойства "galleryApplicationVersion.properties.publishingProfile.manageActions.install" не допускается. (или обновление, удаление) Невозможно изменить какие-либо действия управления для существующего VmApplication. Должна быть создана новая версия приложения виртуальной машины.
Изменение свойства 'galleryApplicationVersion.properties.publishingProfile.settings.packageFileName' не допускается. (или configFileName) Невозможно изменить какие-либо параметры, например имя файла пакета или имя файла конфигурации. Должна быть создана новая версия приложения виртуальной машины.
Большой двоичный объект, на который ссылается исходный uri {URI}, слишком велик: размер = {size}. Максимальный допустимый размер BLOB-объекта — 1 ГБ. Максимальный размер BLOB-объекта, на который ссылается mediaLink или defaultConfigurationLink, в настоящее время составляет 1 ГБ.
BLOB-объект, на который ссылается URI источника {uri}, не существует. Ссылка на пустой BLOB-объект.
Тип большого двоичного объекта {type} не поддерживается для операции {operation} . Поддерживаются только страничные и блочные BLOB-объекты. VmApplications поддерживает только страничные и блочные BLOB-объекты.
SAS недействителен для исходного URI {URI}. URI SAS, предоставленный для mediaLink или defaultConfigurationLink, не является допустимым URI SAS.
Не удается указать {region} в целевых регионах, так как подписка отсутствует требуемая функция {featureName}. Либо зарегистрируйте подписку с помощью требуемой функции, либо удалите регион из списка целевых регионов. Чтобы использовать приложения виртуальной машины в определенных ограниченных регионах, необходимо иметь флаг компонента, зарегистрированный для этой подписки.
Регионы профиля публикации версии образа коллекции {regions} должны содержать расположение версии образа {location}. Список регионов для репликации должен содержать расположение, в котором находится версия приложения.
Повторяющиеся регионы не допускаются в целевых регионах публикации. В регионах публикации не может быть дубликатов.
Ресурсы версии приложения коллекции в настоящее время не поддерживают шифрование. Свойство шифрования для целевых регионов не поддерживается для приложений виртуальных машин
Имя сущности не совпадает с именем в URL-адресе запроса. Версия приложения коллекции, указанная в URL-адресе запроса, не соответствует указанной в тексте запроса.
Имя версии приложения коллекции недопустимо. Имя версии приложения должно соответствовать major(int32). Minor(int32). Формат Patch(int32), где int от 0 до 2 147 483 647 (включительно). например, 1.0.0, 2018.12.1 и т. д. Версия приложения коллекции должна соответствовать указанному формату.

Следующие шаги