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 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
Tworzenie definicji obrazu i galerii
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
Nawiąż połączenie z maszyną wirtualną 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.
Usuń szablon konstruktora obrazów maszyny wirtualnej.
az resource delete \ --resource-group $sigResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIG01
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
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
Usuń definicję obrazu.
az sig image-definition delete \ -g $sigResourceGroup \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionID
Usuń galerię.
az sig delete -r $sigName -g $sigResourceGroup
Usuń grupę zasobów.
az group delete -n $sigResourceGroup -y
Następne kroki
Dowiedz się więcej o galerii zasobów obliczeniowych platformy Azure.