Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Questo articolo illustra come usare Image Builder di macchine virtuali di Azure e l'interfaccia della riga di comando di Azure per creare una versione dell'immagine in una raccolta di calcolo di Azure (in precedenza raccolta immagini condivise) e quindi distribuire l'immagine a livello globale. È anche possibile creare una versione dell'immagine usando Azure PowerShell.
Questo articolo usa un modello JSON di esempio per configurare l'immagine. Il file JSON si trova in helloImageTemplateforSIG.json.
Per distribuire l'immagine in una Raccolta di calcolo di Azure, il modello usa sharedImage come valore per la sezione distribute.
Registrare i fornitori
Per usare VM Image Builder, è necessario registrare i provider. Controllare la registrazione eseguendo i comandi seguenti:
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
Se l'output non dice registrato, eseguire i comandi seguenti:
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
Impostare variabili e autorizzazioni
Poiché si useranno ripetutamente alcune informazioni, creare alcune variabili per archiviare tali informazioni.
VM Image Builder supporta la creazione di immagini personalizzate solo nello stesso gruppo di risorse come l'immagine gestita dal gestore di origine. Nell'esempio seguente aggiornare il nome del gruppo di risorse in modo che sia lo stesso gruppo di risorse dell'immagine gestita dall'origine.
# 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
Creare una variabile per l'ID sottoscrizione:
subscriptionID=$(az account show --query id --output tsv)
Creare il gruppo di risorse:
az group create -n $sigResourceGroup -l $location
Creare un'identità assegnata dall'utente e impostare le autorizzazioni per il gruppo di risorse
VM Image Builder usa l'identità utente fornita per iniettare l'immagine in un Azure Compute Gallery. In questo esempio viene creata una definizione di ruolo di Azure con azioni specifiche per la distribuzione dell'immagine. La definizione del ruolo viene quindi assegnata all'identità utente.
Il successo del comando seguente dipende dalla propagazione di RBAC, che può richiedere fino a circa 30 minuti in alcuni casi. Attendere circa 5 minuti prima di eseguire il comando e riprovare dopo un ritardo se si verifica un errore.
# 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. The success of the following command relies on RBAC propagation, which can take up to ~30 minutes. Wait about 5 minutes before running the command and wait a few more minutes before retrying if you get an error.
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
Creare una definizione e una raccolta di immagini
Per usare VM Image Builder con Azure Compute Gallery, è necessario avere una raccolta esistente e una definizione di immagine. VM Image Builder non crea la galleria e la definizione di immagine per te.
Se non hai già una raccolta e una definizione di immagine da utilizzare, inizia creandole.
Per prima cosa, crea una galleria:
az sig create \
-g $sigResourceGroup \
--gallery-name $sigName
Creare quindi una definizione di immagine:
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
Scaricare e configurare il file JSON
Scaricare il modello JSON e configurarlo con le variabili:
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
sed -i -e "s/sudo mkdir/sleep 300;sudo mkdir/g" helloImageTemplateforSIG.json
Creare una versione di immagine
In questa sezione viene creata la versione dell'immagine nella raccolta.
Inviare la configurazione dell'immagine al servizio Image Builder di macchine virtuali di Azure:
az resource create \
--resource-group $sigResourceGroup \
--properties @helloImageTemplateforSIG.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Avviare la compilazione dell'immagine:
az resource invoke-action \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01 \
--action Run
La creazione dell'immagine e la replica in entrambe le aree possono richiedere alcuni istanti. Attendere il completamento di questa parte prima di passare alla creazione di una macchina virtuale.
Creare la macchina virtuale
Creare la macchina virtuale dalla versione dell'immagine creata dal VM 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
Connettersi alla macchina virtuale tramite Secure Shell (SSH):
ssh aibuser@<publicIpAddress>
Non appena viene stabilita la connessione SSH, si noterà che l'immagine è stata personalizzata con un messaggio del giorno:
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Pulisci le tue risorse
Annotazioni
Se si vuole ora provare a ricustomizzare la versione dell'immagine per creare una nuova versione della stessa immagine, ignorare il passaggio descritto qui e passare a Usare Image Builder vm per creare un'altra versione dell'immagine.
Se non sono più necessarie le risorse create durante la procedura descritta in questo articolo, è possibile eliminarle eseguendo le operazioni seguenti.
Questo processo elimina sia l'immagine creata che tutti gli altri file di risorse. Assicurarsi di aver completato questa distribuzione prima di eliminare le risorse.
Quando si eliminano le risorse della raccolta, è necessario eliminare tutte le versioni dell'immagine prima di poter eliminare la definizione dell'immagine usata per crearle. Per eliminare una raccolta, è necessario prima eliminare tutte le definizioni di immagine nella raccolta.
Eliminare il modello Image Builder per macchine virtuali.
az resource delete \ --resource-group $sigResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIG01Eliminare assegnazioni di autorizzazioni, ruoli e identità.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderIdOttenere la versione dell'immagine creata da Image Builder (inizia sempre con
0.) e quindi eliminarla.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 $subscriptionIDEliminare la definizione dell'immagine.
az sig image-definition delete \ -g $sigResourceGroup \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionIDEliminare la galleria.
az sig delete -r $sigName -g $sigResourceGroupEliminare il gruppo di risorse.
az group delete -n $sigResourceGroup -y
Passaggi successivi
Altre informazioni su Azure Compute Gallery.