Tworzenie obrazu systemu Linux i dystrybuowanie go do galerii obliczeń platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

Z tego artykułu dowiesz się, jak za pomocą narzędzia Azure VM Image Builder i interfejsu wiersza polecenia platformy Azure utworzyć wersję obrazu w galerii obliczeń platformy Azure (dawniej Shared Image Gallery ), a następnie rozpowszechniać obraz globalnie. Wersję obrazu można również utworzyć przy użyciu programu Azure PowerShell.

W tym artykule użyto przykładowego szablonu JSON do skonfigurowania obrazu. Plik JSON znajduje się w pliku helloImageTemplateforSIG.json.

Aby rozpowszechnić obraz w galerii obliczeniowej platformy Azure, szablon używa funkcji sharedImage jako wartości distribute sekcji szablonu.

Rejestrowanie dostawców

Aby użyć narzędzia VM Image Builder, musisz zarejestrować dostawców. Sprawdź rejestrację, uruchamiając następujące polecenia:

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

Jeśli dane wyjściowe nie powiedzą się zarejestrowane, uruchom następujące polecenia:

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

Ustawianie zmiennych i uprawnień

Ponieważ będziesz używać niektórych informacji wielokrotnie, utwórz pewne zmienne do przechowywania tych informacji.

Konstruktor obrazów maszyny wirtualnej obsługuje tworzenie obrazów niestandardowych tylko w tej samej grupie zasobów co obraz zarządzany przez źródło. W poniższym przykładzie zaktualizuj nazwę grupy zasobów tak, aby być tą samą grupą zasobów co obraz zarządzany przez źródło.

# 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

Utwórz zmienną dla identyfikatora subskrypcji:

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

Utwórz grupę zasobów:

az group create -n $sigResourceGroup -l $location

Tworzenie tożsamości przypisanej przez użytkownika i ustawianie uprawnień w grupie zasobów

Konstruktor obrazów maszyny wirtualnej używa podanej tożsamości użytkownika do wstrzykiwania obrazu do galerii obliczeń platformy Azure. W tym przykładzie utworzysz definicję roli platformy Azure z określonymi akcjami do dystrybucji obrazu. Definicja roli jest następnie przypisywana do tożsamości użytkownika.

# 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

Aby używać konstruktora obrazów maszyn wirtualnych z galerią obliczeń platformy Azure, musisz mieć istniejącą galerię i definicję obrazu. Konstruktor obrazów maszyny wirtualnej nie tworzy galerii i definicji obrazu.

Jeśli nie masz jeszcze galerii i definicji obrazu do użycia, zacznij od ich utworzenia.

Najpierw utwórz galerię:

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

Następnie utwórz definicję obrazu:

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

Pobieranie i konfigurowanie pliku JSON

Pobierz szablon JSON i skonfiguruj go przy użyciu zmiennych:

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

Tworzenie wersji obrazu

W tej sekcji utworzysz wersję obrazu w galerii.

Prześlij konfigurację obrazu do usługi Azure VM Image Builder:

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

Uruchom kompilację obrazu:

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

Utworzenie obrazu i zreplikowanie go do obu regionów może potrwać kilka minut. Przed przejściem do utworzenia maszyny wirtualnej zaczekaj na zakończenie tej części.

Tworzenie maszyny wirtualnej

Utwórz maszynę wirtualną na podstawie wersji obrazu utworzonej przez narzędzie 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

Połączenie do maszyny wirtualnej za pośrednictwem protokołu Secure Shell (SSH):

ssh aibuser@<publicIpAddress>

Po nawiązaniu połączenia SSH powinno zostać wyświetlone, że obraz został dostosowany za pomocą komunikatu dnia:

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

Oczyszczanie zasobów

Uwaga

Jeśli chcesz teraz spróbować ponownie utworzyć wersję obrazu, aby utworzyć nową wersję tego samego obrazu, pomiń krok opisany tutaj i przejdź do sekcji Używanie narzędzia VM Image Builder, aby utworzyć inną wersję obrazu.

Jeśli nie potrzebujesz już zasobów utworzonych podczas wykonywania procesu opisanego w tym artykule, możesz je usunąć, wykonując następujące czynności.

Ten proces usuwa zarówno utworzony obraz, jak i wszystkie inne pliki zasobów. Przed usunięciem zasobów upewnij się, że to wdrożenie zostało ukończone.

Podczas usuwania zasobów galerii należy usunąć wszystkie wersje obrazów, zanim będzie można usunąć definicję obrazu, która została użyta do ich utworzenia. Aby usunąć galerię, musisz najpierw usunąć wszystkie definicje obrazów w galerii.

  1. Usuń szablon konstruktora obrazów maszyny wirtualnej.

    az resource delete \
        --resource-group $sigResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIG01
    
  2. Usuwanie przypisań uprawnień, ról i tożsamości.

    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. Pobierz wersję obrazu utworzoną przez narzędzie VM Image Builder (zawsze zaczyna się od 0.), a następnie usuń ją.

    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. Usuń definicję obrazu.

    az sig image-definition delete \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  5. Usuń galerię.

    az sig delete -r $sigName -g $sigResourceGroup
    
  6. Usuń grupę zasobów.

    az group delete -n $sigResourceGroup -y
    

Następne kroki

Dowiedz się więcej o galerii zasobów obliczeniowych platformy Azure.