Delen via


Een dev box configureren met behulp van Azure VM Image Builder en Microsoft Dev Box

In dit artikel gebruikt u Azure VM Image Builder om een aangepast dev box in Microsoft Dev Box te maken met behulp van een sjabloon. De sjabloon bevat een aanpassingsstap voor het installeren van Visual Studio Code (VS Code).

Door gestandaardiseerde VM-installatiekopieën (virtuele machines) te gebruiken, kunt u zorgen voor consistente implementaties tijdens de migratie naar de cloud. Deze installatiekopieën kunnen vooraf gedefinieerde beveiliging, configuratie-instellingen en benodigde software bevatten. Het instellen van een imaging-pijplijn kan tijdrovend en complex zijn. Azure VM Image Builder vereenvoudigt dit proces doordat u een configuratie voor uw installatiekopieën kunt maken, die vervolgens door de service wordt gebouwd en verzonden naar een dev box-project.

Het handmatig maken van aangepaste VM-installatiekopieën of met andere hulpprogramma's kan lastig en onbetrouwbaar zijn. VM Image Builder, die is gebouwd op HashiCorp Packer, biedt de voordelen van een beheerde service.

Om het maken van VM-installatiekopieën te vereenvoudigen, gaat u als volgende te werk om het maken van VM-installatiekopieën te vereenvoudigen:

  • Elimineert de noodzaak van complexe hulpprogramma's, processen en handmatige stappen. Het abstraheert deze details en verbergt Azure-specifieke behoeften, zoals het generaliseren van de installatiekopieën (Sysprep), terwijl geavanceerde gebruikers indien nodig kunnen overschrijven.
  • Werkt met bestaande build-pijplijnen voor installatiekopieën. U kunt VM Image Builder aanroepen vanuit uw pijplijn of een DevOps-taak voor de Azure VM Image Builder-service gebruiken.
  • Verzamelt aanpassingsgegevens uit verschillende bronnen, zodat u deze niet allemaal op één plek hoeft te verzamelen.
  • Integreert met Azure Compute Gallery, het maken van een installatiekopieënbeheersysteem voor wereldwijde distributie, replicatie, versiebeheer en schalen. U kunt dezelfde installatiekopieën als een virtuele harde schijf of beheerde installatiekopieën distribueren zonder deze opnieuw te bouwen.

Belangrijk

Microsoft Dev Box ondersteunt alleen installatiekopieën die gebruikmaken van het beveiligingstype Trusted Launch ingeschakeld.

Vereisten

Als u een aangepaste installatiekopieën wilt inrichten die u hebt gemaakt met behulp van VM Image Builder, hebt u het volgende nodig:

De eerste stap is het gebruik van Azure VM Image Builder en Azure PowerShell om een installatiekopieën te maken in azure Compute Gallery en deze wereldwijd te distribueren.

In het volgende voorbeeld wordt PowerShell gebruikt. U kunt ook de Azure CLI (Opdrachtregelinterface) gebruiken.

  1. Als u VM Image Builder wilt gebruiken, moet u de functies registreren.

    Controleer uw providerregistraties. Zorg ervoor dat elke opdracht wordt geretourneerd Registered voor de opgegeven functie.

       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 
    

    Als de providerregistraties niet worden geretourneerd Registered, registreert u de providers door de volgende opdrachten uit te voeren:

       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 
    
  2. PowerShell-modules installeren:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Maak variabelen voor het opslaan van gegevens die u meer dan één keer gebruikt.

    1. Kopieer de volgende voorbeeldcode.
    2. Vervang <Resource group> door de resourcegroep die u hebt gebruikt om het ontwikkelaarscentrum te maken.
    3. Voer de bijgewerkte code uit in 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"  
    
  4. Maak een door de gebruiker toegewezen identiteit en stel machtigingen in voor de resourcegroep door de volgende code uit te voeren in PowerShell.

    VM Image Builder maakt gebruik van de gebruikersidentiteit die u opgeeft voor het opslaan van de installatiekopieën in de Azure Compute Gallery. In het volgende voorbeeld wordt een Azure-roldefinitie gemaakt met specifieke acties voor het distribueren van de installatiekopieën. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.

    # 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
    
  5. Wijs machtigingen toe voor de identiteit om de installatiekopieën te distribueren.

    Gebruik deze opdracht om een Azure-roldefinitiesjabloon te downloaden en bij te werken met de eerder opgegeven parameters:

    $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" 
    

Als u VM Image Builder wilt gebruiken met Azure Compute Gallery, moet u een bestaande galerie en installatiekopieëndefinitie hebben. VM Image Builder maakt de galerie en installatiekopieëndefinitie niet voor u.

  1. Voer de volgende opdrachten uit om een nieuwe galerie en afbeeldingsdefinitie te maken.

    Met deze code maakt u een definitie met het beveiligingstype Vertrouwde start en voldoet u aan de vereisten voor installatiekopieën van 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" 
    
  2. Maak een bestand om de sjabloondefinitie op te slaan, zoals c:/temp/mytemplate.txt.

  3. Kopieer de volgende Azure Resource Manger-sjabloon voor VM Image Builder naar uw nieuwe sjabloonbestand.

    Deze sjabloon geeft de bronafbeelding en de toegepaste aanpassingen aan. Het installeert Choco en VS Code en geeft ook de distributielocatie van de installatiekopieën aan.

    {
       "$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 Vscode",
                "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>"
                   ]
                }
             ]
          }
         }
       ]
      }
    

    Sluit het sjabloonbestand voordat u doorgaat met de volgende stap.

  4. Configureer uw nieuwe sjabloon met uw variabelen.

    Vervang door <Template Path> de locatie van het sjabloonbestand, zoals 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 
    
  5. Dien uw sjabloon in bij de service.

    Met de volgende opdracht worden afhankelijke artefacten, zoals scripts, gedownload en opgeslagen in de faseringsresourcegroep. De faseringsresourcegroep wordt voorafgegaan door IT_.

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  6. Bouw de installatiekopieën door de Run opdracht op de sjabloon aan te roepen:

    Voer Ja in bij de prompt om het uitvoeringsproces te bevestigen.

    Invoke-AzResourceAction  -ResourceName $imageTemplateName  -ResourceGroupName $imageResourceGroup  -ResourceType Microsoft.VirtualMachineImages/imageTemplates  -ApiVersion "2020-02-14"  -Action Run
    

    Belangrijk

    Het maken van de installatiekopieën en het repliceren naar beide regio's kan enige tijd duren. Mogelijk ziet u een verschil in voortgangsrapportage tussen PowerShell en Azure Portal. Voordat u begint met het maken van een dev box-definitie, wacht u totdat het proces is voltooid.

  7. Informatie ophalen over de zojuist gemaakte installatiekopie, inclusief de uitvoeringsstatus en inrichtingsstatus.

    Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState 
    

    Voorbeelduitvoer:

    Name                 LastRunStatusRunState    LastRunStatusMessage   ProvisioningState
    ---------------------------------------------------------------------------------------
    vscodeWinTemplate                                                    Creating
    

    U kunt ook de inrichtingsstatus van uw installatiekopieën bekijken in Azure Portal. Ga naar uw galerie en bekijk de definitie van de installatiekopieën.

    Schermopname van de inrichtingsstatus van de aangepaste versie van de installatiekopieën.

Wanneer uw aangepaste installatiekopieën zijn opgeslagen in de galerie, kunt u de galerie configureren voor het gebruik van de installatiekopieën in het ontwikkelaarscentrum. Zie Azure Compute Gallery configureren voor meer informatie.

Microsoft Dev Box instellen met een aangepaste installatiekopieën

Wanneer de galerie-installatiekopieën beschikbaar zijn in het ontwikkelaarscentrum, kunt u de aangepaste installatiekopieën gebruiken met Microsoft Dev Box. Zie quickstart: Microsoft Dev Box configureren voor meer informatie.