Sdílet prostřednictvím


Konfigurace vývojového pole pomocí Azure VM Image Builderu a Microsoft Dev Boxu

V tomto článku použijete Azure VM Image Builder k vytvoření přizpůsobeného vývojového pole v Microsoft Dev Boxu pomocí šablony. Šablona obsahuje krok přizpůsobení pro instalaci editoru Visual Studio Code (VS Code).

Použití standardizovaných imagí virtuálních počítačů pomáhá zajistit konzistentní nasazení při migraci do cloudu. Tyto image můžou zahrnovat předdefinované zabezpečení, nastavení konfigurace a nezbytný software. Nastavení kanálu pro vytváření bitové kopie může být časově náročné a složité. Azure VM Image Builder tento proces zjednodušuje tím, že umožňuje vytvořit konfiguraci pro vaši image, kterou pak služba sestaví a odešle do projektu vývojového boxu.

Ruční vytváření vlastních imagí virtuálních počítačů nebo s jinými nástroji může být obtížné a nespolehlivé. VM Image Builder, který je založený na HashiCorp Packeru, nabízí výhody spravované služby.

Pokud chcete zjednodušit vytváření imagí virtuálního počítače, Tvůrce imagí virtuálního počítače:

  • Eliminuje potřebu složitých nástrojů, procesů a ručních kroků. Abstrahuje tyto podrobnosti a skryje potřeby specifické pro Azure, jako je generalizace image (Sysprep), a v případě potřeby umožňuje pokročilým uživatelům přepsat.
  • Funguje s existujícími kanály buildu image. Image Builder virtuálního počítače můžete volat z kanálu nebo použít úlohu DevOps služby Azure VM Image Builder.
  • Shromažďuje data přizpůsobení z různých zdrojů, takže je nemusíte shromažďovat na jednom místě.
  • Integruje se s Galerií výpočetních prostředků Azure a vytváří systém pro správu imagí pro globální distribuci, replikaci, správu verzí a škálování. Stejnou image můžete distribuovat jako virtuální pevný disk nebo spravované image bez jejich opětovného sestavení.

Důležité

Microsoft Dev Box podporuje jenom image, které používají povolený typ zabezpečení Trusted Launch .

Požadavky

Pokud chcete zřídit vlastní image, kterou jste vytvořili pomocí Nástroje image virtuálního počítače, potřebujete:

  • Azure PowerShell 6.0 nebo novější Pokud nemáte nainstalovaný PowerShell, postupujte podle pokynů v tématu Instalace Azure PowerShellu ve Windows.
  • Oprávnění vlastníka nebo přispěvatele k předplatnému Azure nebo konkrétní skupině prostředků.
  • Skupina prostředků
  • Dev Center s připojeným síťovým připojením. Pokud ho nemáte, nakonfigurujte síťová připojení podle pokynů v části Připojení vývojových polí k prostředkům.

Prvním krokem je použít Azure VM Image Builder a Azure PowerShell k vytvoření image v Galerii výpočetních prostředků Azure a jeho globální distribuci.

Následující příklad používá PowerShell. Můžete také použít rozhraní příkazového řádku Azure (CLI).

  1. Pokud chcete používat Image Builder virtuálního počítače, musíte zaregistrovat funkce.

    Zkontrolujte registraci poskytovatele. Ujistěte se, že se každý příkaz vrátí Registered pro zadanou funkci.

       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 
    

    Pokud registrace poskytovatele nevrátí Registered, zaregistrujte poskytovatele spuštěním následujících příkazů:

       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. Instalace modulů PowerShellu:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Vytvořte proměnné pro ukládání informací, které používáte více než jednou.

    1. Zkopírujte následující ukázkový kód.
    2. Nahraďte <Resource group> skupinou prostředků, kterou jste použili k vytvoření vývojového centra.
    3. Spusťte aktualizovaný kód v PowerShellu.
    # 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. Vytvořte identitu přiřazenou uživatelem a nastavte oprávnění pro skupinu prostředků spuštěním následujícího kódu v PowerShellu.

    Image Builder virtuálního počítače používá identitu uživatele, kterou zadáte k uložení image v Galerii výpočetních prostředků Azure. Následující příklad vytvoří definici role Azure s konkrétními akcemi pro distribuci image. Definice role se pak přiřadí identitě uživatele.

    # 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. Přiřaďte oprávnění identitě k distribuci imagí.

    Pomocí tohoto příkazu stáhněte šablonu definice role Azure a aktualizujte ji pomocí dříve zadaných parametrů:

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

Pokud chcete použít Tvůrce imagí virtuálních počítačů s galerií Azure Compute, ujistěte se, že máte existující galerii a definici image. VM Image Builder za vás nevytvoří galerii a definici image.

  1. Spuštěním následujících příkazů vytvořte novou definici galerie a image.

    Tento kód vytvoří definici s typem zabezpečení důvěryhodného spuštění a splňuje požadavky na image 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. Vytvořte soubor pro uložení definice šablony, například c:/temp/mytemplate.txt.

  3. Zkopírujte následující šablonu Azure Resource Manger pro VM Image Builder do nového souboru šablony.

    Tato šablona označuje zdrojovou image a použité vlastní nastavení. Nainstaluje Choco a VS Code a také označuje umístění distribuce image.

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

    Než budete pokračovat k dalšímu kroku, zavřete soubor šablony.

  4. Nakonfigurujte novou šablonu pomocí proměnných.

    Nahraďte <Template Path> umístěním souboru šablony, například 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. Odešlete šablonu do služby.

    Následující příkaz stáhne všechny závislé artefakty, jako jsou skripty, a uloží je do přípravné skupiny prostředků. Přípravná skupina prostředků má předponu IT_.

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  6. Vytvořte image vyvoláním Run příkazu v šabloně:

    Na příkazovém řádku potvrďte proces spuštění zadáním ano.

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

    Důležité

    Vytvoření image a jeho replikace do obou oblastí může nějakou dobu trvat. Mezi PowerShellem a webem Azure Portal se může zobrazit rozdíl v průběhu vytváření sestav. Než začnete vytvářet definici vývojového pole, počkejte, až se proces dokončí.

  7. Získejte informace o nově vytvořené imagi, včetně stavu spuštění a stavu zřizování.

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

    Ukázkový výstup:

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

    Stav zřizování image můžete zobrazit také na webu Azure Portal. Přejděte do galerie a zobrazte definici obrázku.

    Snímek obrazovky znázorňující stav zřizování přizpůsobené verze image

Když je vaše vlastní image uložená v galerii, můžete ji nakonfigurovat tak, aby používala obrázky ve vývojovém centru. Další informace najdete v tématu Konfigurace galerie výpočetních prostředků Azure.

Nastavení Microsoft Dev Boxu s vlastní imagí

Pokud jsou obrázky z galerie dostupné v centru pro vývoj, můžete vlastní image použít s Microsoft Dev Boxem. Další informace najdete v tématu Rychlý start: Konfigurace Microsoft Dev Boxu.