Vytvoření image Linuxu a její distribuce do Galerie výpočetních prostředků Azure pomocí Azure CLI

Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️

V tomto článku se dozvíte, jak pomocí Azure VM Image Builderu a Azure CLI vytvořit verzi image v Galerii výpočetních prostředků Azure (dříve Sdílená galerie imagí) a pak ji globálně distribuovat. Verzi image můžete vytvořit také pomocí Azure PowerShellu.

Tento článek používá ukázkovou šablonu JSON ke konfiguraci image. Soubor JSON je na webu helloImageTemplateforSIG.json.

Pokud chcete distribuovat image do galerie služby Azure Compute, šablona jako hodnotu oddílu distribute šablony používá sharedImage.

Registrace poskytovatelů

Pokud chcete použít Nástroj Image Builder virtuálního počítače, musíte poskytovatele zaregistrovat. Zkontrolujte registraci spuštěním následujících příkazů:

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

Pokud výstup neřekne zaregistrovaný, spusťte následující příkazy:

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

Nastavení proměnných a oprávnění

Protože budete opakovaně používat některé části informací, vytvořte některé proměnné pro uložení těchto informací.

Image Builder virtuálního počítače podporuje vytváření vlastních imagí pouze ve stejné skupině prostředků jako zdrojová image spravovaná zdrojem. V následujícím příkladu aktualizujte název skupiny prostředků tak, aby byl stejná jako vaše zdrojová image.

# 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

Vytvořte proměnnou pro ID předplatného:

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

Vytvořte skupinu prostředků:

az group create -n $sigResourceGroup -l $location

Vytvoření identity přiřazené uživatelem a nastavení oprávnění pro skupinu prostředků

Image Builder virtuálního počítače používá zadanou identitu uživatele k vložení image do Galerie výpočetních prostředků Azure. V tomto příkladu vytvoříte definici role Azure s konkrétními akcemi pro distribuci image. Definice role se pak přiřadí identitě uživatele.

# 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

Pokud chcete použít Tvůrce imagí virtuálních počítačů s galerií Azure Compute, musíte mít existující galerii a definici image. VM Image Builder za vás nevytvoří galerii a definici image.

Pokud ještě nemáte k dispozici galerii a definici obrázku, začněte jejich vytvořením.

Nejprve vytvořte galerii:

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

Pak vytvořte definici image:

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

Stažení a konfigurace souboru JSON

Stáhněte si šablonu JSON a nakonfigurujte ji s vašimi proměnnými:

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

Vytvoření verze image

V této části vytvoříte verzi image v galerii.

Odešlete konfiguraci image do služby Azure VM Image Builder:

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

Spusťte sestavení image:

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

Vytvoření image a jeho replikace do obou oblastí může chvíli trvat. Než přejdete k vytvoření virtuálního počítače, počkejte, až se tato část dokončí.

Vytvoření virtuálního počítače

Vytvořte virtuální počítač z verze image vytvořené nástrojem 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

Připojení k virtuálnímu počítači přes Secure Shell (SSH):

ssh aibuser@<publicIpAddress>

Jakmile se naváže připojení SSH, měli byste vidět, že image byla přizpůsobena zprávou dne:

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

Vyčištění prostředků

Poznámka:

Pokud se teď chcete pokusit znovu použít verzi image a vytvořit novou verzi stejné image, přeskočte zde uvedený krok a přejděte k vytvoření jiné verze image pomocí Nástroje image virtuálního počítače.

Pokud už nepotřebujete prostředky vytvořené podle postupu v tomto článku, můžete je odstranit pomocí následujícího postupu.

Tento proces odstraní image, kterou jste vytvořili, i všechny ostatní soubory prostředků. Před odstraněním prostředků se ujistěte, že jste dokončili toto nasazení.

Když odstraňujete prostředky galerie, musíte před odstraněním definice obrázku, která byla použita k jejich vytvoření, odstranit všechny verze imagí. Pokud chcete odstranit galerii, musíte nejprve odstranit všechny definice obrázků v galerii.

  1. Odstraňte šablonu Image Builderu virtuálního počítače.

    az resource delete \
        --resource-group $sigResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIG01
    
  2. Odstraňte přiřazení oprávnění, role a identitu.

    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. Získejte verzi image vytvořenou nástrojem VM Image Builder (vždy začíná 0.) a odstraňte ji.

    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. Odstraňte definici obrázku.

    az sig image-definition delete \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  5. Odstraňte galerii.

    az sig delete -r $sigName -g $sigResourceGroup
    
  6. Odstraňte skupinu prostředků.

    az group delete -n $sigResourceGroup -y
    

Další kroky

Přečtěte si další informace o Galerii výpočetních prostředků Azure.