Membuat gambar Linux dan mendistribusikannya ke Azure Compute Gallery menggunakan Azure CLI

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Artikel ini menunjukkan kepada Anda bagaimana Anda dapat menggunakan Azure VM Image Builder dan Azure CLI, untuk membuat versi gambar di Azure Compute Gallery (sebelumnya dikenal sebagai Shared Image Gallery), lalu mendistribusikan gambar secara global. Anda juga dapat membuat versi gambar dengan menggunakan Azure PowerShell.

Artikel ini menggunakan contoh templat JSON untuk mengonfigurasi gambar. File JSON berada di helloImageTemplateforSIG.json.

Untuk mendistribusikan gambar ke Azure Compute Gallery, templat menggunakan sharedImage sebagai nilai untuk bagian distribute dari templat.

Mendaftarkan penyedia

Untuk menggunakan VM Image Builder, Anda perlu mendaftarkan penyedia. Periksa pendaftaran Anda dengan menjalankan perintah berikut:

az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState

Jika tidak dinyatakan terdaftar, jalankan perintah berikut:

az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance

Mengatur variabel dan izin

Karena Anda akan menggunakan beberapa informasi berulang kali, buat beberapa variabel untuk menyimpan informasi tersebut.

Mesin virtual Image Builder hanya mendukung pembuatan gambar kustom di grup sumber daya yang sama dengan gambar yang dikelola sumber. Dalam contoh berikut, perbarui nama grup sumber daya menjadi grup sumber daya yang sama dengan gambar yang dikelola sumber daya Anda.

# Resource group name - ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus
# Name of the Azure Compute Gallery - myGallery in this example
sigName=myIbGallery
# Name of the image definition to be created - myImageDef in this example
imageDefName=myIbImageDef
# Reference name in the image distribution metadata
runOutputName=aibLinuxSIG

Buat variabel untuk ID langganan Anda:

subscriptionID=$(az account show --query id --output tsv)

Buat grup sumber daya:

az group create -n $sigResourceGroup -l $location

Membuat identitas yang ditetapkan pengguna dan mengatur izin pada grup sumber daya

Mesin virtual Image Builder menggunakan identitas pengguna yang disediakan untuk memasukkan gambar ke dalam Azure Compute Gallery. Dalam contoh ini, Anda membuat definisi peran Azure dengan tindakan khusus untuk mendistribusikan gambar. Definisi peran kemudian akan ditetapkan ke identitas pengguna.

# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName

# Get the identity ID
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)

# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# Download an Azure role-definition template, and update the template with the parameters that were specified earlier
curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json

imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')

# Update the definition
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json

# Create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json

# Grant a role definition to the user-assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup

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.

Jika Anda belum memiliki galeri dan definisi gambar yang akan digunakan, mulailah dengan membuatnya.

Pertama, buat galeri:

az sig create \
    -g $sigResourceGroup \
    --gallery-name $sigName

Kemudian, buat definisi gambar:

az sig image-definition create \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 20_04-lts-gen2 \
   --os-type Linux \
   --hyper-v-generation V2 \
   --features SecurityType=TrustedLaunchSupported

Unduh dan konfigurasikan file JSON

Unduh templat JSON dan konfigurasikan dengan variabel Anda:

curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Linux_Shared_Image_Gallery_Image/helloImageTemplateforSIG.json -o helloImageTemplateforSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIG.json

Membuat versi citra

Di bagian ini, Anda membuat versi gambar di galeri.

Kirim konfigurasi gambar ke layanan Azure VM Image Builder:

az resource create \
    --resource-group $sigResourceGroup \
    --properties @helloImageTemplateforSIG.json \
    --is-full-object \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

Mulai kompilasi citra:

az resource invoke-action \
     --resource-group $sigResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n helloImageTemplateforSIG01 \
     --action Run

Dibutuhkan beberapa saat untuk membuat gambar dan mereplikasinya ke kedua wilayah. Tunggu hingga bagian ini selesai sebelum melanjutkannya ke pembuatan mesin virtual.

Buat VM

Buat mesin virtual dari versi gambar yang dibuat oleh mesin virtual Image Builder.

az vm create \
  --resource-group $sigResourceGroup \
  --name myAibGalleryVM \
  --admin-username aibuser \
  --location $location \
  --image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
  --security-type TrustedLaunch \
  --generate-ssh-keys

Sambungkan ke mesin virtual melalui Secure Shell (SSH):

ssh aibuser@<publicIpAddress>

Segera setelah koneksi SSH Anda dibuat, Anda akan melihat bahwa gambar telah disesuaikan dengan Pesan Hari Ini:

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

Bersihkan sumber daya Anda

Catatan

Jika sekarang Anda ingin mencoba menyesuaikan ulang versi gambar untuk membuat versi baru dari gambar yang sama, lewati langkah yang diuraikan di sini lalu buka Menggunakan VM Image Builder untuk membuat versi gambar lain.

Jika Anda tidak lagi memerlukan sumber daya yang dibuat saat mengikuti proses dalam artikel ini, Anda bisa menghapusnya dengan melakukan hal berikut.

Proses ini menghapus gambar yang Anda buat dan semua file sumber daya lainnya. Pastikan Anda telah menyelesaikan penyebaran ini sebelum menghapus sumber daya.

Saat menghapus sumber daya galeri, Anda perlu menghapus semua versi gambar sebelum dapat menghapus definisi gambar yang digunakan untuk membuatnya. Untuk menghapus galeri, Anda harus terlebih dahulu menghapus semua definisi gambar di galeri.

  1. Hapus templat VM Image Builder tersebut.

    az resource delete \
        --resource-group $sigResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIG01
    
  2. Hapus penetapan izin, peran, dan identitas.

    az role assignment delete \
        --assignee $imgBuilderCliId \
        --role "$imageRoleDefName" \
        --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
    
    az role definition delete --name "$imageRoleDefName"
    
    az identity delete --ids $imgBuilderId
    
  3. Dapatkan versi gambar yang dibuat oleh mesin virtual Image Builder (selalu dimulai dengan 0.), lalu hapus.

    sigDefImgVersion=$(az sig image-version list \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID --query [].'name' -o json | grep 0. | tr -d '"')
    az sig image-version delete \
    -g $sigResourceGroup \
    --gallery-image-version $sigDefImgVersion \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  4. Menghapus definisi gambar.

    az sig image-definition delete \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  5. Menghapus galeri.

    az sig delete -r $sigName -g $sigResourceGroup
    
  6. Hapus grup sumber daya.

    az group delete -n $sigResourceGroup -y
    

Langkah berikutnya

Pelajari selengkapnya tentang Azure Compute Gallery.