PowerShell kullanarak VM Görüntü Oluşturucusu ile Windows VM oluşturma

Şunlar için geçerlidir: ✔️ Windows VM'leri

Bu makalede, Azure VM Image Builder PowerShell modülünü kullanarak özelleştirilmiş bir Windows VM görüntüsünün nasıl oluşturulacağı gösterilmektedir.

Önkoşullar

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

PowerShell'i yerel olarak kullanmayı seçerseniz, bu makalede Azure PowerShell modülünü yüklemeniz ve Bağlan-AzAccount cmdlet'ini kullanarak Azure hesabınıza bağlanmanız gerekir. Daha fazla bilgi için bkz . Azure PowerShell'i yükleme.

Adımlardan bazıları Az.ImageBuilder modülünden cmdlet'ler gerektirir. Aşağıdaki komutu kullanarak ayrı olarak yükleyin.

Install-Module -Name Az.ImageBuilder

Azure Cloud Shell

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell'i başlatmak için:

Seçenek Örnek/Bağlantı
Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. Screenshot that shows an example of Try It for Azure Cloud Shell.
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. Button to launch Azure Cloud Shell.
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell'i kullanmak için:

  1. Cloud Shell'i başlatın.

  2. Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.

  3. Windows ve Linux'ta Ctrl+Shift V'yi seçerek veya macOS üzerinde Cmd+Shift++V'yi seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.

  4. Kodu veya komutu çalıştırmak için Enter'ı seçin.

Birden çok Azure aboneliğiniz varsa, kaynakların faturalandırılacağı uygun aboneliği seçin. Set-AzContext cmdlet'ini kullanarak belirli bir aboneliği seçin.

Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000

Sağlayıcıları kaydetme

Henüz yapmadıysanız, Azure aboneliğinizle kullanmak üzere aşağıdaki kaynak sağlayıcılarını kaydedin:

  • Microsoft.Compute
  • Microsoft.KeyVault
  • Microsoft.Storage
  • Microsoft.Network
  • Microsoft.VirtualMachineImages
  • Microsoft.ManagedIdentity
  • Microsoft.ContainerInstance
Get-AzResourceProvider -ProviderNamespace Microsoft.Compute, Microsoft.KeyVault, Microsoft.Storage, Microsoft.VirtualMachineImages, Microsoft.Network, Microsoft.ManagedIdentity |
  Where-Object RegistrationState -ne Registered |
    Register-AzResourceProvider

Değişkenleri tanımlama

Bazı bilgileri art arda kullanacağınız için, bu bilgileri depolamak için bazı değişkenler oluşturun:

# Destination image resource group name
$imageResourceGroup = 'myWinImgBuilderRG'

# Azure region
$location = 'WestUS2'

# Name of the image to be created
$imageTemplateName = 'myWinImage'

# Distribution properties of the managed image upon completion
$runOutputName = 'myDistResults'

Azure abonelik kimliğiniz için bir değişken oluşturun. Değişkenin abonelik kimliğinizi içerdiğini subscriptionID onaylamak için aşağıdaki örnekte ikinci satırı çalıştırabilirsiniz:

# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID

Kaynak grubu oluşturma

New-AzResourceGroup cmdlet'ini kullanarak bir Azure kaynak grubu oluşturun. Kaynak grubu, Azure kaynaklarının grup olarak dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır.

Aşağıdaki örnek, değişkende belirttiğiniz $location bölgedeki değişkendeki $imageResourceGroup adı temel alan bir kaynak grubu oluşturur. Bu kaynak grubu, görüntü yapılandırma şablonu yapıtını ve görüntüyü depolamak için kullanılır.

New-AzResourceGroup -Name $imageResourceGroup -Location $location

Kullanıcı kimliği oluşturma ve rol izinlerini ayarlama

Aşağıdaki örneği kullanarak belirtilen kaynak grubunda görüntü oluşturmak için Azure görüntü oluşturucu izinleri verin. Bu izin olmadan görüntü derleme işlemi başarıyla tamamlanmaz.

  1. Rol tanımı ve kimlik adları için değişkenler oluşturun. Bu değerler benzersiz olmalıdır.

    [int]$timeInt = $(Get-Date -UFormat '%s')
    $imageRoleDefName = "Azure Image Builder Image Def $timeInt"
    $identityName = "myIdentity$timeInt"
    
  2. Kullanıcı kimliği oluşturma.

    New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
    
  3. Kimlik kaynağını ve asıl kimlikleri değişkenlerde depolayın.

    $identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
    $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
    

Görüntüleri dağıtmak için kimliğe izinler atama

  1. JSON yapılandırma dosyasını indirin ve bu makalede tanımlanan ayarlara göre değiştirin.

    $myRoleImageCreationUrl = 'https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json'
    $myRoleImageCreationPath = "myRoleImageCreation.json"
    
    Invoke-WebRequest -Uri $myRoleImageCreationUrl -OutFile $myRoleImageCreationPath -UseBasicParsing
    
    $Content = Get-Content -Path $myRoleImageCreationPath -Raw
    $Content = $Content -replace '<subscriptionID>', $subscriptionID
    $Content = $Content -replace '<rgName>', $imageResourceGroup
    $Content = $Content -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName
    $Content | Out-File -FilePath $myRoleImageCreationPath -Force
    
  2. Rol tanımını oluşturun.

    New-AzRoleDefinition -InputFile $myRoleImageCreationPath
    
  3. Rol tanımını VM Görüntü Oluşturucusu hizmet sorumlusuna verin.

    $RoleAssignParams = @{
      ObjectId = $identityNamePrincipalId
      RoleDefinitionName = $imageRoleDefName
      Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
    }
    New-AzRoleAssignment @RoleAssignParams
    

Not

"New-AzRoleDefinition: Rol tanımı sınırı aşıldı. Başka rol tanımı oluşturulamıyor", bkz . Azure RBAC (rol tabanlı erişim denetimi) sorunlarını giderme.

  1. Galeriyi oluşturun.

    $myGalleryName = 'myImageGallery'
    $imageDefName = 'winSvrImages'
    
    New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
    
  2. Galeri tanımı oluşturun.

    $GalleryParams = @{
      GalleryName = $myGalleryName
      ResourceGroupName = $imageResourceGroup
      Location = $location
      Name = $imageDefName
      OsState = 'generalized'
      OsType = 'Windows'
      Publisher = 'myCo'
      Offer = 'Windows'
      Sku = 'Win2019'
    }
    New-AzGalleryImageDefinition @GalleryParams
    

Görüntü oluşturma

  1. VM Görüntü Oluşturucusu kaynak nesnesi oluşturun. Geçerli parametre değerleri için bkz. Azure PowerShell ile Azure Market'da Windows VM görüntülerini bulma.

    $SrcObjParams = @{
      PlatformImageSource = $true
      Publisher = 'MicrosoftWindowsServer'
      Offer = 'WindowsServer'
      Sku = '2019-Datacenter'
      Version = 'latest'
    }
    $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
    
  2. VM Görüntü Oluşturucusu dağıtım nesnesi oluşturma.

    $disObjParams = @{
      SharedImageDistributor = $true
      ArtifactTag = @{tag='dis-share'}
      GalleryImageId = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup/providers/Microsoft.Compute/galleries/$myGalleryName/images/$imageDefName"
      ReplicationRegion = $location
      RunOutputName = $runOutputName
      ExcludeFromLatest = $false
    }
    $disSharedImg = New-AzImageBuilderTemplateDistributorObject @disObjParams
    
  3. VM Görüntü Oluşturucusu özelleştirme nesnesi oluşturun.

    $ImgCustomParams01 = @{
      PowerShellCustomizer = $true
      Name = 'settingUpMgmtAgtPath'
      RunElevated = $false
      Inline = @("mkdir c:\\buildActions", "mkdir c:\\buildArtifacts", "echo Azure-Image-Builder-Was-Here  > c:\\buildActions\\buildActionsOutput.txt")
    }
    $Customizer01 = New-AzImageBuilderTemplateCustomizerObject @ImgCustomParams01
    
  4. İkinci bir VM Görüntü Oluşturucusu özelleştirme nesnesi oluşturun.

    $ImgCustomParams02 = @{
      FileCustomizer = $true
      Name = 'downloadBuildArtifacts'
      Destination = 'c:\\buildArtifacts\\index.html'
      SourceUri = 'https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/exampleArtifacts/buildArtifacts/index.html'
    }
    $Customizer02 = New-AzImageBuilderTemplateCustomizerObject @ImgCustomParams02
    
  5. VM Görüntü Oluşturucusu şablonu oluşturun.

    $ImgTemplateParams = @{
      ImageTemplateName = $imageTemplateName
      ResourceGroupName = $imageResourceGroup
      Source = $srcPlatform
      Distribute = $disSharedImg
      Customize = $Customizer01, $Customizer02
      Location = $location
      UserAssignedIdentityId = $identityNameResourceId
    }
    New-AzImageBuilderTemplate @ImgTemplateParams
    

Şablon oluşturulduğunda bir ileti döndürülür ve içinde $imageResourceGroupbir VM Görüntü Oluşturucusu yapılandırma şablonu oluşturulur.

Şablon oluşturma işleminin başarılı olup olmadığını belirlemek için aşağıdaki örneği kullanın:

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

Arka planda, VM Görüntü Oluşturucusu aboneliğinizde bir hazırlama kaynak grubu da oluşturur. Bu kaynak grubu görüntü derlemesi için kullanılır. biçimindedir IT_<DestinationResourceGroup>_<TemplateName>.

Uyarı

Hazırlama kaynak grubunu doğrudan silmeyin. Hazırlama kaynak grubunun silinmesine neden olmak için görüntü şablonu yapıtını silin.

Görüntü yapılandırma şablonu gönderildiğinde hizmet bir hata bildiriyorsa aşağıdakileri yapın:

  • Bkz . Azure VM Görüntü Oluşturucusu hatalarını giderme.

  • Şablonu göndermeyi yeniden denemeden önce şu örneği izleyerek şablonu silin:

    Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
    

Görüntü derlemesini başlatma

Aşağıdaki komutu çalıştırarak görüntü yapılandırmasını VM Görüntü Oluşturucusu hizmetine gönderin:

Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName

Görüntü oluşturma işleminin tamamlanmasını bekleyin ve bu işlem bir saat kadar sürebilir.

Hatalarla karşılaşırsanız Azure VM Görüntü Oluşturucusu hatalarını giderme makalesini gözden geçirin.

VM oluşturma

  1. VM oturum açma kimlik bilgilerini bir değişkende depolayın. Parola karmaşık olmalıdır.

    $Cred = Get-Credential
    
  2. Oluşturduğunuz görüntüyü kullanarak VM'yi oluşturun.

    $ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId
    
    New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
    

Özelleştirmeleri doğrulama

  1. VM'yi oluştururken ayarladığınız kullanıcı adını ve parolayı kullanarak VM'ye Uzak Masaüstü bağlantısı oluşturun.

  2. Vm'nin içinde PowerShell'i açın ve aşağıdaki örnekte gösterildiği gibi komutunu çalıştırın Get-Content:

    Get-Content -Path C:\buildActions\buildActionsOutput.txt
    

    Çıktı, görüntü özelleştirme işlemi sırasında oluşturduğunuz dosyanın içeriğini temel alır.

    Azure-Image-Builder-Was-Here
    
  3. Aynı PowerShell oturumunda, aşağıdaki örnekte gösterildiği gibi öğesinin varlığını denetleyerek ikinci özelleştirmenin c:\buildArtifacts\index.htmlbaşarıyla tamamlandığını doğrulayın:

    Get-ChildItem c:\buildArtifacts\
    

    Sonuç, görüntü özelleştirme işlemi sırasında dosyanın indirildiğini gösteren bir dizin listesi olmalıdır.

        Directory: C:\buildArtifacts
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---          29/01/2021    10:04            276 index.html
    

Kaynaklarınızı temizleme

Bu işlem sırasında oluşturulan kaynaklara artık ihtiyacınız yoksa, aşağıdakileri yaparak bunları silebilirsiniz:

  1. VM Görüntü Oluşturucusu şablonunu silin.

    Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
    
  2. Görüntü kaynak grubunu silin.

    Dikkat

    Aşağıdaki örnek, belirtilen kaynak grubunu ve içerdiği tüm kaynakları siler. Bu makalenin kapsamı dışındaki kaynaklar kaynak grubunda varsa, bunlar da silinir.

    Remove-AzResourceGroup -Name $imageResourceGroup
    

Sonraki adımlar

Bu makalede kullanılan JSON dosyasının bileşenleri hakkında daha fazla bilgi edinmek için bkz . VM Görüntü Oluşturucusu şablon başvurusu.