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 v helloImageTemplateforSIG.json.

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

Registrace poskytovatelů

Abyste mohli používat VM Image Builder, musíte zaregistrovat poskytovatele. 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 VM podporuje vytváření vlastních obrazů pouze ve stejné skupině prostředků jako spravovaný zdrojový obraz. V následujícím příkladu aktualizujte název skupiny prostředků tak, aby byla stejná jako vaše zdrojově spravovaný obraz.

# 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řte uživatelem přiřazenou identitu a nastavte 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.

Úspěch následujícího příkazu závisí na šíření RBAC, což může v některých případech trvat až přibližně 30 minut. Počkejte asi 5 minut, než příkaz spustíte, a pokud dojde k chybě, zkuste to znovu.

# 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

Pokud chcete použít VM Image Builder s Azure Compute Gallery, musíte mít existující galerii a definici obrazu. 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
sed -i -e "s/sudo mkdir/sleep 300;sudo mkdir/g" helloImageTemplateforSIG.json

Vytvořte verzi obrazu

V této části vytvoříte verzi obrázku 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í obrazu:

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řipojte se k virtuálnímu počítači přes Secure Shell (SSH):

ssh aibuser@<publicIpAddress>

Jakmile je navázáno připojení SSH, měli byste vidět, že obraz byl přizpůsoben pomocí zprávy dne:

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

Ukliďte své prostředky

Poznámka:

Pokud se teď chcete pokusit přizpůsobit 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 pro vytváření image virtuálních počítačů.

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í jak obraz, který jste vytvořili, tak všechny ostatní soubory zdrojů. 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 nástroje Image Builder pro virtuální 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.