Tworzenie maszyny wirtualnej z systemem Windows przy użyciu narzędzia Azure VM Image Builder
Dotyczy: ✔️ maszyny wirtualne z systemem Windows
Z tego artykułu dowiesz się, jak utworzyć dostosowany obraz systemu Windows przy użyciu narzędzia Azure VM Image Builder. W przykładzie w tym artykule użyto konfiguratorów do dostosowywania obrazu:
- PowerShell (ScriptUri): pobierz i uruchom skrypt programu PowerShell.
- Ponowne uruchomienie systemu Windows: uruchamia ponownie maszynę wirtualną.
- PowerShell (wbudowany): uruchamia określone polecenie. W tym przykładzie tworzy katalog na maszynie wirtualnej przy użyciu polecenia
mkdir c:\\buildActions
. - Plik: kopiuje plik z usługi GitHub do maszyny wirtualnej. Ten przykład kopiuje index.md na
c:\buildArtifacts\index.html
maszynie wirtualnej. buildTimeoutInMinutes
: określa czas kompilacji w minutach. Wartość domyślna to 240 minut, co można zwiększyć w celu umożliwienia dłuższych kompilacji. Minimalna dozwolona wartość to 6 minut. Wartości krótsze niż 6 minut spowodują błędy.vmProfile
: określavmSize
właściwości sieci i .osDiskSizeGB
: Może służyć do zwiększenia rozmiaru obrazu.identity
. Zapewnia tożsamość konstruktora obrazów maszyny wirtualnej do użycia podczas kompilacji.
Użyj następującego przykładowego szablonu JSON, aby skonfigurować obraz: helloImageTemplateWin.json.
Uwaga
Użytkownicy systemu Windows mogą uruchamiać następujące przykłady interfejsu wiersza polecenia platformy Azure w usłudze Azure Cloud Shell przy użyciu powłoki Bash.
Rejestrowanie dostawców
Aby użyć narzędzia Vm Image Builder, należy zarejestrować tę funkcję. Sprawdź rejestrację, uruchamiając następujące polecenia:
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 -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
Ponieważ będziesz używać niektórych informacji wielokrotnie, utwórz niektóre zmienne do przechowywania tych informacji:
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Utwórz zmienną dla identyfikatora subskrypcji:
subscriptionID=$(az account show --query id --output tsv)
Tworzenie grupy zasobów
Aby zapisać artefakt szablonu konfiguracji obrazu i obraz, użyj następującej grupy zasobów:
az group create -n $imageResourceGroup -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 grupy zasobów. W tym przykładzie utworzysz definicję roli platformy Azure z określonymi uprawnieniami do dystrybucji obrazu. Definicja roli jest następnie przypisywana do tożsamości użytkownika.
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika i udzielanie uprawnień
Utwórz tożsamość przypisaną przez użytkownika, aby program VM Image Builder mógł uzyskać dostęp do konta magazynu, na którym jest przechowywany skrypt.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
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>%$imageResourceGroup%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/$imageResourceGroup
Pobieranie szablonu konfiguracji obrazu
Utworzyliśmy sparametryzowany szablon konfiguracji obrazu, który chcesz wypróbować. Pobierz przykładowy plik JSON, a następnie skonfiguruj go przy użyciu zmiennych ustawionych wcześniej.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
Ten przykład można zmodyfikować w terminalu przy użyciu edytora tekstów, takiego jak vi
.
vi helloImageTemplateWin.json
Uwaga
W przypadku obrazu źródłowego zawsze określ wersję. Nie można określić latest
wersji.
Jeśli dodasz lub zmienisz grupę zasobów, do której jest dystrybuowany obraz, upewnij się, że uprawnienia są ustawione w grupie zasobów.
Tworzenie obrazu
Prześlij konfigurację obrazu do usługi Vm Image Builder, uruchamiając następujące polecenia:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Po zakończeniu zostanie zwrócony komunikat o powodzeniu do konsoli programu , a szablon konfiguracji konstruktora obrazów maszyny wirtualnej zostanie utworzony w pliku $imageResourceGroup
.
W tle narzędzie VM Image Builder tworzy również tymczasową grupę zasobów w ramach subskrypcji. Ta grupa zasobów służy do kompilowania obrazu w następującym formacie: IT_<DestinationResourceGroup>_<TemplateName>
.
Uwaga
Jeśli usunięcie jest wymagane, nie usuwaj tymczasowej grupy zasobów bezpośrednio. Najpierw usuń artefakt szablonu obrazu, który następnie usunie tymczasową grupę zasobów. W przeciwnym razie szablon obrazu może wprowadzić stan niepowodzenia.
Jeśli usługa zgłasza błąd podczas przesyłania szablonu konfiguracji obrazu, wykonaj następujące czynności:
- Zobacz Rozwiązywanie problemów z usługą Azure VM Image Builder.
- Przed podjęciem próby ponownego przesłanie szablonu usuń go, uruchamiając następujące polecenia:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Uruchamianie kompilacji obrazu
Uruchom proces tworzenia obrazu przy użyciu polecenia az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Poczekaj na zakończenie kompilacji.
Jeśli wystąpią jakiekolwiek błędy, zobacz Rozwiązywanie problemów z usługą Azure VM Image Builder.
Tworzenie maszyny wirtualnej
Utwórz maszynę wirtualną przy użyciu utworzonego obrazu. W poniższym kodzie zastąp <hasło> własnym hasłem dla użytkownika aibuser na maszynie wirtualnej.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
Weryfikowanie dostosowania
Utwórz połączenie pulpitu zdalnego z maszyną wirtualną przy użyciu nazwy użytkownika i hasła ustawionego podczas tworzenia maszyny wirtualnej. Na maszynie wirtualnej otwórz okno wiersza polecenia, a następnie wpisz:
dir c:\
Podczas dostosowywania obrazu są tworzone następujące dwa katalogi:
- buildActions
- buildArtifacts
Oczyszczanie zasobów
Po zakończeniu usuń utworzone zasoby.
Usuń szablon konstruktora obrazów maszyny wirtualnej.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Usuń przypisanie roli, definicję roli i tożsamość użytkownika.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Usuń grupę zasobów obrazu.
az group delete -n $imageResourceGroup
Następne kroki
Aby dowiedzieć się więcej o składnikach pliku JSON używanego w tym artykule, zobacz dokumentację szablonu narzędzia Image Builder maszyny wirtualnej.