Creare un'immagine Linux e distribuirla in una raccolta di calcolo di Azure
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Questo articolo illustra come usare Azure Image Builder e l'interfaccia della riga di comando di Azure per creare una versione dell'immagine in una raccolta di calcolo di Azure (in precedenza nota come Raccolta immagini condivise), quindi distribuire l'immagine a livello globale. Questa operazione può essere eseguita anche tramite Azure PowerShell.
Verrà usato un modello di .json di esempio per configurare l'immagine. Il file .json usato è qui: helloImageTemplateforSIG.json.
Per distribuire l'immagine in una Raccolta di calcolo di Azure, il modello usa sharedImage come valore per la sezione distribute
del modello.
Registrare i provider
Per usare Image Builder di Azure, è necessario registrare la funzionalità.
Verificare la registrazione.
az provider show -n Microsoft.VirtualMachineImages | grep registrationState
az provider show -n Microsoft.KeyVault | grep registrationState
az provider show -n Microsoft.Compute | grep registrationState
az provider show -n Microsoft.Storage | grep registrationState
az provider show -n Microsoft.Network | grep registrationState
az provider show -n Microsoft.ContainerInstance | grep registrationState
Se non si dice registrato, eseguire quanto segue:
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
Verranno usate ripetutamente alcune informazioni, quindi verranno create alcune variabili per archiviare tali informazioni.
Image Builder supporta solo la creazione di immagini personalizzate nello stesso gruppo di risorse dell'immagine gestita di origine. Aggiornare il nome del gruppo di risorse in questo esempio in modo che sia uguale a quello del gruppo di risorse dell'immagine gestita di origine.
# Resource group name - we are using ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - we are using West US 2 in this example
location=westus2
# Additional region to replicate the image to - we are using East US in this example
additionalregion=eastus
# name of the Azure Compute Gallery - in this example we are using myGallery
sigName=myIbGallery
# name of the image definition to be created - in this example we are using myImageDef
imageDefName=myIbImageDef
# image distribution metadata reference name
runOutputName=aibLinuxSIG
Creare una variabile per l'ID di 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 autorizzazioni per il gruppo di risorse
Image Builder usa l'identità utente fornita per inserire l'immagine nella raccolta di calcolo di Azure. In questo esempio si creerà una definizione di ruolo di Azure con le azioni granulari per eseguire la distribuzione dell'immagine nella raccolta. La definizione del ruolo verrà quindi assegnata all'identità utente.
# create user assigned identity for image builder to access the storage account where the script is located
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName
# get identity id
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)
# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# this command will download an Azure role definition template, and update the template with the parameters 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 role definition to the user assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
Creare una definizione dell'immagine e una raccolta
Per usare Image Builder con una raccolta di calcolo di Azure, è necessario avere una raccolta e una definizione di immagine esistenti. Image Builder non creerà automaticamente la raccolta e la definizione di immagine.
Se non si ha già una raccolta e una definizione di immagine da usare, iniziare creando questi elementi. Creare prima di tutto una raccolta.
az sig create \
-g $sigResourceGroup \
--gallery-name $sigName
Creare una definizione dell'immagine.
az sig image-definition create \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--publisher myIbPublisher \
--offer myOffer \
--sku 18.04-LTS \
--os-type Linux
Scaricare e configurare il file con estensione json
Scaricare il modello con estensione 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
Creare una versione di immagine
In questa parte viene creata la versione dell'immagine nella raccolta.
Inviare la configurazione dell'immagine al servizio Image Builder 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 sua replica in entrambe le aree possono richiedere un certo tempo. Attendere il completamento di questa parte prima di procedere alla creazione di una macchina virtuale.
Creare la macchina virtuale
Creare una macchina virtuale dalla versione dell'immagine creata da Azure 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" \
--generate-ssh-keys
Accedere tramite SSH alla macchina virtuale.
ssh aibuser@<publicIpAddress>
Si noterà che l'immagine viene personalizzata con un messaggio del giorno non appena viene stabilita la connessione SSH.
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Pulire le risorse
Se si vuole ora provare a ricustomizzare la versione dell'immagine per creare una nuova versione della stessa immagine, ignorare i passaggi successivi e passare a Usare Image Builder di Azure per creare un'altra versione dell'immagine.
In questo modo viene eliminata l'immagine creata, insieme a 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, è prima di tutto necessario eliminare tutte le definizioni immagine nella raccolta.
Eliminare il modello di generatore di immagini.
az resource delete \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Eliminare 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 $imgBuilderId
Ottenere la versione dell'immagine creata da Image Builder, che inizia sempre con 0.
, quindi eliminare la versione dell'immagine
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
Eliminare la definizione immagine.
az sig image-definition delete \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID
Eliminare la raccolta.
az sig delete -r $sigName -g $sigResourceGroup
Eliminare il gruppo di risorse.
az group delete -n $sigResourceGroup -y
Passaggi successivi
Altre informazioni sulle raccolte di calcolo di Azure.