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śla vmSize 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. Aby wyświetlić ten zasób w grupie zasobów, przejdź do witryny Azure Portal, a następnie włącz opcję Pokaż ukryte typy.

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

Nie usuwaj tymczasowej grupy zasobów bezpośrednio. Najpierw usuń artefakt szablonu obrazu, co powoduje usunięcie przejściowej grupy zasobów.

Jeśli usługa zgłasza błąd podczas przesyłania szablonu konfiguracji obrazu, wykonaj następujące czynności:

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.

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

    az resource delete \
        --resource-group $imageResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateWin01
    
  2. 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
    
  3. 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.