Aracılığıyla paylaş


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.

Kuruluşunuz standartlaştırılmış sanal makine (VM) görüntüleri kullandığında buluta daha kolay geçiş yapabilir ve dağıtımlarınızda tutarlılık sağlamaya yardımcı olabilir. Görüntüler normalde önceden tanımlanmış güvenlik, yapılandırma ayarları ve gerekli yazılımları içerir. Kendi görüntüleme işlem hattınızı ayarlamak için zaman, altyapı ve diğer birçok ayrıntı gerekir. Azure VM Görüntü Oluşturucusu ile görüntünüzü açıklayan bir yapılandırma oluşturabilirsiniz. Hizmet daha sonra görüntüyü oluşturur ve bir geliştirme kutusu projesine gönderir.

El ile veya diğer araçları kullanarak özel VM görüntüleri oluşturmak mümkün olsa da, işlem hantal 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üleri oluşturmanın karmaşıklığını azaltmak için VM Görüntü Oluşturucusu:

  • VM görüntüsü oluşturmak için karmaşık araçları, işlemleri ve el ile gerçekleştirilen adımları kullanma gereksinimini ortadan kaldırır. VM Görüntü Oluşturucusu tüm bu ayrıntıları özetler ve görüntüyü genelleştirme gereksinimi (Sysprep) gibi Azure'a özgü gereksinimleri gizler. Ayrıca daha ileri düzey kullanıcılara bu gereksinimleri geçersiz kılma olanağı sağlar.

  • Tıkla ve git deneyimi için 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 getirir ve bu da tümünü tek bir yerden toplama gereksinimini ortadan kaldırır.

  • Görüntüleri genel olarak dağıtmak, çoğaltmak, sürüme almak ve ölçeklendirmek için bir görüntü yönetim sistemi oluşturan Azure İşlem Galerisi ile tümleşir. Ayrıca, sonuçta elde edilen görüntüyü sıfırdan yeniden oluşturmak zorunda kalmadan bir sanal sabit disk veya bir veya daha fazla yönetilen görüntü olarak 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:

  • Azure PowerShell 6.0 veya üzeri. PowerShell yüklü değilse Windows'a Azure PowerShell yükleme sayfasındaki adımları izleyin.
  • Azure aboneliğinde veya belirli bir kaynak grubunda sahip veya Katkıda Bulunan izinleri.
  • Bir kaynak grubu.
  • Bağlı ağ bağlantısı olan bir geliştirme merkezi. Yoksa, ağ bağlantılarını yapılandırarak geliştirme kutularını kaynaklara Bağlan adımlarını izleyin.

İlk adım, Azure VM Görüntü Oluşturucusu'nu ve Azure PowerShell'i kullanarak Azure İşlem Galerisi'nde bir görüntü sürümü oluşturmak ve ardından görüntüyü genel olarak dağıtmaktır. Bu görevi Azure CLI'yi kullanarak da yapabilirsiniz.

  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, sağlanan kullanıcı kimliğini kullanarak görüntüyü Azure İşlem Galerisi'ne ekler. 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 olmanız gerekir. 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.

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

Galeride özel görüntünüz sağlandıktan sonra 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ıma sunulduktan sonra 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.