Menggunakan Azure Image Builder untuk VM Linux untuk mengakses jaringan virtual Azure yang sudah ada
Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel
Artikel ini menunjukkan cara menggunakan Azure VM Image Builder untuk membuat gambar Linux dasar yang disesuaikan yang memiliki akses ke sumber daya yang ada di jaringan virtual. Mesin virtual (VM) rakitan yang Anda buat disebarkan ke jaringan virtual baru atau yang sudah ada yang Anda tentukan dalam langganan Anda. Saat Anda menggunakan jaringan virtual Azure yang ada, VM Image Builder tidak memerlukan konektivitas jaringan publik.
Prasyarat
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
Mengatur variabel dan izin
Untuk tugas ini, Anda menggunakan beberapa informasi berulang kali. Buat beberapa variabel untuk menyimpan informasi tersebut.
# set your environment variables here!!!!
# destination image resource group
imageResourceGroup=aibImageRG01
# location (see possible locations in main docs)
location=WestUS2
# your subscription
# get the current subID : 'az account show | grep id'
subscriptionID=$(az account show --query id --output tsv)
# name of the image to be created
imageName=aibCustomLinuxImg01
# image distribution metadata reference name
runOutputName=aibCustLinManImg01ro
# VNET properties (update to match your existing VNET, or leave as-is for demo)
# VNET name
vnetName=myexistingvnet01
# subnet name
subnetName=subnet01
# VNET resource group name
# NOTE! The VNET must always be in the same region as the Azure Image Builder service region.
vnetRgName=existingVnetRG
# Existing Subnet NSG Name or the demo will create it
nsgName=aibdemoNsg
Membuat grup sumber daya.
az group create -n $imageResourceGroup -l $location
Mengonfigurasi jaringan
Jika Anda tidak memiliki jaringan virtual, subnet, atau grup keamanan jaringan (NSG) yang sudah ada, gunakan skrip berikut untuk membuatnya.
# Create a resource group
az group create -n $vnetRgName -l $location
# Create VNET
az network vnet create \
--resource-group $vnetRgName \
--name $vnetName --address-prefix 10.0.0.0/16 \
--subnet-name $subnetName --subnet-prefix 10.0.0.0/24
# Create base NSG to simulate an existing NSG
az network nsg create -g $vnetRgName -n $nsgName
az network vnet subnet update \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--name $subnetName \
--network-security-group $nsgName
# NOTE! The virtual network must always be in the same region as the Azure Image Builder service region.
Menambahkan aturan NSG
Aturan ini memungkinkan konektivitas dari VM Image Builder load balancer ke VM proksi. Port 60001 adalah untuk Linux dan port 60000 adalah untuk Windows. VM proksi tersambung ke VM build menggunakan port 22 untuk LINUX atau port 5986 untuk Windows.
az network nsg rule create \
--resource-group $vnetRgName \
--nsg-name $nsgName \
-n AzureImageBuilderNsgRule \
--priority 400 \
--source-address-prefixes AzureLoadBalancer \
--destination-address-prefixes VirtualNetwork \
--destination-port-ranges 60000-60001 --direction inbound \
--access Allow --protocol Tcp \
--description "Allow Image Builder Private Link Access to Proxy VM"
Menonaktifkan Kebijakan Layanan Privat pada subnet
Berikut caranya:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--disable-private-link-service-network-policies true
Untuk informasi selengkapnya, lihat Pilihan jaringan Azure VM Image Builder.
Mengubah templat contoh dan membuat peran
Setelah mengonfigurasi jaringan, Anda dapat memodifikasi templat contoh dan membuat peran. Berikut caranya:
# download the example and configure it with your vars
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1a_Creating_a_Custom_Linux_Image_on_Existing_VNET/existingVNETLinux.json -o existingVNETLinux.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" existingVNETLinux.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" existingVNETLinux.json
sed -i -e "s/<region>/$location/g" existingVNETLinux.json
sed -i -e "s/<imageName>/$imageName/g" existingVNETLinux.json
sed -i -e "s/<runOutputName>/$runOutputName/g" existingVNETLinux.json
sed -i -e "s/<vnetName>/$vnetName/g" existingVNETLinux.json
sed -i -e "s/<subnetName>/$subnetName/g" existingVNETLinux.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" existingVNETLinux.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" aibRoleNetworking.json
Mengatur izin pada grup sumber daya
VM Image Builder menggunakan identitas pengguna yang disediakan untuk memasukkan gambar ke dalam Azure Compute Gallery. Pada contoh ini, Anda membuat definisi peran Azure yang bisa mendistribusikan gambar ke galeri. Definisi peran kemudian akan ditetapkan ke identitas pengguna.
# create user assigned identity for image builder
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# get identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# update the template
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" existingVNETLinux.json
# make role name unique, to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')
# update the definitions
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json
Alih-alih memberikan granularitas VM Image Builder yang lebih rendah dan peningkatan hak istimewa, Anda dapat membuat dua peran. Satu peran memberi izin penyusun untuk membuat gambar, yang lain memungkinkannya untuk menyambungkan VM build dan load balancer ke jaringan virtual Anda.
# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
az role definition create --role-definition ./aibRoleNetworking.json
# grant role definition to the user assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az role assignment create \
--assignee $imgBuilderCliId \
--role "$netRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName
Untuk informasi lebih lanjut, lihat Konfigurasi izin Azure VM Image Builder dengan menggunakan Azure CLI atau Konfigurasi izin Azure VM Image Builder dengan menggunakan PowerShell.
Membuat gambar
Kirim konfigurasi gambar ke layanan VM Image Builder.
az resource create \
--resource-group $imageResourceGroup \
--properties @existingVNETLinux.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
# Wait approximately 1-3 mins (validation, permissions etc.)
Mulai build gambar.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
Perlu waktu beberapa saat untuk membuat gambar dan mereplikasinya ke kedua wilayah. Tunggu hingga bagian ini selesai sebelum melanjutkannya ke pembuatan VM.
Membuat VM
Buat VM dari versi gambar yang dibuat oleh Azure VM Image Builder.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
Gunakan Secure Shell (SSH) untuk masuk ke VM.
ssh aibuser@<publicIpAddress>
Anda akan melihat gambar itu disesuaikan dengan Pesan Hari Ini segera setelah koneksi SSH Anda dibuat!
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Membersihkan sumber daya
Jika Anda ingin menggunakan kembali versi gambar untuk membuat versi baru dari gambar yang sama, lewati langkah-langkah berikutnya dan lanjutkan menggunakan Azure VM Image Builder untuk membuat versi gambar lain.
Berikut ini menghapus gambar yang dibuat, bersama dengan semua file sumber daya lainnya. Pastikan Anda sudah selesai dengan penyebaran ini sebelum menghapus sumber daya.
Saat menghapus sumber daya galeri, Anda perlu menghapus semua versi gambar sebelum Anda dapat menghapus definisi gambar yang digunakan untuk membuatnya. Untuk menghapus galeri, Anda harus terlebih dahulu menghapus semua definisi gambar di galeri.
Menghapus templat VM Image Builder:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Menghapus penetapan izin, peran, dan identitas:
az role assignment delete \
--assignee $imgBuilderCliId \
--role $imageRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az role assignment delete \
--assignee $imgBuilderCliId \
--role $netRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName
az role definition delete --name "$imageRoleDefName"
az role definition delete --name "$netRoleDefName"
az identity delete --ids $imgBuilderId
Menghapus grup sumber daya:
az group delete -n $imageResourceGroup
Jika Anda membuat jaringan virtual untuk mulai cepat ini, Anda dapat menghapus jaringan virtual jika tidak lagi digunakan.