Azure VM Görüntü Oluşturucusu'nu ve Microsoft Dev Box'ı kullanarak geliştirme kutusunu yapılandırma

Bu makalede, Şablon kullanarak Microsoft Dev Box'ta özelleştirilmiş bir geliştirme kutusu oluşturmak için Azure VM Görüntü Oluşturucusu'nu kullanacaksınız. Şablon, Visual Studio Code'u (VS Code) yüklemek için bir özelleştirme adımı içerir.

Standartlaştırılmış sanal makine (VM) görüntülerinin kullanılması, buluta geçişte tutarlı dağıtımlar sağlamanıza yardımcı olur. Bu görüntüler önceden tanımlanmış güvenlik, yapılandırma ayarları ve gerekli yazılımları içerebilir. Görüntüleme işlem hattı ayarlamak zaman alabilir ve karmaşık olabilir. Azure VM Image Builder, görüntünüz için hizmetin derlediği ve bir geliştirme kutusu projesine gönderdiği bir yapılandırma oluşturmanıza olanak tanıyarak bu işlemi basitleştirir.

Özel VM görüntülerini el ile veya diğer araçlarla oluşturmak zor ve güvenilir olmayabilir. HashiCorp Packer üzerinde oluşturulan VM Görüntü Oluşturucusu, yönetilen bir hizmetin avantajlarını sunar.

VM görüntüsü oluşturmayı basitleştirmek için VM Görüntü Oluşturucusu:

  • Karmaşık araçlara, işlemlere ve el ile uygulanan adımlara olan ihtiyacı ortadan kaldırır. Bu ayrıntıları soyutlar ve görüntüyü (Sysprep) genelleştirme gibi Azure'a özgü gereksinimleri gizler ve gerekirse ileri düzey kullanıcıların geçersiz kılmasına izin verir.
  • Mevcut görüntü derleme işlem hatlarıyla çalışır. İşlem hattınızdan VM Görüntü Oluşturucusu'nu çağırabilir veya bir Azure VM Görüntü Oluşturucusu hizmeti DevOps görevi kullanabilirsiniz.
  • Çeşitli kaynaklardan özelleştirme verilerini toplar, böylece hepsini tek bir yerde toplamanız gerekmez.
  • Azure İşlem Galerisi ile tümleştirerek genel dağıtım, çoğaltma, sürüm oluşturma ve ölçeklendirme için bir görüntü yönetim sistemi oluşturur. Sanal sabit disk veya yönetilen görüntülerle aynı görüntüyü yeniden oluşturmadan dağıtabilirsiniz.

Önemli

Microsoft Dev Box yalnızca Güvenilen Başlatma etkin güvenlik türünü kullanan görüntüleri destekler.

Önkoşullar

VM Görüntü Oluşturucusu'nu kullanarak oluşturduğunuz özel görüntüyü sağlamak için şunları yapmanız gerekir:

İlk adım, Azure İşlem Galerisi'nde görüntü oluşturmak ve bunu genel olarak dağıtmak için Azure VM Görüntü Oluşturucusu ve Azure PowerShell kullanmaktır.

Aşağıdaki örnekte PowerShell kullanılır. Azure Komut Satırı Arabirimi'ni (CLI) de kullanabilirsiniz.

  1. VM Görüntü Oluşturucusu'nu kullanmak için özellikleri kaydetmeniz gerekir.

    Sağlayıcı kayıtlarınızı denetleyin. Her komutun belirtilen özellik için döndürdüğünden Registered emin olun.

       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 
    

    Sağlayıcı kayıtları döndürmezse Registered, aşağıdaki komutları çalıştırarak sağlayıcıları kaydedin:

       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 modüllerini yükleme:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Birden çok kez kullandığınız bilgileri depolamak için değişkenler oluşturun.

    1. Aşağıdaki örnek kodu kopyalayın.
    2. öğesini geliştirme merkezini oluşturmak için kullandığınız kaynak grubuyla değiştirin <Resource group> .
    3. Güncelleştirilmiş kodu PowerShell'de çalıştırın.
    # 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. PowerShell'de aşağıdaki kodu çalıştırarak kullanıcı tarafından atanan bir kimlik oluşturun ve kaynak grubunda izinleri ayarlayın.

    VM Görüntü Oluşturucusu, görüntüyü Azure İşlem Galerisi'nde depolamak için sağladığınız kullanıcı kimliğini kullanır. Aşağıdaki örnek, görüntüyü dağıtmak için belirli eylemleri içeren bir Azure rol tanımı oluşturur. Rol tanımı daha sonra kullanıcı kimliğine atanır.

    # 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. Görüntüleri dağıtmak için kimliğe izinler atayın.

    Azure rol tanımı şablonunu indirmek ve daha önce belirtilen parametrelerle güncelleştirmek için bu komutu kullanın:

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

VM Görüntü Oluşturucusu'nu Azure İşlem Galerisi ile kullanmak için mevcut bir galeriye ve görüntü tanımına sahip olduğunuzdan emin olun. VM Görüntü Oluşturucusu galeriyi ve görüntü tanımını sizin için oluşturmaz.

  1. Yeni bir galeri ve görüntü tanımı oluşturmak için aşağıdaki komutları çalıştırın.

    Bu kod, güvenilir başlatma güvenlik türüne sahip bir tanım oluşturur ve Windows 365 görüntü gereksinimlerini karşılar.

    # 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. Şablon tanımınızı depolamak için c:/temp/mytemplate.txt gibi bir dosya oluşturun.

  3. VM Image Builder için aşağıdaki Azure Kaynak Yöneticisi şablonunu yeni şablon dosyanıza kopyalayın.

    Bu şablon, kaynak görüntüyü ve uygulanan özelleştirmeleri gösterir. Choco ve VS Code'u yükler ve ayrıca görüntü dağıtım konumunu gösterir.

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

    Sonraki adıma geçmeden önce şablon dosyanızı kapatın.

  4. Yeni şablonunuzu değişkenlerinizle yapılandırın.

    öğesini <Template Path> şablon dosyanızın konumuyla değiştirin; örneğin 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. Şablonunuzu hizmete gönderin.

    Aşağıdaki komut betikler gibi tüm bağımlı yapıtları indirir ve hazırlama kaynak grubunda depolar. Hazırlama kaynak grubuna ön eki eklenir IT_.

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  6. Şablonda komutunu çağırarak Run görüntüyü oluşturun:

    Çalıştırma işlemini onaylama istemine Evet yazın.

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

    Önemli

    Görüntüyü oluşturmak ve her iki bölgeye çoğaltmak biraz zaman alabilir. PowerShell ile Azure portalı arasında devam eden raporlamada bir fark görebilirsiniz. Geliştirme kutusu tanımı oluşturmaya başlamadan önce işlem tamamlanana kadar bekleyin.

  7. Çalıştırma durumu ve sağlama durumu da dahil olmak üzere yeni oluşturulan görüntü hakkında bilgi edinin.

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

    Örnek çıkış:

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

    Görüntünüzün sağlama durumunu Azure portalında da görüntünüzü görüntüleyebilirsiniz. Galerinize gidin ve görüntü tanımını görüntüleyin.

    Özelleştirilmiş görüntü sürümünün sağlama durumunu gösteren ekran görüntüsü.

Özel görüntünüz galeride depolandığında, galeriyi geliştirme merkezindeki görüntüleri kullanacak şekilde yapılandırabilirsiniz. Daha fazla bilgi için bkz . Azure İşlem Galerisini Yapılandırma.

Microsoft Dev Box'u özel görüntüyle ayarlama

Galeri görüntüleri geliştirme merkezinde kullanılabilir olduğunda, Microsoft Dev Box ile özel görüntüyü kullanabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Microsoft Dev Box'ı yapılandırma.