Een Linux-installatiekopieën maken en distribueren naar een Azure Compute-galerie

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

In dit artikel wordt beschreven hoe u de Azure Image Builder en de Azure CLI kunt gebruiken om een installatiekopieënversie te maken in een Azure Compute Gallery (voorheen shared Image Gallery genoemd), en de installatiekopieën vervolgens wereldwijd te distribueren. U kunt dit ook doen met behulp van Azure PowerShell.

We gebruiken een .json-voorbeeldsjabloon om de installatiekopieën te configureren. Het .json-bestand dat we gebruiken, is hier: helloImageTemplateforSIG.json.

Als u de installatiekopie wilt distribueren naar een Azure Compute Gallery, gebruikt de sjabloon sharedImage als de waarde voor de distribute sectie van de sjabloon.

De providers registreren

Als u Azure Image Builder wilt gebruiken, moet u de functie registreren.

Controleer uw registratie.

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

Als ze niet geregistreerd zeggen, voert u het volgende uit:

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

Variabelen en machtigingen instellen

We gebruiken herhaaldelijk enkele gegevens, dus we maken enkele variabelen om die informatie op te slaan.

Image Builder biedt alleen ondersteuning voor het maken van aangepaste installatiekopieën in dezelfde resourcegroep als de beheerde broninstallatiekopieën. Werk de naam van de resourcegroep in dit voorbeeld bij als dezelfde resourcegroep als de door de bron beheerde installatiekopieën.

# 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

Maak een variabele voor uw abonnements-id.

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

Maak de resourcegroep.

az group create -n $sigResourceGroup -l $location

Een door de gebruiker toegewezen identiteit maken en machtigingen instellen voor de resourcegroep

Image Builder maakt gebruik van de gebruikersidentiteit die is opgegeven om de installatiekopieën in de Azure Compute Gallery te injecteren. In dit voorbeeld maakt u een Azure-roldefinitie met de gedetailleerde acties voor het distribueren van de installatiekopieën naar de galerie. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.

# 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

Als u Image Builder wilt gebruiken met een Azure Compute Gallery, moet u een bestaande galerie en installatiekopieëndefinitie hebben. Image Builder maakt de galerie en definitie van de installatiekopieën niet voor u.

Als u nog geen galerie en definitie van installatiekopieën hebt die u wilt gebruiken, begint u met het maken ervan. Maak eerst een galerie.

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

Maak vervolgens een definitie van de installatiekopieën.

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

De .json downloaden en configureren

Download de .json-sjabloon en configureer deze met uw variabelen.

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

De installatiekopieversie maken

In dit volgende deel wordt de versie van de installatiekopieën in de galerie gemaakt.

Verzend de installatiekopieënconfiguratie naar de Azure Image Builder-service.

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

Start de build van de installatiekopieën.

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

Het maken van de installatiekopieën en het repliceren naar beide regio's kan enige tijd duren. Wacht totdat dit onderdeel is voltooid voordat u verdergaat met het maken van een virtuele machine.

De VM maken

Maak een VIRTUELE machine op basis van de versie van de installatiekopieën die is gemaakt door 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

Maak via SSH verbinding met de virtuele machine.

ssh aibuser@<publicIpAddress>

U ziet dat de afbeelding is aangepast met een bericht van de dag zodra uw SSH-verbinding tot stand is gebracht.

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

Resources opschonen

Als u nu de versie van de installatiekopieën opnieuw wilt bekijken om een nieuwe versie van dezelfde installatiekopieën te maken, slaat u de volgende stappen over en gaat u verder met Het gebruik van Azure Image Builder om een andere versie van de installatiekopieën te maken.

Hiermee verwijdert u de installatiekopieën die zijn gemaakt, samen met alle andere resourcebestanden. Zorg ervoor dat u klaar bent met deze implementatie voordat u de resources verwijdert.

Wanneer u galeriebronnen verwijdert, moet u alle installatiekopieën verwijderen voordat u de definitie van de installatiekopieën kunt verwijderen die worden gebruikt om deze te maken. Als u een galerie wilt verwijderen, moet u eerst alle definities van installatiekopieën in de galerie hebben verwijderd.

Verwijder de sjabloon voor de opbouwfunctie voor afbeeldingen.

az resource delete \
    --resource-group $sigResourceGroup \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

Machtigingentoewijzingen, rollen en identiteit verwijderen

az role assignment delete \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup

az role definition delete --name "$imageRoleDefName"

az identity delete --ids $imgBuilderId

Haal de installatiekopieënversie op die is gemaakt door image builder, dit begint altijd met 0.en verwijder vervolgens de versie van de installatiekopieën

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

Verwijder de definitie van de installatiekopieën.

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

Verwijder de galerie.

az sig delete -r $sigName -g $sigResourceGroup

Verwijder de resourcegroep.

az group delete -n $sigResourceGroup -y

Volgende stappen

Meer informatie over Azure Compute-galerieën.