Megosztás a következőn keresztül:


Fejlesztői doboz konfigurálása az Azure VM Image Builder és a Microsoft Dev Box használatával

Ebben a cikkben az Azure-beli VM Image Builder használatával hozhat létre egy testreszabott fejlesztői dobozt a Microsoft Dev Boxban egy sablon használatával. A sablon tartalmaz egy testreszabási lépést a Visual Studio Code (VS Code) telepítéséhez.

Amikor a szervezet szabványosított virtuálisgép-rendszerképeket használ, egyszerűbben migrálhat a felhőbe, és biztosíthatja az üzemelő példányok konzisztenciáját. A képek általában tartalmazzák az előre meghatározott biztonsági beállításokat, a konfigurációs beállításokat és a szükséges szoftvereket. A saját képalkotó folyamat beállításához időre, infrastruktúrára és sok más részletre van szükség. Az Azure VM Image Builderrel létrehozhat egy konfigurációt, amely leírja a rendszerképet. A szolgáltatás ezután létrehozza a rendszerképet, és elküldi azt egy dev box-projektnek.

Bár egyéni virtuálisgép-rendszerképeket kézzel vagy más eszközökkel is létrehozhat, a folyamat nehézkes és megbízhatatlan lehet. A HashiCorp Packerre épülő VM Image Builder egy felügyelt szolgáltatás előnyeit nyújtja.

A virtuálisgép-rendszerképek létrehozásának összetettségének csökkentése érdekében a VM Image Builder:

  • Eltávolítja a virtuálisgép-rendszerképek létrehozásához szükséges összetett eszközök, folyamatok és manuális lépések szükségességét. A VM Image Builder kivonatolja ezeket a részleteket, és elrejti az Azure-specifikus követelményeket, például a rendszerkép általánosításának szükségességét (Sysprep). És ez lehetővé teszi a fejlettebb felhasználók számára, hogy felülbírálják ezeket a követelményeket.

  • A meglévő rendszerkép-összeállítási folyamatokkal együttműködve kattintásra használható. Meghívhatja a VM Image Buildert a folyamatból, vagy használhat egy Azure VM Image Builder szolgáltatás DevOps-feladatot.

  • Beolvassa a testreszabási adatokat a különböző forrásokból, így nem szükséges az összeset egyetlen helyről összegyűjteni.

  • Integrálható az Azure Compute Gallery szolgáltatással, amely képkezelő rendszert hoz létre a képek globális terjesztésére, replikálására, verziószámozására és skálázására. Emellett ugyanúgy terjesztheti az eredményül kapott lemezképet, mint egy virtuális merevlemez vagy egy vagy több felügyelt lemezkép, anélkül, hogy újra kellene építenie őket az alapoktól.

Fontos

A Microsoft Dev Box csak azokat a lemezképeket támogatja, amelyek engedélyezve van a Megbízható indítás biztonsági típust használják.

Előfeltételek

A VM Image Builder használatával létrehozott egyéni rendszerkép kiépítéséhez a következőkre van szükség:

  • Azure PowerShell 6.0 vagy újabb verzió. Ha nincs telepítve a PowerShell, kövesse az Azure PowerShell windowsos telepítésének lépéseit.
  • Tulajdonosi vagy közreműködői engedélyek egy Azure-előfizetésen vagy egy adott erőforráscsoporton.
  • Egy erőforráscsoport.
  • Csatolt hálózati kapcsolattal rendelkező fejlesztői központ. Ha nincs ilyenje, kövesse a Csatlakozás fejlesztői mezőkben szereplő lépéseket az erőforrásokhoz a hálózati kapcsolatok konfigurálásával.

Az első lépés az Azure VM Image Builder és az Azure PowerShell használata képverzió létrehozásához az Azure Compute Galleryben, majd a rendszerkép globális terjesztése. Ezt a feladatot az Azure CLI használatával is elvégezheti.

  1. A VM Image Builder használatához regisztrálnia kell a funkciókat.

    Ellenőrizze a szolgáltatói regisztrációkat. Győződjön meg arról, hogy az egyes parancsok Registered a megadott funkcióhoz térnek vissza.

       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 
    

    Ha a szolgáltatói regisztrációk nem térnek vissza Registered, regisztrálja a szolgáltatókat az alábbi parancsok futtatásával:

       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-modulok telepítése:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Hozzon létre változókat a többször használt információk tárolásához.

    1. Másolja ki a következő mintakódot.
    2. Cserélje le <Resource group> a fejlesztői központ létrehozásához használt erőforráscsoportra.
    3. Futtassa a frissített kódot a PowerShellben.
    # 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. Hozzon létre egy felhasználó által hozzárendelt identitást, és állítsa be az erőforráscsoportra vonatkozó engedélyeket az alábbi kód PowerShellben való futtatásával.

    A VM Image Builder a megadott felhasználói identitással injektálja a rendszerképet az Azure Compute Gallerybe. Az alábbi példa egy Azure-szerepkördefiníciót hoz létre a rendszerkép terjesztésére vonatkozó konkrét műveletekkel. A szerepkördefiníció ezután hozzá lesz rendelve a felhasználói identitáshoz.

    # 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. Engedélyek hozzárendelése az identitáshoz a képek terjesztéséhez.

    Ezzel a paranccsal letölthet egy Azure-szerepkördefiníciós sablont, majd frissítheti a korábban megadott paraméterekkel:

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

Ha a virtuálisgép-rendszerkép-készítőt az Azure Compute Gallery használatával szeretné használni, rendelkeznie kell egy meglévő katalógussal és képdefinícióval. A VM Image Builder nem hozza létre a katalógust és a képdefiníciót.

  1. Futtassa az alábbi parancsokat egy új katalógus és képdefiníció létrehozásához.

    Ez a kód létrehoz egy definíciót a megbízható indítási biztonsági típussal, és megfelel a Windows 365 rendszerkép követelményeinek.

    # 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. Hozzon létre egy fájlt a sablondefiníció tárolásához, például c:/temp/mytemplate.txt.

  3. Másolja az alábbi Azure Resource Manger-sablont a VM Image Builderhez az új sablonfájlba.

    Ez a sablon a forrásrendszerképet és az alkalmazott testreszabásokat jelzi. Telepíti a Choco-t és a VS Code-ot, valamint a képterjesztés helyét is jelzi.

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

    Zárja be a sablonfájlt, mielőtt továbblép a következő lépésre.

  4. Konfigurálja az új sablont a változókkal.

    Cserélje le <Template Path> a sablonfájl helyére, például 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. Küldje el a sablont a szolgáltatásnak.

    Az alábbi parancs letölti a függő összetevőket, például szkripteket, és az átmeneti erőforráscsoportban tárolja őket. Az átmeneti erőforráscsoport előtaggal IT_van elnevezett.

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  6. Hozza létre a képet a Run sablon parancsának meghívásával:

    A futtatási folyamat megerősítéséhez adja meg az Igen értéket.

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

    Fontos

    A rendszerkép létrehozása és replikálása mindkét régióba eltarthat egy ideig. A PowerShell és az Azure Portal között eltérést tapasztalhat a folyamatban lévő jelentéskészítésben. Mielőtt elkezdené létrehozni a dev box definícióját, várjon, amíg a folyamat befejeződik.

  7. Információt kaphat az újonnan létrehozott rendszerképről, beleértve a futtatási állapotot és a kiépítési állapotot.

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

    Sample output:

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

    A rendszerkép kiépítési állapotát az Azure Portalon is megtekintheti. Nyissa meg a katalógust, és tekintse meg a képdefiníciót.

    Screenshot that shows the provisioning state of the customized image version.

Miután kiépítette az egyéni rendszerképet a katalógusban, konfigurálhatja a katalógust a rendszerképek használatára a fejlesztői központban. További információ: Az Azure Compute Gallery konfigurálása.

A Microsoft Dev Box beállítása egyéni rendszerképpel

Miután a katalógusképek elérhetővé válnak a fejlesztői központban, használhatja az egyéni rendszerképet a Microsoft Dev Box használatával. További információ : Rövid útmutató: A Microsoft Dev Box konfigurálása.