Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы используете конструктор образов виртуальных машин Azure для создания настраиваемого поля разработки в Microsoft Dev Box с помощью шаблона. Шаблон включает шаг настройки для установки Visual Studio Code (VS Code).
Использование стандартных образов виртуальных машин помогает обеспечить согласованные развертывания при миграции в облако. Эти образы могут включать предопределенную безопасность, параметры конфигурации и необходимое программное обеспечение. Настройка визуализационного конвейера может быть трудоемкой и сложной. Построитель образов виртуальных машин Azure упрощает этот процесс, позволяя создавать конфигурацию для образа, которая затем создается и отправляется в проект разработки.
Создание пользовательских образов виртуальных машин вручную или с другими инструментами может оказаться трудным и ненадежным. Построитель образов виртуальных машин, созданный на основе HashiCorp Packer, предлагает преимущества управляемой службы.
Чтобы упростить создание образа виртуальной машины, построитель образов виртуальных машин:
- Устраняет потребность в сложных инструментах, процессах и ручных шагах. Он абстрагирует эти сведения и скрывает потребности в Azure, такие как обобщение образа (Sysprep), позволяя опытным пользователям переопределять в случае необходимости.
- Работает с существующими конвейерами сборки образов. Вы можете вызвать конструктор образов виртуальных машин из конвейера или использовать задачу DevOps службы Конструктора образов виртуальных машин Azure.
- Собирает данные настройки из различных источников, поэтому вам не нужно собирать их в одном месте.
- Интегрируется с галереей вычислительных ресурсов Azure, создавая систему управления образами для глобального распространения, репликации, создания версий и масштабирования. Вы можете распространять тот же образ, что и виртуальный жесткий диск или управляемые образы, не перестроив их.
Внимание
Microsoft Dev Box поддерживает только образы, использующие включенный доверенный запуск типа безопасности.
Предварительные условия
Чтобы подготовить пользовательский образ, который вы создали с помощью VM Image Builder, вам понадобится:
- Azure PowerShell 6.0 или более поздней версии. Если у вас нет PowerShell, выполните действия, описанные в статье "Установка Azure PowerShell в Windows".
- Разрешения владельца или участника для подписки Azure или определенной группы ресурсов.
- Группа ресурсов.
- Центр разработки с подключенным сетевым подключением. Если у вас нет одного, выполните действия, описанные в разделе "Подключение полей разработки" к ресурсам, настроив сетевые подключения.
Создание образа Windows и его распространение в коллекцию вычислений Azure
Первым шагом является использование построителя образов виртуальных машин Azure и Azure PowerShell для создания образа в коллекции вычислений Azure и его глобального распространения.
В следующем примере используется PowerShell. Вы также можете использовать интерфейс командной строки Azure (CLI).
Чтобы использовать Конструктор образов виртуальных машин, необходимо зарегистрировать функции.
Проверьте регистрации поставщиков. Убедитесь, что каждая команда выдает
Registered
для заданной функции.Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Storage | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Compute | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Network | Format-table -Property ResourceTypes,RegistrationState
Если регистрации поставщиков не возвращаются
Registered
, зарегистрируйте поставщиков, выполнив следующие команды:Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages Register-AzResourceProvider -ProviderNamespace Microsoft.Storage Register-AzResourceProvider -ProviderNamespace Microsoft.Compute Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault Register-AzResourceProvider -ProviderNamespace Microsoft.Network
Установите модули PowerShell:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Создайте переменные для хранения информации, используемой более одного раза.
- Скопируйте следующий пример кода.
- Замените
<Resource group>
на группу ресурсов, которую вы использовали для создания центра разработки. - Запустите обновленный код в PowerShell.
# Get existing context $currentAzContext = Get-AzContext # Get your current subscription ID $subscriptionID=$currentAzContext.Subscription.Id # Destination image resource group $imageResourceGroup="<Resource group>" # Location $location="eastus2" # Image distribution metadata reference name $runOutputName="aibCustWinManImg01" # Image template name $imageTemplateName="vscodeWinTemplate"
Создайте удостоверение, назначаемое пользователем, и задайте разрешения для группы ресурсов, выполнив следующий код в PowerShell.
Построитель образов виртуальных машин использует удостоверение пользователя, предоставленное для хранения образа в коллекции вычислений Azure. В следующем примере создается определение роли Azure с определенными действиями для распространения образа. Затем определение роли назначается идентификации пользователя.
# Set up role definition names, which need to be unique $timeInt=$(get-date -UFormat "%s") $imageRoleDefName="Azure Image Builder Image Def"+$timeInt $identityName="aibIdentity"+$timeInt # Add an Azure PowerShell module to support AzUserAssignedIdentity Install-Module -Name Az.ManagedServiceIdentity # Create an identity New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location $identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Назначьте разрешения для идентификации на распространение изображений.
Используйте эту команду, чтобы скачать шаблон определения ролей Azure и обновить его с помощью ранее указанных параметров:
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json" $aibRoleImageCreationPath = "aibRoleImageCreation.json" # Download the configuration Invoke-WebRequest -Uri $aibRoleImageCreationUrl -OutFile $aibRoleImageCreationPath -UseBasicParsing ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<subscriptionID>',$subscriptionID) | Set-Content -Path $aibRoleImageCreationPath ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $aibRoleImageCreationPath ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $aibRoleImageCreationPath # Create a role definition New-AzRoleDefinition -InputFile ./aibRoleImageCreation.json # Grant the role definition to the VM Image Builder service principal New-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Создать коллекцию
Чтобы использовать конструктор образов виртуальных машин с коллекцией вычислений Azure, убедитесь, что у вас есть существующая коллекция и определение образа. Сборщик образов виртуальных машин не создаёт галерею и определение образа для вас.
Выполните следующие команды, чтобы создать новую коллекцию и определение образа.
Этот код создает определение с доверенным типом безопасности запуска и соответствует требованиям образа Windows 365.
# Gallery name $galleryName= "devboxGallery" # Image definition name $imageDefName ="vscodeImageDef" # Additional replication region $replRegion2="eastus" # Create the gallery New-AzGallery -GalleryName $galleryName -ResourceGroupName $imageResourceGroup -Location $location $SecurityType = @{Name='SecurityType';Value='TrustedLaunch'} $features = @($SecurityType) # Create the image definition New-AzGalleryImageDefinition -GalleryName $galleryName -ResourceGroupName $imageResourceGroup -Location $location -Name $imageDefName -OsState generalized -OsType Windows -Publisher 'myCompany' -Offer 'vscodebox' -Sku '1-0-0' -Feature $features -HyperVGeneration "V2"
Создайте файл для хранения определения шаблона, например c:/temp/mytemplate.txt.
Скопируйте следующий шаблон Azure Resource Manger для построителя образов виртуальных машин в новый файл шаблона.
Этот шаблон указывает исходный образ и примененные настройки. Он устанавливает Choco и VS Code, а также указывает расположение распределения образов.
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "imageTemplateName": { "type": "string" }, "api-version": { "type": "string" }, "svclocation": { "type": "string" } }, "variables": {}, "resources": [ { "name": "[parameters('imageTemplateName')]", "type": "Microsoft.VirtualMachineImages/imageTemplates", "apiVersion": "[parameters('api-version')]", "location": "[parameters('svclocation')]", "dependsOn": [], "tags": { "imagebuilderTemplate": "win11multi", "userIdentity": "enabled" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "<imgBuilderId>": {} } }, "properties": { "buildTimeoutInMinutes": 100, "vmProfile": { "vmSize": "Standard_DS2_v2", "osDiskSizeGB": 127 }, "source": { "type": "PlatformImage", "publisher": "MicrosoftWindowsDesktop", "offer": "Windows-11", "sku": "win11-21h2-ent", "version": "latest" }, "customize": [ { "type": "PowerShell", "name": "Install Choco and VS Code", "inline": [ "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))", "choco install -y vscode" ] } ], "distribute": [ { "type": "SharedImage", "galleryImageId": "/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>", "runOutputName": "<runOutputName>", "artifactTags": { "source": "azureVmImageBuilder", "baseosimg": "win11multi" }, "replicationRegions": [ "<region1>", "<region2>" ] } ] } } ] }
Закройте файл шаблона, прежде чем перейти к следующему шагу.
Настройте новый шаблон с помощью переменных.
Замените
<Template Path>
расположением файла шаблона, напримерc:/temp/mytemplate
.$templateFilePath = <Template Path> (Get-Content -path $templateFilePath -Raw ) -replace '<subscriptionID>',$subscriptionID | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<rgName>',$imageResourceGroup | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<runOutputName>',$runOutputName | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<imageDefName>',$imageDefName | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<sharedImageGalName>',$galleryName| Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<region1>',$location | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<region2>',$replRegion2 | Set-Content -Path $templateFilePath ((Get-Content -path $templateFilePath -Raw) -replace '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
Отправьте шаблон в службу.
Следующая команда загружает все зависимые артефакты, такие как скрипты, и размещает их в стадийной группе ресурсов. Группа ресурсов для подготовки имеет префикс
IT_
.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $location
Создайте образ, вызвав
Run
команду на шаблоне:В командной строке, чтобы подтвердить процесс выполнения, введите "Да".
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Внимание
Создание образа и репликация в обоих регионах может занять некоторое время. Вы можете заметить разницу в отчетах о ходе выполнения между PowerShell и Порталом Azure. Прежде чем приступить к созданию определения поля разработки, дождитесь завершения процесса.
Получите информацию о недавно созданном образе, включая статус выполнения и состояние обеспечения.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Образец вывода:
Name LastRunStatusRunState LastRunStatusMessage ProvisioningState --------------------------------------------------------------------------------------- vscodeWinTemplate Creating
Вы также можете просмотреть состояние подготовки образа в портал Azure. Перейдите в коллекцию и просмотрите определение изображения.
Настройка коллекции
Когда пользовательский образ хранится в коллекции, можно настроить коллекцию для использования образов в центре разработки. Дополнительные сведения см. в Настройка Галереи вычислительных ресурсов Azure.
Настройка Microsoft Dev Box с помощью пользовательского образа
Когда образы коллекции доступны в центре разработки, можно использовать настраиваемый образ с помощью Microsoft Dev Box. Для получения дополнительной информации смотрите Краткое руководство: Настройка Microsoft Dev Box.