Создание виртуальной машины Windows с помощью Конструктора образов виртуальных машин Azure
Область применения: ✔️ Виртуальные машины Windows
Из этой статьи вы узнаете, как создать настраиваемый образ Windows с помощью Конструктора образов виртуальных машин Azure. В примере, приведенном в этой статье, используются настройщики для настройки образа:
- PowerShell (ScriptUri): скачивание и запуск сценария PowerShell.
- Перезагрузка Windows: перезапуск виртуальной машины.
- PowerShell (встроенная): выполнение определенной команды. В данном примере создается каталог на виртуальной машине с помощью
mkdir c:\\buildActions
. - Файл: копирование файла из GitHub на виртуальную машину. В этом примере файл index.md копируется в
c:\buildArtifacts\index.html
на виртуальной машине. buildTimeoutInMinutes
: указывает время сборки в минутах. Значение по умолчанию — 240 минут. Вы можете увеличить его, чтобы обеспечить более длительное выполнение. Минимальное допустимое значение составляет 6 минут. Значения менее 6 минут приведут к ошибкам.vmProfile
: указываетvmSize
и свойства сети.osDiskSizeGB
: можно использовать для увеличения размера образа.identity
. Предоставляет удостоверение для Конструктора образов Azure для использования во время сборки.
Используйте следующий пример шаблона JSON для настройки образа: helloImageTemplateWin.json.
Примечание.
Пользователи Windows могут запускать следующие примеры Azure CLI в Azure Cloud Shell с помощью Bash.
Регистрация поставщиков
Чтобы использовать Конструктор образов виртуальных машин, необходимо зарегистрировать функцию. Проверьте регистрацию, выполнив следующие команды:
az provider show -n Microsoft.VirtualMachineImages | grep registrationState
az provider show -n Microsoft.KeyVault | grep registrationState
az provider show -n Microsoft.Compute | grep registrationState
az provider show -n Microsoft.Storage | grep registrationState
az provider show -n Microsoft.Network | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState
Если в выходных данных не указано, что функция зарегистрирована, выполните следующие команды:
az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance
Задание переменных
Поскольку вы будете использовать несколько фрагментов информации повторно, необходимо создать переменные для их хранения:
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Создайте переменную для идентификатора подписки:
subscriptionID=$(az account show --query id --output tsv)
Создание группы ресурсов
Для хранения артефакта шаблона конфигурации образа и самого образа используйте следующую группу ресурсов.
az group create -n $imageResourceGroup -l $location
Создание назначаемого пользователем удостоверения и задание разрешений для группы ресурсов
Для вставки образа в группу ресурсов Конструктор образов использует предоставленное удостоверение пользователя. В этом примере вы создаете определение роли Azure с помощью специальных разрешений на распространение образа. Затем определение роли будет назначено удостоверению пользователя.
Создание управляемого удостоверения, назначаемого пользователем, и предоставление разрешений
Создайте назначаемое пользователем удостоверение, чтобы Конструктор образов виртуальных машин смог получить доступ к учетной записи хранения, в которой хранится скрипт.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# Update the definition
sed -i -e "s%<subscriptionID>%$subscriptionID%g" aibRoleImageCreation.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" aibRoleImageCreation.json
sed -i -e "s%Azure Image Builder Service Image Creation Role%$imageRoleDefName%g" aibRoleImageCreation.json
# Create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
# Grant a role definition to the user-assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
Скачивание шаблона конфигурации образа
Был создан параметризованный шаблон конфигурации образа для пробного использования. Скачайте пример в формате JSON и настройте его с помощью заданных переменных.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
Этот пример можно изменить в терминале, используя текстовый редактор, например vi
.
vi helloImageTemplateWin.json
Примечание.
Для исходного образа всегда указывайте версию. Невозможно указать latest
в качестве версии.
При добавлении или изменении группы ресурсов, в которую распределяется образ, необходимо установить разрешения для группы ресурсов.
Создание образа
Отправьте конфигурацию образа в службу Конструктора образов виртуальных машин, выполнив следующие команды:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
По завершении в консоли появится сообщение об успешном выполнении, а в Конструкторе образов виртуальной машины будет создан шаблон конфигурации Конструктора образов виртуальной машины в $imageResourceGroup
.
В фоновом режиме Конструктор образов виртуальных машин также создаст в вашей подписке промежуточную группу ресурсов. Эта группа ресурсов используется для создания образа в следующем формате: IT_<DestinationResourceGroup>_<TemplateName>
.
Примечание.
Если удаление необходимо, не удаляйте промежуточную группу ресурсов напрямую. Сначала удалите артефакт шаблона изображения, который впоследствии приведет к удалению промежуточной группы ресурсов. В противном случае шаблон изображения может ввести состояние сбоя.
Если служба сообщает об ошибке при отправке шаблона конфигурации образа, выполните следующие действия:
- См. статью Устранение неполадок со службой Конструктора образов виртуальных машин Azure.
- Прежде чем пытаться повторно отправить шаблон, удалите его, выполнив следующие команды:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Запустите сборку образа
Запустите процесс создания образа с помощью команды az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Дождитесь завершения сборки.
Если возникают ошибки, см. статью Устранение неполадок со службой Конструктора образов виртуальных машин Azure.
Создание виртуальной машины
Создайте виртуальную машину с помощью полученного образа. В следующем коде замените <пароль> собственным паролем для aibuser на виртуальной машине.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
Проверка настройки
Подключитесь к виртуальной машине через удаленный рабочий стол, используя имя пользователя и пароль, заданные при создании виртуальной машины. На виртуальной машине откройте окно командной строки и введите:
dir c:\
Во время настройки образа создаются следующие два каталога:
- buildActions
- buildArtifacts
Очистка ресурсов
По завершении удалите созданные ресурсы.
Удалите шаблон Конструктора образов виртуальных машин.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Удалите назначение ролей, определение ролей и удостоверение пользователя.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Удалите группу ресурсов образа.
az group delete -n $imageResourceGroup
Следующие шаги
Дополнительные сведения о компонентах файла JSON, используемых в этой статье, см. в статье Справочник по шаблонам Конструктора образов виртуальных машин.