Bagikan melalui


Mengonfigurasi kotak dev dengan menggunakan Azure VM Image Builder dan Microsoft Dev Box

Dalam artikel ini, Anda menggunakan Azure VM Image Builder untuk membuat kotak dev yang dikustomisasi di Microsoft Dev Box dengan menggunakan templat. Templat menyertakan langkah penyesuaian untuk menginstal Visual Studio Code (VS Code).

Saat organisasi Anda menggunakan gambar komputer virtual (VM) standar, organisasi Anda dapat dengan lebih mudah bermigrasi ke cloud dan membantu memastikan konsistensi dalam penyebaran Anda. Gambar biasanya mencakup keamanan yang telah dikonfigurasi sebelumnya, pengaturan konfigurasi, serta perangkat lunak yang diperlukan. Menyiapkan alur gambar Anda sendiri membutuhkan waktu, infrastruktur, dan banyak detail yang lain. Dengan Azure VM Image Builder, Anda dapat membuat konfigurasi yang menjelaskan gambar Anda. Layanan kemudian membangun gambar dan mengirimkannya ke proyek dev box.

Meskipun dimungkinkan untuk membuat gambar VM kustom dengan tangan atau dengan menggunakan alat lain, prosesnya bisa rumit dan tidak dapat diandalkan. Mesin virtual Image Builder, yang dibuat di atas HashiCorp Packer, memberi Anda keuntungan layanan terkelola.

Untuk mengurangi kompleksitas pembuatan gambar mesin virtual, Mesin virtual Image Builder:

  • Menghilangkan kebutuhan untuk menggunakan alat, proses, dan langkah-langkah manual yang kompleks untuk membuat gambar mesin virtual. Mesin virtual Image Builder mengabstraksi semua detail ini dan menyembunyikan persyaratan khusus Azure, seperti kebutuhan untuk menggeneralisasi gambar (Sysprep). Dan hal itu meningkatkan kemampuan pengguna dalam mengambil alih persyaratan tersebut.

  • Bekerja dengan alur build gambar yang ada untuk pengalaman klik-dan-pergi. Anda dapat memanggil VM Image Builder dari alur Anda atau menggunakan tugas Azure VM Image Builder service DevOps.

  • Mengambil data kustomisasi dari berbagai sumber, yang menghapus kebutuhan untuk mengumpulkan semuanya dari satu tempat.

  • Terintegrasi dengan Azure Compute Gallery, yang membuat sistem manajemen gambar untuk mendistribusikan, mereplikasi, membuat versi, dan menskalakan gambar secara global. Selain itu, Anda dapat mendistribusikan gambar yang dihasilkan yang sama dengan hard disk virtual atau sebagai satu atau beberapa gambar terkelola, tanpa harus membangunnya kembali dari awal.

Penting

Microsoft Dev Box hanya mendukung gambar yang menggunakan jenis keamanan Peluncuran Tepercaya yang diaktifkan.

Prasyarat

Untuk memprovisikan gambar kustom yang Anda buat dengan menggunakan VM Image Builder, Anda memerlukan:

Langkah pertama adalah menggunakan Azure VM Image Builder dan Azure PowerShell untuk membuat versi gambar di Azure Compute Gallery lalu mendistribusikan gambar secara global. Anda juga dapat melakukan tugas ini dengan menggunakan Azure CLI.

  1. Untuk menggunakan VM Image Builder, Anda perlu mendaftarkan fitur tersebut.

    Periksa pendaftaran penyedia Anda. Pastikan setiap perintah kembali Registered untuk fitur yang ditentukan.

       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 
    

    Jika pendaftaran penyedia tidak mengembalikan Registered, daftarkan penyedia dengan menjalankan perintah berikut:

       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. Menginstal Modul PowerShell:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Buat variabel untuk menyimpan informasi yang Anda gunakan lebih dari sekali.

    1. Salin kode sampel berikut.
    2. Ganti <Resource group> dengan grup sumber daya yang Anda gunakan untuk membuat pusat pengembangan.
    3. Jalankan kode yang diperbarui di 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. Buat identitas yang ditetapkan pengguna dan atur izin pada grup sumber daya dengan menjalankan kode berikut di PowerShell.

    VM Image Builder menggunakan identitas pengguna yang disediakan untuk menyuntikkan gambar ke Azure Compute Gallery. Contoh berikut membuat definisi peran Azure dengan tindakan tertentu untuk mendistribusikan gambar. Definisi peran kemudian akan ditetapkan ke identitas pengguna.

    # 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. Tetapkan izin untuk identitas untuk mendistribusikan gambar.

    Gunakan perintah ini untuk mengunduh templat definisi peran Azure, lalu perbarui dengan parameter yang ditentukan sebelumnya:

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

Untuk menggunakan mesin virtual Image Builder dengan Azure Compute Gallery, Anda harus memiliki galeri dan definisi gambar terlebih dahulu. Mesin virtual Image Builder tidak akan membuat galeri dan definisi gambar untuk Anda.

  1. Jalankan perintah berikut untuk membuat galeri dan definisi gambar baru.

    Kode ini membuat definisi dengan jenis keamanan peluncuran tepercaya dan memenuhi persyaratan gambar 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. Buat file untuk menyimpan definisi templat Anda, seperti c:/temp/mytemplate.txt.

  3. Salin templat Azure Resource Manger berikut untuk VM Image Builder ke dalam file templat baru Anda.

    Templat ini menunjukkan gambar sumber dan kustomisasi yang diterapkan. Ini menginstal Choco dan VS Code, dan juga menunjukkan lokasi distribusi gambar.

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

    Tutup file templat Anda sebelum melanjutkan ke langkah berikutnya.

  4. Konfigurasikan templat baru Anda dengan variabel Anda.

    Ganti <Template Path> dengan lokasi file templat Anda, seperti 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. Kirim templat Anda ke layanan.

    Perintah berikut mengunduh artefak dependen apa pun, seperti skrip, dan menyimpannya di grup sumber daya penahapan. Grup sumber daya penahapan diawali dengan IT_.

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  6. Buat gambar dengan memanggil Run perintah pada templat:

    Pada perintah untuk mengonfirmasi proses eksekusi, masukkan Ya.

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

    Penting

    Membuat gambar dan mereplikasinya ke kedua wilayah dapat memakan waktu. Anda mungkin melihat perbedaan dalam pelaporan yang sedang berlangsung antara PowerShell dan portal Azure. Sebelum Anda mulai membuat definisi kotak dev, tunggu hingga proses selesai.

  7. Dapatkan informasi tentang gambar yang baru dibuat, termasuk status eksekusi dan status provisi.

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

    Contoh output:

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

    Anda juga dapat melihat status provisi gambar Anda di portal Azure. Buka galeri Anda dan lihat definisi gambar.

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

Setelah gambar kustom Anda disediakan di galeri, Anda dapat mengonfigurasi galeri untuk menggunakan gambar di pusat pengembangan. Untuk informasi selengkapnya, lihat Mengonfigurasi Azure Compute Gallery.

Menyiapkan Microsoft Dev Box dengan gambar kustom

Setelah gambar galeri tersedia di pusat pengembangan, Anda dapat menggunakan gambar kustom dengan Microsoft Dev Box. Untuk informasi selengkapnya, lihat Mulai Cepat: Mengonfigurasi Microsoft Dev Box.